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)