You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by lb...@apache.org on 2020/12/18 09:14:28 UTC

[camel-k-runtime] 07/10: loader(yaml): improve yaml loader

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

lburgazzoli pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel-k-runtime.git

commit cd82f8dbb898b1c97df9b9743ba885d59f3ef45f
Author: Luca Burgazzoli <lb...@gmail.com>
AuthorDate: Mon Dec 14 16:04:30 2020 +0100

    loader(yaml): improve yaml loader
---
 .../camel/k/loader/yaml/YamlSourceLoader.java      | 23 +++++++++++++++-------
 .../camel/k/loader/yaml/parser/PipelineTest.groovy |  4 ++--
 .../camel/k/loader/yaml/parser/StepTest.groovy     |  3 ++-
 .../camel/k/loader/yaml/support/TestSupport.groovy | 12 ++++-------
 4 files changed, 24 insertions(+), 18 deletions(-)

diff --git a/camel-k-loader-yaml/impl/src/main/java/org/apache/camel/k/loader/yaml/YamlSourceLoader.java b/camel-k-loader-yaml/impl/src/main/java/org/apache/camel/k/loader/yaml/YamlSourceLoader.java
index eae3568..32f2392 100644
--- a/camel-k-loader-yaml/impl/src/main/java/org/apache/camel/k/loader/yaml/YamlSourceLoader.java
+++ b/camel-k-loader-yaml/impl/src/main/java/org/apache/camel/k/loader/yaml/YamlSourceLoader.java
@@ -16,6 +16,7 @@
  */
 package org.apache.camel.k.loader.yaml;
 
+import java.io.Reader;
 import java.util.Collection;
 import java.util.Collections;
 
@@ -29,6 +30,7 @@ import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
 import com.fasterxml.jackson.dataformat.yaml.YAMLGenerator;
 import org.apache.camel.CamelContext;
 import org.apache.camel.RoutesBuilder;
+import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.k.Source;
 import org.apache.camel.k.SourceLoader;
 import org.apache.camel.k.annotation.Loader;
@@ -36,15 +38,21 @@ import org.apache.camel.k.loader.yaml.model.Step;
 import org.apache.camel.k.loader.yaml.spi.StartStepParser;
 import org.apache.camel.k.loader.yaml.spi.StepParser;
 import org.apache.camel.k.support.RouteBuilders;
