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 5144bfc yaml-dsl - Include source location when parsing
5144bfc is described below
commit 5144bfc05ffd6c9fb2ade2156df8448d22ba8837
Author: Claus Ibsen <[email protected]>
AuthorDate: Sun Jan 2 10:54:25 2022 +0100
yaml-dsl - Include source location when parsing
---
.../camel/dsl/yaml/common/YamlDeserializationContext.java | 10 ++++++++++
.../org/apache/camel/dsl/yaml/common/YamlDeserializerBase.java | 7 ++++++-
.../dsl/yaml/deserializers/FromDefinitionDeserializer.java | 7 +++++++
.../deserializers/OutputAwareFromDefinitionDeserializer.java | 2 ++
.../org/apache/camel/dsl/yaml/KameletRoutesBuilderLoader.java | 3 ++-
.../org/apache/camel/dsl/yaml/YamlRoutesBuilderLoader.java | 3 ++-
.../apache/camel/dsl/yaml/YamlRoutesBuilderLoaderSupport.java | 6 ++++--
7 files changed, 33 insertions(+), 5 deletions(-)
diff --git
a/dsl/camel-yaml-dsl/camel-yaml-dsl-common/src/main/java/org/apache/camel/dsl/yaml/common/YamlDeserializationContext.java
b/dsl/camel-yaml-dsl/camel-yaml-dsl-common/src/main/java/org/apache/camel/dsl/yaml/common/YamlDeserializationContext.java
index f0a42dc..7e6537a 100644
---
a/dsl/camel-yaml-dsl/camel-yaml-dsl-common/src/main/java/org/apache/camel/dsl/yaml/common/YamlDeserializationContext.java
+++
b/dsl/camel-yaml-dsl/camel-yaml-dsl-common/src/main/java/org/apache/camel/dsl/yaml/common/YamlDeserializationContext.java
@@ -33,6 +33,7 @@ import org.apache.camel.Ordered;
import org.apache.camel.Service;
import org.apache.camel.dsl.yaml.common.exception.UnknownNodeTypeException;
import org.apache.camel.dsl.yaml.common.exception.YamlDeserializationException;
+import org.apache.camel.spi.Resource;
import org.apache.camel.util.ObjectHelper;
import org.snakeyaml.engine.v2.api.ConstructNode;
import org.snakeyaml.engine.v2.api.LoadSettings;
@@ -48,6 +49,7 @@ public class YamlDeserializationContext extends
StandardConstructor implements C
private YamlDeserializationMode deserializationMode;
private ExtendedCamelContext camelContext;
+ private Resource resource;
public YamlDeserializationContext(LoadSettings settings) {
super(settings);
@@ -77,6 +79,14 @@ public class YamlDeserializationContext extends
StandardConstructor implements C
return deserializationMode;
}
+ public Resource getResource() {
+ return resource;
+ }
+
+ public void setResource(Resource resource) {
+ this.resource = resource;
+ }
+
@Override
public CamelContext getCamelContext() {
return camelContext;
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 7e6ccdd..92149c4 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
@@ -53,11 +53,16 @@ public abstract class YamlDeserializerBase<T> extends
YamlDeserializerSupport im
throw new IllegalArgumentException("Unsupported node type: " +
node);
}
- // enrich model with line number
+ // enrich model with source location:line number
if (target instanceof LineNumberAware &&
node.getStartMark().isPresent()) {
int line = node.getStartMark().get().getLine();
LineNumberAware lna = (LineNumberAware) target;
lna.setLineNumber(line);
+
+ YamlDeserializationContext ctx = getDeserializationContext(node);
+ if (ctx != null) {
+ lna.setLocation(ctx.getResource().getLocation());
+ }
}
return target;
diff --git
a/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/FromDefinitionDeserializer.java
b/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/FromDefinitionDeserializer.java
index 1988a71..0ab4114 100644
---
a/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/FromDefinitionDeserializer.java
+++
b/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/FromDefinitionDeserializer.java
@@ -16,6 +16,7 @@
*/
package org.apache.camel.dsl.yaml.deserializers;
+import org.apache.camel.dsl.yaml.common.YamlDeserializationContext;
import org.apache.camel.dsl.yaml.common.YamlDeserializerResolver;
import org.apache.camel.dsl.yaml.common.YamlSupport;
import org.apache.camel.model.FromDefinition;
@@ -25,6 +26,8 @@ import org.apache.camel.spi.annotations.YamlType;
import org.snakeyaml.engine.v2.api.ConstructNode;
import org.snakeyaml.engine.v2.nodes.Node;
+import static
org.apache.camel.dsl.yaml.common.YamlDeserializerSupport.getDeserializationContext;
+
@YamlType(
inline = false,
types = FromDefinition.class,
@@ -57,6 +60,10 @@ public class FromDefinitionDeserializer implements
ConstructNode {
if (node.getStartMark().isPresent()) {
int line = node.getStartMark().get().getLine();
target.setLineNumber(line);
+ YamlDeserializationContext ctx = getDeserializationContext(node);
+ if (ctx != null) {
+ target.setLocation(ctx.getResource().getLocation());
+ }
}
return target;
}
diff --git
a/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/OutputAwareFromDefinitionDeserializer.java
b/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/OutputAwareFromDefinitionDeserializer.java
index 55ab042..a71c290 100644
---
a/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/OutputAwareFromDefinitionDeserializer.java
+++
b/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/OutputAwareFromDefinitionDeserializer.java
@@ -87,6 +87,7 @@ public class OutputAwareFromDefinitionDeserializer extends
YamlDeserializerBase<
if (node.getStartMark().isPresent()) {
int line = node.getStartMark().get().getLine();
from.setLineNumber(line);
+ from.setLocation(dc.getResource().getLocation());
}
target.setDelegate(from);
} else {
@@ -102,6 +103,7 @@ public class OutputAwareFromDefinitionDeserializer extends
YamlDeserializerBase<
if (node.getStartMark().isPresent()) {
int line = node.getStartMark().get().getLine();
from.setLineNumber(line);
+ from.setLocation(dc.getResource().getLocation());
}
target.setDelegate(from);
}
diff --git
a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/main/java/org/apache/camel/dsl/yaml/KameletRoutesBuilderLoader.java
b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/main/java/org/apache/camel/dsl/yaml/KameletRoutesBuilderLoader.java
index 1f770ca..fe7b9e5 100644
---
a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/main/java/org/apache/camel/dsl/yaml/KameletRoutesBuilderLoader.java
+++
b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/main/java/org/apache/camel/dsl/yaml/KameletRoutesBuilderLoader.java
@@ -25,6 +25,7 @@ import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.dsl.yaml.common.YamlDeserializationContext;
import org.apache.camel.model.RouteTemplateDefinition;
import org.apache.camel.model.RouteTemplateParameterDefinition;
+import org.apache.camel.spi.Resource;
import org.apache.camel.spi.annotations.RoutesLoader;
import org.snakeyaml.engine.v2.nodes.Node;
import org.snakeyaml.engine.v2.nodes.NodeTuple;
@@ -44,7 +45,7 @@ public class KameletRoutesBuilderLoader extends
YamlRoutesBuilderLoaderSupport {
}
@Override
- protected RouteBuilder builder(Node node) {
+ protected RouteBuilder builder(Node node, Resource resource) {
Node template = nodeAt(node, "/spec/template");
if (template == null) {
// fallback till flows get removed
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 8952b53..bdacad0 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
@@ -38,6 +38,7 @@ import
org.apache.camel.model.rest.RestConfigurationDefinition;
import org.apache.camel.model.rest.RestDefinition;
import org.apache.camel.model.rest.VerbDefinition;
import org.apache.camel.spi.CamelContextCustomizer;
+import org.apache.camel.spi.Resource;
import org.apache.camel.spi.annotations.RoutesLoader;
import org.apache.camel.support.PropertyBindingSupport;
import org.apache.camel.util.URISupport;
@@ -69,7 +70,7 @@ public class YamlRoutesBuilderLoader extends
YamlRoutesBuilderLoaderSupport {
super(EXTENSION);
}
- protected RouteBuilder builder(Node root) {
+ protected RouteBuilder builder(Node root, Resource resource) {
return new RouteConfigurationBuilder() {
@Override
public void configure() throws Exception {
diff --git
a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/main/java/org/apache/camel/dsl/yaml/YamlRoutesBuilderLoaderSupport.java
b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/main/java/org/apache/camel/dsl/yaml/YamlRoutesBuilderLoaderSupport.java
index e6821e0..c0ba6e3 100644
---
a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/main/java/org/apache/camel/dsl/yaml/YamlRoutesBuilderLoaderSupport.java
+++
b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/main/java/org/apache/camel/dsl/yaml/YamlRoutesBuilderLoaderSupport.java
@@ -117,13 +117,15 @@ public abstract class YamlRoutesBuilderLoaderSupport
extends RouteBuilderLoaderS
throw new FileNotFoundException("Resource not found: " +
resource.getLocation());
}
+ deserializationContext.setResource(resource);
+
try (InputStream is = resource.getInputStream()) {
final StreamReader reader = new StreamReader(settings, new
YamlUnicodeReader(is));
final Parser parser = new ParserImpl(settings, reader);
final Composer composer = new Composer(settings, parser);
return composer.getSingleNode()
- .map(this::builder)
+ .map(node -> builder(node, resource))
.orElseThrow(() -> new
YamlDeserializationException("Unable to deserialize resource"));
}
}
@@ -136,7 +138,7 @@ public abstract class YamlRoutesBuilderLoaderSupport
extends RouteBuilderLoaderS
return this.deserializationContext;
}
- protected abstract RouteBuilder builder(Node node);
+ protected abstract RouteBuilder builder(Node node, Resource resource);
protected boolean anyTupleMatches(List<NodeTuple> list, String aKey,
String aValue) {
return anyTupleMatches(list, aKey, Predicate.isEqual(aValue));