This is an automated email from the ASF dual-hosted git repository.

davsclaus pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git


The following commit(s) were added to refs/heads/main by this push:
     new 17d4336  CAMEL-17806: camel-yaml-dsl - Better parser error with source 
loc:line of the problem
17d4336 is described below

commit 17d43363cd1674a2f34ee75c5765c0c99a939328
Author: Claus Ibsen <[email protected]>
AuthorDate: Thu Mar 31 17:10:40 2022 +0200

    CAMEL-17806: camel-yaml-dsl - Better parser error with source loc:line of 
the problem
---
 .../dsl/yaml/common/YamlDeserializerBase.java      | 27 ++++++++------
 .../dsl/yaml/common/YamlDeserializerSupport.java   |  7 ++--
 .../EndpointConsumerDeserializersResolver.java     |  1 +
 .../camel/dsl/yaml/YamlRoutesBuilderLoader.java    | 42 ++++++++++++----------
 4 files changed, 46 insertions(+), 31 deletions(-)

diff --git 
a/dsl/camel-yaml-dsl/camel-yaml-dsl-common/src/main/java/org/apache/camel/dsl/yaml/common/YamlDeserializerBase.java
 
b/dsl/camel-yaml-dsl/camel-yaml-dsl-common/src/main/java/org/apache/camel/dsl/yaml/common/YamlDeserializerBase.java
index c3d29d1..118b30d 100644
--- 
a/dsl/camel-yaml-dsl/camel-yaml-dsl-common/src/main/java/org/apache/camel/dsl/yaml/common/YamlDeserializerBase.java
+++ 
b/dsl/camel-yaml-dsl/camel-yaml-dsl-common/src/main/java/org/apache/camel/dsl/yaml/common/YamlDeserializerBase.java
@@ -57,25 +57,16 @@ public abstract class YamlDeserializerBase<T> extends 
YamlDeserializerSupport im
             if (line != -1) {
                 line++;
             }
+            onNewTarget(node, target, line);
         } else if (node.getNodeType() == NodeType.MAPPING) {
             MappingNode mn = (MappingNode) node;
             target = newInstance();
+            onNewTarget(node, target, line);
             setProperties(target, mn);
         } else {
             throw new UnsupportedNodeTypeException(node);
         }
 
-        // enrich model with source location:line number
-        if (target instanceof LineNumberAware && line != -1) {
-            LineNumberAware lna = (LineNumberAware) target;
-            lna.setLineNumber(line);
-
-            YamlDeserializationContext ctx = getDeserializationContext(node);
-            if (ctx != null) {
-                lna.setLocation(ctx.getResource().getLocation());
-            }
-        }
-
         return target;
     }
 
@@ -132,4 +123,18 @@ public abstract class YamlDeserializerBase<T> extends 
YamlDeserializerSupport im
     protected void handleUnknownProperty(T target, String propertyKey, String 
propertyName, Node value) {
         throw new UnsupportedFieldException(value, propertyName);
     }
+
+    protected void onNewTarget(Node node, T target, int line) {
+        // enrich model with source location:line number
+        if (target instanceof LineNumberAware && line != -1) {
+            LineNumberAware lna = (LineNumberAware) target;
+            lna.setLineNumber(line);
+
+            YamlDeserializationContext ctx = getDeserializationContext(node);
+            if (ctx != null) {
+                lna.setLocation(ctx.getResource().getLocation());
+            }
+        }
+    }
+
 }
diff --git 
a/dsl/camel-yaml-dsl/camel-yaml-dsl-common/src/main/java/org/apache/camel/dsl/yaml/common/YamlDeserializerSupport.java
 
