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;