+import org.apache.camel.util.function.ThrowingBiConsumer;
 
 @Loader("yaml")
 public class YamlSourceLoader implements SourceLoader {
+    public static final StepParser.Resolver RESOLVER;
     public static final ObjectMapper MAPPER;
 
     static {
         // register custom reifiers auto-generated from the step parser definitions
         YamlReifiers.registerReifiers();
 
+        // Use a global caching resolver
+        RESOLVER = StepParser.Resolver.caching(new YamlStepResolver());
+
+        // Create the object mapper
         MAPPER = new ObjectMapper(
             new YAMLFactory()
                 .configure(YAMLGenerator.Feature.MINIMIZE_QUOTES, true)
@@ -65,13 +73,14 @@ public class YamlSourceLoader implements SourceLoader {
 
     @Override
     public RoutesBuilder load(CamelContext camelContext, Source source) {
-        return RouteBuilders.route(source, (reader, builder) -> {
-            final StepParser.Resolver resolver = StepParser.Resolver.caching(new YamlStepResolver());
-
-            for (Step step : MAPPER.readValue(reader, Step[].class)) {
-                StartStepParser.invoke(
-                    new StepParser.Context(builder, null, MAPPER, step.node, resolver),
-                    step.id);
+        return RouteBuilders.route(source, new ThrowingBiConsumer<Reader, RouteBuilder, Exception>() {
+            @Override
+            public void accept(Reader reader, RouteBuilder builder) throws Exception {
+                for (Step step : MAPPER.readValue(reader, Step[].class)) {
+                    StartStepParser.invoke(
+                        new StepParser.Context(builder, null, MAPPER, step.node, RESOLVER),
+                        step.id);
+                }
             }
         });
     }
diff --git a/camel-k-loader-yaml/impl/src/test/groovy/org/apache/camel/k/loader/yaml/parser/PipelineTest.groovy b/camel-k-loader-yaml/impl/src/test/groovy/org/apache/camel/k/loader/yaml/parser/PipelineTest.groovy
index fecfa32..76a2c1d 100644
--- a/camel-k-loader-yaml/impl/src/test/groovy/org/apache/camel/k/loader/yaml/parser/PipelineTest.groovy
+++ b/camel-k-loader-yaml/impl/src/test/groovy/org/apache/camel/k/loader/yaml/parser/PipelineTest.groovy
@@ -16,7 +16,7 @@
  */
 package org.apache.camel.k.loader.yaml.parser
 
-
+import org.apache.camel.k.loader.yaml.YamlSourceLoader
 import org.apache.camel.k.loader.yaml.support.TestSupport
 import org.apache.camel.k.loader.yaml.spi.StepParserException
 import org.apache.camel.model.PipelineDefinition
@@ -40,7 +40,7 @@ class PipelineTest extends TestSupport {
 
     def "should fail without steps"() {
         given:
-            def stepContext = stepContext(TestSupport.MAPPER.createObjectNode());
+            def stepContext = stepContext(YamlSourceLoader.MAPPER.createObjectNode());
         when:
             new PipelineStepParser().toProcessor(stepContext)
         then:
diff --git a/camel-k-loader-yaml/impl/src/test/groovy/org/apache/camel/k/loader/yaml/parser/StepTest.groovy b/camel-k-loader-yaml/impl/src/test/groovy/org/apache/camel/k/loader/yaml/parser/StepTest.groovy
index 42f2259..40d91c4 100644
--- a/camel-k-loader-yaml/impl/src/test/groovy/org/apache/camel/k/loader/yaml/parser/StepTest.groovy
+++ b/camel-k-loader-yaml/impl/src/test/groovy/org/apache/camel/k/loader/yaml/parser/StepTest.groovy
@@ -16,6 +16,7 @@
  */
 package org.apache.camel.k.loader.yaml.parser
 
+import org.apache.camel.k.loader.yaml.YamlSourceLoader
 import org.apache.camel.k.loader.yaml.support.TestSupport
 import org.apache.camel.k.loader.yaml.spi.StepParserException
 import org.apache.camel.model.StepDefinition
@@ -41,7 +42,7 @@ class StepTest extends TestSupport {
 
     def "should fail without steps"() {
         given:
-            def stepContext = stepContext(MAPPER.createObjectNode());
+            def stepContext = stepContext(YamlSourceLoader.MAPPER.createObjectNode());
         when:
             new StepStepParser().toProcessor(stepContext)
         then:
diff --git a/camel-k-loader-yaml/impl/src/test/groovy/org/apache/camel/k/loader/yaml/support/TestSupport.groovy b/camel-k-loader-yaml/impl/src/test/groovy/org/apache/camel/k/loader/yaml/support/TestSupport.groovy
index 0a19076..9eed64a 100644
--- a/camel-k-loader-yaml/impl/src/test/groovy/org/apache/camel/k/loader/yaml/support/TestSupport.groovy
+++ b/camel-k-loader-yaml/impl/src/test/groovy/org/apache/camel/k/loader/yaml/support/TestSupport.groovy
@@ -25,7 +25,6 @@ import org.apache.camel.component.mock.MockEndpoint
 import org.apache.camel.impl.DefaultCamelContext
 import org.apache.camel.k.Source
 import org.apache.camel.k.loader.yaml.YamlSourceLoader
-import org.apache.camel.k.loader.yaml.YamlStepResolver
 import org.apache.camel.k.loader.yaml.spi.ProcessorStepParser
 import org.apache.camel.k.loader.yaml.spi.StartStepParser
 import org.apache.camel.k.loader.yaml.spi.StepParser
@@ -38,18 +37,15 @@ import java.nio.charset.StandardCharsets
 
 @Slf4j
 class TestSupport extends Specification {
-    static def RESOLVER =  new YamlStepResolver()
-    static def MAPPER = YamlSourceLoader.MAPPER
-
     static StepParser.Context stepContext(String content) {
-        def node = MAPPER.readTree(content.stripMargin())
+        def node = YamlSourceLoader.MAPPER.readTree(content.stripMargin())
         def builder = new RouteBuilder(new DefaultCamelContext()) {
             @Override
             void configure() throws Exception {
             }
         }
 
-        return new StepParser.Context(builder, new RouteDefinition(), MAPPER, node, RESOLVER)
+        return new StepParser.Context(builder, new RouteDefinition(), YamlSourceLoader.MAPPER, node, YamlSourceLoader.RESOLVER)
     }
 
     static StepParser.Context stepContext(JsonNode content) {
@@ -59,7 +55,7 @@ class TestSupport extends Specification {
             }
         }
 
-        return new StepParser.Context(builder, new RouteDefinition(), MAPPER, content, RESOLVER)
+        return new StepParser.Context(builder, new RouteDefinition(), YamlSourceLoader.MAPPER, content, YamlSourceLoader.RESOLVER)
     }
 
     static CamelContext startContext(
@@ -120,7 +116,7 @@ class TestSupport extends Specification {
 
     static Object toProcessor(String id, String content) {
         def ctx = stepContext(content)
-        def parser = RESOLVER.resolve(ctx.camelContext, id)
+        def parser = YamlSourceLoader.RESOLVER.resolve(ctx.camelContext, id)
 
         if (parser instanceof ProcessorStepParser) {
             return parser.toProcessor(ctx)