b/dsl/camel-yaml-dsl/camel-yaml-dsl-common/src/main/java/org/apache/camel/dsl/yaml/common/YamlDeserializerSupport.java
index 4f1544a..2fc3ecc 100644
--- 
a/dsl/camel-yaml-dsl/camel-yaml-dsl-common/src/main/java/org/apache/camel/dsl/yaml/common/YamlDeserializerSupport.java
+++ 
b/dsl/camel-yaml-dsl/camel-yaml-dsl-common/src/main/java/org/apache/camel/dsl/yaml/common/YamlDeserializerSupport.java
@@ -375,7 +375,10 @@ public class YamlDeserializerSupport {
     }
 
     public static Map<String, Object> parseParameters(Block target, NodeTuple 
node) {
-        return asScalarMap(node.getValueNode());
+        Node value = node.getValueNode();
+        final YamlDeserializationContext dc = getDeserializationContext(value);
+        Map<String, Object> answer = asScalarMap(value);
+        return answer;
     }
 
     public static void setSteps(Block target, Node node) {
@@ -384,7 +387,7 @@ public class YamlDeserializerSupport {
         setSteps(target, node, flow);
     }
 
-    public static void setSteps(Block target, Node node, boolean flowMode) {
+    private static void setSteps(Block target, Node node, boolean flowMode) {
         Block block = target;
         for (ProcessorDefinition<?> definition : asFlatList(node, 
ProcessorDefinition.class)) {
             block.addOutput(definition);
diff --git 
a/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/generated/java/org/apache/camel/dsl/yaml/deserializers/EndpointConsumerDeserializersResolver.java
 
b/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/generated/java/org/apache/camel/dsl/yaml/deserializers/EndpointConsumerDeserializersResolver.java
index 7582d00..80f246a 100644
--- 
a/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/generated/java/org/apache/camel/dsl/yaml/deserializers/EndpointConsumerDeserializersResolver.java
+++ 
b/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/generated/java/org/apache/camel/dsl/yaml/deserializers/EndpointConsumerDeserializersResolver.java
@@ -31,6 +31,7 @@ public final class EndpointConsumerDeserializersResolver 
implements YamlDeserial
             case "aws2-sqs":
             case "azure-cosmosdb":
             case "azure-eventhubs":
+            case "azure-key-vault":
             case "azure-servicebus":
             case "azure-storage-blob":
             case "azure-storage-datalake":
diff --git 
a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/main/java/org/apache/camel/dsl/yaml/YamlRoutesBuilderLoader.java
 
b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/main/java/org/apache/camel/dsl/yaml/YamlRoutesBuilderLoader.java
index ef482bf..e688c43 100644
--- 
a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/main/java/org/apache/camel/dsl/yaml/YamlRoutesBuilderLoader.java
+++ 
b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/main/java/org/apache/camel/dsl/yaml/YamlRoutesBuilderLoader.java
@@ -18,6 +18,7 @@ package org.apache.camel.dsl.yaml;
 
 import java.io.FileNotFoundException;
 import java.io.InputStream;
+import java.net.URISyntaxException;
 import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.Iterator;
@@ -40,6 +41,7 @@ import org.apache.camel.builder.RouteConfigurationBuilder;
 import org.apache.camel.component.properties.PropertiesLocation;
 import org.apache.camel.dsl.yaml.common.YamlDeserializationContext;
 import org.apache.camel.dsl.yaml.common.YamlDeserializerSupport;
+import org.apache.camel.dsl.yaml.common.exception.InvalidEndpointException;
 import org.apache.camel.dsl.yaml.deserializers.OutputAwareFromDefinition;
 import org.apache.camel.model.KameletDefinition;
 import org.apache.camel.model.OnExceptionDefinition;
@@ -245,7 +247,7 @@ public class YamlRoutesBuilderLoader extends 
YamlRoutesBuilderLoaderSupport {
         };
     }
 
-    private Object preConfigureNode(Node root, YamlDeserializationContext ctx, 
boolean preParse) throws Exception {
+    private Object preConfigureNode(Node root, YamlDeserializationContext ctx, 
boolean preParse) {
         Object target = root;
 
         // check if the yaml is a camel-k yaml with embedded binding/routes 
(called flow(s))
@@ -478,7 +480,7 @@ public class YamlRoutesBuilderLoader extends 
YamlRoutesBuilderLoaderSupport {
     /**
      * Camel K Kamelet Binding file
      */
-    private Object preConfigureKameletBinding(Node root, 
YamlDeserializationContext ctx, Object target) throws Exception {
+    private Object preConfigureKameletBinding(Node root, 
YamlDeserializationContext ctx, Object target) {
         // start with a route
         final RouteDefinition route = new RouteDefinition();
         String routeId = asText(nodeAt(root, "/metadata/name"));
@@ -606,7 +608,7 @@ public class YamlRoutesBuilderLoader extends 
YamlRoutesBuilderLoaderSupport {
         return target;
     }
 
-    private String extractCamelEndpointUri(MappingNode node) throws Exception {
+    private String extractCamelEndpointUri(MappingNode node) {
         MappingNode mn = null;
         Node ref = nodeAt(node, "/ref");
         if (ref != null) {
@@ -632,8 +634,12 @@ public class YamlRoutesBuilderLoader extends 
YamlRoutesBuilderLoaderSupport {
         MappingNode prop = asMappingNode(nodeAt(node, "/properties"));
         Map<String, Object> params = asMap(prop);
         if (params != null && !params.isEmpty()) {
-            String query = URISupport.createQueryString(params);
-            uri = uri + "?" + query;
+            try {
+                String query = URISupport.createQueryString(params);
+                uri = uri + "?" + query;
+            } catch (URISyntaxException e) {
+                throw new InvalidEndpointException(node, "Error creating URI 
query parameters", e);
+            }
         }
 
         if (kamelet) {
@@ -662,8 +668,12 @@ public class YamlRoutesBuilderLoader extends 
YamlRoutesBuilderLoaderSupport {
             final Parser parser = new ParserImpl(local, reader);
             final Composer composer = new Composer(local, parser);
 
-            composer.getSingleNode()
-                    .map(node -> preParseNode(ctx, node));
+            try {
+                composer.getSingleNode()
+                        .map(node -> preParseNode(ctx, node));
+            } catch (Exception e) {
+                throw new RuntimeCamelException("Error pre-parsing resource: " 
+ ctx.getResource().getLocation(), e);
+            }
         }
     }
 
@@ -672,18 +682,14 @@ public class YamlRoutesBuilderLoader extends 
YamlRoutesBuilderLoaderSupport {
 
         setDeserializationContext(root, ctx);
 
-        try {
-            Object target = preConfigureNode(root, ctx, true);
-            Iterator<?> it = ObjectHelper.createIterator(target);
-            while (it.hasNext()) {
-                target = it.next();
-                if (target instanceof CamelContextCustomizer) {
-                    CamelContextCustomizer customizer = 
(CamelContextCustomizer) target;
-                    customizer.configure(getCamelContext());
-                }
+        Object target = preConfigureNode(root, ctx, true);
+        Iterator<?> it = ObjectHelper.createIterator(target);
+        while (it.hasNext()) {
+            target = it.next();
+            if (target instanceof CamelContextCustomizer) {
+                CamelContextCustomizer customizer = (CamelContextCustomizer) 
target;
+                customizer.configure(getCamelContext());
             }
-        } catch (Exception e) {
-            throw new RuntimeCamelException("Error pre-parsing resource: " + 
ctx.getResource().getLocation(), e);
         }
 
         return null;

Reply via email to