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 <[email protected]> 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)
