Repository: camel Updated Branches: refs/heads/master 3fc9de754 -> c63c25033
CAMEL-9062: Java DSL should build expressions as languages so they model can be dumped, and build similar as we do in XML DSL Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/c63c2503 Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/c63c2503 Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/c63c2503 Branch: refs/heads/master Commit: c63c250337737951041a32daaca678d69653340d Parents: c81a051 Author: Claus Ibsen <davscl...@apache.org> Authored: Fri Aug 7 13:23:46 2015 +0200 Committer: Claus Ibsen <davscl...@apache.org> Committed: Fri Aug 7 14:00:27 2015 +0200 ---------------------------------------------------------------------- .../java/org/apache/camel/builder/Builder.java | 87 +++++++++++++------- .../apache/camel/builder/BuilderSupport.java | 63 +++++++------- .../org/apache/camel/builder/ValueBuilder.java | 1 - .../language/ExchangePropertyExpression.java | 4 +- .../apache/camel/builder/NotifyBuilderTest.java | 2 +- .../FileSplitStreamingWithChoiceTest.java | 2 +- .../camel/issues/RegExPredicateIssueTest.java | 2 +- .../camel/processor/ValidateRegExpTest.java | 2 +- .../AdviceWithWeaveAfterLastSplitTest.java | 2 +- ...umpModelAsXmlTransformRouteConstantTest.java | 64 ++++++++++++++ ...umpModelAsXmlTransformRouteLanguageTest.java | 65 +++++++++++++++ 11 files changed, 228 insertions(+), 66 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/c63c2503/camel-core/src/main/java/org/apache/camel/builder/Builder.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/builder/Builder.java b/camel-core/src/main/java/org/apache/camel/builder/Builder.java index ed0d932..6633f2b 100644 --- a/camel-core/src/main/java/org/apache/camel/builder/Builder.java +++ b/camel-core/src/main/java/org/apache/camel/builder/Builder.java @@ -17,12 +17,23 @@ package org.apache.camel.builder; import org.apache.camel.Expression; +import org.apache.camel.model.language.ConstantExpression; +import org.apache.camel.model.language.ExchangePropertyExpression; +import org.apache.camel.model.language.HeaderExpression; +import org.apache.camel.model.language.LanguageExpression; +import org.apache.camel.model.language.MethodCallExpression; +import org.apache.camel.model.language.SimpleExpression; +import org.apache.camel.util.ObjectHelper; /** * A helper class for including portions of the <a * href="http://camel.apache.org/expression.html">expression</a> and * <a href="http://camel.apache.org/predicate.html">predicate</a> <a * href="http://camel.apache.org/dsl.html">Java DSL</a> + * <p/> + * Implementation of this builder should favor build expressions using the definition classes + * from the <tt>org.apache.camel.model.language</tt> package, to build the routes using the same + * types as it would happen when using XML DSL. * * @version */ @@ -58,13 +69,13 @@ public final class Builder { * @return the builder */ public static ValueBuilder bean(Object beanOrBeanRef, String method) { - Expression expression; + Expression exp; if (beanOrBeanRef instanceof String) { - expression = ExpressionBuilder.beanExpression((String) beanOrBeanRef, method); + exp = new MethodCallExpression((String) beanOrBeanRef, method); } else { - expression = ExpressionBuilder.beanExpression(beanOrBeanRef, method); + exp = new MethodCallExpression(beanOrBeanRef, method); } - return new ValueBuilder(expression); + return new ValueBuilder(exp); } /** @@ -76,23 +87,28 @@ public final class Builder { * @return the builder */ public static ValueBuilder bean(Class<?> beanType, String method) { - Expression expression = ExpressionBuilder.beanExpression(beanType, method); - return new ValueBuilder(expression); + Expression exp = new MethodCallExpression(beanType, method); + return new ValueBuilder(exp); } /** * Returns a constant expression */ public static ValueBuilder constant(Object value) { - Expression expression = ExpressionBuilder.constantExpression(value); - return new ValueBuilder(expression); + Expression exp; + if (value instanceof String) { + exp = new ConstantExpression((String) value); + } else { + exp = ExpressionBuilder.constantExpression(value); + } + return new ValueBuilder(exp); } /** * Returns a constant expression */ public static ValueBuilder language(String language, String expression) { - Expression exp = ExpressionBuilder.languageExpression(language, expression); + Expression exp = new LanguageExpression(language, expression); return new ValueBuilder(exp); } @@ -100,25 +116,25 @@ public final class Builder { * Returns a simple expression */ public static ValueBuilder simple(String value) { - Expression expression = ExpressionBuilder.simpleExpression(value); - return new ValueBuilder(expression); + Expression exp = new SimpleExpression(value); + return new ValueBuilder(exp); } /** * Returns a simple expression */ public static ValueBuilder simple(String value, Class<?> resultType) { - Expression expression = ExpressionBuilder.simpleExpression(value); - expression = ExpressionBuilder.convertToExpression(expression, resultType); - return new ValueBuilder(expression); + SimpleExpression exp = new SimpleExpression(value); + exp.setResultType(resultType); + return new ValueBuilder(exp); } /** * Returns a predicate and value builder for headers on an exchange */ public static ValueBuilder header(String name) { - Expression expression = ExpressionBuilder.headerExpression(name); - return new ValueBuilder(expression); + Expression exp = new HeaderExpression(name); + return new ValueBuilder(exp); } /** @@ -135,16 +151,16 @@ public final class Builder { * Returns a predicate and value builder for properties on an exchange */ public static ValueBuilder exchangeProperty(String name) { - Expression expression = ExpressionBuilder.exchangePropertyExpression(name); - return new ValueBuilder(expression); + Expression exp = new ExchangePropertyExpression(name); + return new ValueBuilder(exp); } /** * Returns a predicate and value builder for the inbound body on an exchange */ public static ValueBuilder body() { - Expression expression = ExpressionBuilder.bodyExpression(); - return new ValueBuilder(expression); + Expression exp = new SimpleExpression("${body}"); + return new ValueBuilder(exp); } /** @@ -152,23 +168,30 @@ public final class Builder { * specific type */ public static <T> ValueBuilder bodyAs(Class<T> type) { - Expression expression = ExpressionBuilder.bodyExpression(type); - return new ValueBuilder(expression); + ObjectHelper.notNull(type, "type"); + Expression exp = new SimpleExpression(String.format("${bodyAs(%s)}", type.getCanonicalName())); + return new ValueBuilder(exp); } /** * Returns a predicate and value builder for the outbound body on an * exchange + * + * @deprecated use {@link #body()} */ + @Deprecated public static ValueBuilder outBody() { - Expression expression = ExpressionBuilder.outBodyExpression(); - return new ValueBuilder(expression); + Expression exp = new SimpleExpression("${out.body}"); + return new ValueBuilder(exp); } /** * Returns a predicate and value builder for the outbound message body as a * specific type + * + * @deprecated use {@link #bodyAs(Class)} */ + @Deprecated public static <T> ValueBuilder outBodyAs(Class<T> type) { Expression expression = ExpressionBuilder.outBodyExpression(type); return new ValueBuilder(expression); @@ -186,7 +209,10 @@ public final class Builder { /** * Returns a predicate and value builder for the fault message body as a * specific type + * + * @deprecated use {@link #bodyAs(Class)} */ + @Deprecated public static <T> ValueBuilder faultBodyAs(Class<T> type) { Expression expression = ExpressionBuilder.faultBodyExpression(type); return new ValueBuilder(expression); @@ -196,7 +222,8 @@ public final class Builder { * Returns an expression for the given system property */ public static ValueBuilder systemProperty(final String name) { - return systemProperty(name, null); + Expression exp = new SimpleExpression(String.format("${sys.%s}", name)); + return new ValueBuilder(exp); } /** @@ -210,16 +237,16 @@ public final class Builder { * Returns a predicate and value builder for the exception message on an exchange */ public static ValueBuilder exceptionMessage() { - Expression expression = ExpressionBuilder.exchangeExceptionMessageExpression(); - return new ValueBuilder(expression); + Expression exp = new SimpleExpression("${exception.message}"); + return new ValueBuilder(exp); } /** * Returns a predicate and value builder for the exception stacktrace on an exchange */ public static ValueBuilder exceptionStackTrace() { - Expression expression = ExpressionBuilder.exchangeExceptionStackTraceExpression(); - return new ValueBuilder(expression); + Expression exp = new SimpleExpression("${exception.stacktrace}"); + return new ValueBuilder(exp); } /** @@ -245,7 +272,9 @@ public final class Builder { * * @param uri endpoint uri * @return the builder + * @deprecated not in use, and not available in XML DSL */ + @Deprecated public static ValueBuilder sendTo(String uri) { Expression expression = ExpressionBuilder.toExpression(uri); return new ValueBuilder(expression); http://git-wip-us.apache.org/repos/asf/camel/blob/c63c2503/camel-core/src/main/java/org/apache/camel/builder/BuilderSupport.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/builder/BuilderSupport.java b/camel-core/src/main/java/org/apache/camel/builder/BuilderSupport.java index 85d51eb..cdaf71f 100644 --- a/camel-core/src/main/java/org/apache/camel/builder/BuilderSupport.java +++ b/camel-core/src/main/java/org/apache/camel/builder/BuilderSupport.java @@ -29,7 +29,6 @@ import org.apache.camel.builder.xml.XPathBuilder; import org.apache.camel.model.ModelCamelContext; import org.apache.camel.model.language.ExchangePropertyExpression; import org.apache.camel.model.language.HeaderExpression; -import org.apache.camel.model.language.MethodCallExpression; import org.apache.camel.util.ObjectHelper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -58,8 +57,8 @@ public abstract class BuilderSupport { * Returns a value builder for the given header */ public ValueBuilder header(String name) { - HeaderExpression expression = new HeaderExpression(name); - return new ValueBuilder(expression); + Expression exp = new HeaderExpression(name); + return new ValueBuilder(exp); } /** @@ -69,16 +68,16 @@ public abstract class BuilderSupport { */ @Deprecated public ValueBuilder property(String name) { - ExchangePropertyExpression expression = new ExchangePropertyExpression(name); - return new ValueBuilder(expression); + Expression exp = new ExchangePropertyExpression(name); + return new ValueBuilder(exp); } /** * Returns a value builder for the given exchange property */ public ValueBuilder exchangeProperty(String name) { - ExchangePropertyExpression expression = new ExchangePropertyExpression(name); - return new ValueBuilder(expression); + Expression exp = new ExchangePropertyExpression(name); + return new ValueBuilder(exp); } /** @@ -91,15 +90,29 @@ public abstract class BuilderSupport { /** * Returns a predicate and value builder for the inbound message body as a * specific type + * + * @deprecated use {@link #bodyAs(Class)} */ + @Deprecated public <T> ValueBuilder body(Class<T> type) { + return bodyAs(type); + } + + /** + * Returns a predicate and value builder for the inbound message body as a + * specific type + */ + public <T> ValueBuilder bodyAs(Class<T> type) { return Builder.bodyAs(type); } /** * Returns a predicate and value builder for the outbound body on an * exchange + * + * @deprecated use {@link #body()} */ + @Deprecated public ValueBuilder outBody() { return Builder.outBody(); } @@ -107,7 +120,10 @@ public abstract class BuilderSupport { /** * Returns a predicate and value builder for the outbound message body as a * specific type + * + * @deprecated use {@link #bodyAs(Class)} */ + @Deprecated public <T> ValueBuilder outBody(Class<T> type) { return Builder.outBodyAs(type); } @@ -123,7 +139,10 @@ public abstract class BuilderSupport { /** * Returns a predicate and value builder for the fault message body as a * specific type + * + * @deprecated use {@link #bodyAs(Class)} */ + @Deprecated public <T> ValueBuilder faultBodyAs(Class<T> type) { return Builder.faultBodyAs(type); } @@ -217,13 +236,7 @@ public abstract class BuilderSupport { */ @Deprecated public ValueBuilder bean(Object beanOrBeanRef, String method) { - MethodCallExpression expression; - if (beanOrBeanRef instanceof String) { - expression = new MethodCallExpression((String) beanOrBeanRef, method); - } else { - expression = new MethodCallExpression(beanOrBeanRef, method); - } - return new ValueBuilder(expression); + return Builder.bean(beanOrBeanRef, method); } /** @@ -236,8 +249,7 @@ public abstract class BuilderSupport { */ @Deprecated public ValueBuilder bean(Class<?> beanType) { - MethodCallExpression expression = new MethodCallExpression(beanType); - return new ValueBuilder(expression); + return Builder.bean(beanType); } /** @@ -251,8 +263,7 @@ public abstract class BuilderSupport { */ @Deprecated public ValueBuilder bean(Class<?> beanType, String method) { - MethodCallExpression expression = new MethodCallExpression(beanType, method); - return new ValueBuilder(expression); + return Builder.bean(beanType, method); } /** @@ -279,13 +290,7 @@ public abstract class BuilderSupport { * @return the builder */ public ValueBuilder method(Object beanOrBeanRef, String method) { - MethodCallExpression expression; - if (beanOrBeanRef instanceof String) { - expression = new MethodCallExpression((String) beanOrBeanRef, method); - } else { - expression = new MethodCallExpression(beanOrBeanRef, method); - } - return new ValueBuilder(expression); + return Builder.bean(beanOrBeanRef, method); } /** @@ -296,8 +301,7 @@ public abstract class BuilderSupport { * @return the builder */ public ValueBuilder method(Class<?> beanType) { - MethodCallExpression expression = new MethodCallExpression(beanType); - return new ValueBuilder(expression); + return Builder.bean(beanType); } /** @@ -309,8 +313,7 @@ public abstract class BuilderSupport { * @return the builder */ public ValueBuilder method(Class<?> beanType, String method) { - MethodCallExpression expression = new MethodCallExpression(beanType, method); - return new ValueBuilder(expression); + return Builder.bean(beanType, method); } /** @@ -318,7 +321,9 @@ public abstract class BuilderSupport { * * @param uri endpoint uri to send the exchange to * @return the builder + * @deprecated not in use, and not available in XML DSL */ + @Deprecated public ValueBuilder sendTo(String uri) { return Builder.sendTo(uri); } http://git-wip-us.apache.org/repos/asf/camel/blob/c63c2503/camel-core/src/main/java/org/apache/camel/builder/ValueBuilder.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/builder/ValueBuilder.java b/camel-core/src/main/java/org/apache/camel/builder/ValueBuilder.java index e9fca82..a8faf61 100644 --- a/camel-core/src/main/java/org/apache/camel/builder/ValueBuilder.java +++ b/camel-core/src/main/java/org/apache/camel/builder/ValueBuilder.java @@ -24,7 +24,6 @@ import org.apache.camel.Exchange; import org.apache.camel.Expression; import org.apache.camel.Predicate; import org.apache.camel.builder.xml.Namespaces; -import org.apache.camel.model.language.ExpressionDefinition; import org.apache.camel.spi.NamespaceAware; import org.apache.camel.util.ExpressionToPredicateAdapter; http://git-wip-us.apache.org/repos/asf/camel/blob/c63c2503/camel-core/src/main/java/org/apache/camel/model/language/ExchangePropertyExpression.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/model/language/ExchangePropertyExpression.java b/camel-core/src/main/java/org/apache/camel/model/language/ExchangePropertyExpression.java index bfd5491..77ee04d 100644 --- a/camel-core/src/main/java/org/apache/camel/model/language/ExchangePropertyExpression.java +++ b/camel-core/src/main/java/org/apache/camel/model/language/ExchangePropertyExpression.java @@ -35,8 +35,8 @@ public class ExchangePropertyExpression extends ExpressionDefinition { public ExchangePropertyExpression() { } - public ExchangePropertyExpression(String expression) { - super(expression); + public ExchangePropertyExpression(String name) { + super(name); } public String getLanguage() { http://git-wip-us.apache.org/repos/asf/camel/blob/c63c2503/camel-core/src/test/java/org/apache/camel/builder/NotifyBuilderTest.java ---------------------------------------------------------------------- diff --git a/camel-core/src/test/java/org/apache/camel/builder/NotifyBuilderTest.java b/camel-core/src/test/java/org/apache/camel/builder/NotifyBuilderTest.java index e1d0124..8c56713 100644 --- a/camel-core/src/test/java/org/apache/camel/builder/NotifyBuilderTest.java +++ b/camel-core/src/test/java/org/apache/camel/builder/NotifyBuilderTest.java @@ -335,7 +335,7 @@ public class NotifyBuilderTest extends ContextTestSupport { .filter(body().contains("World")).whenDone(3) .create(); - assertEquals("filter(body contains World).whenDone(3)", notify.toString()); + assertEquals("filter(simple{${body}} contains World).whenDone(3)", notify.toString()); assertEquals(false, notify.matches()); http://git-wip-us.apache.org/repos/asf/camel/blob/c63c2503/camel-core/src/test/java/org/apache/camel/issues/FileSplitStreamingWithChoiceTest.java ---------------------------------------------------------------------- diff --git a/camel-core/src/test/java/org/apache/camel/issues/FileSplitStreamingWithChoiceTest.java b/camel-core/src/test/java/org/apache/camel/issues/FileSplitStreamingWithChoiceTest.java index 73fcebd..bde7b6b 100644 --- a/camel-core/src/test/java/org/apache/camel/issues/FileSplitStreamingWithChoiceTest.java +++ b/camel-core/src/test/java/org/apache/camel/issues/FileSplitStreamingWithChoiceTest.java @@ -56,7 +56,7 @@ public class FileSplitStreamingWithChoiceTest extends ContextTestSupport { .split(body().tokenize(LS)).streaming() .to("mock:split") .choice() - .when(body(String.class).isNotNull()).to("mock:body") + .when(bodyAs(String.class).isNotNull()).to("mock:body") .otherwise().to("mock:other") .end(); } http://git-wip-us.apache.org/repos/asf/camel/blob/c63c2503/camel-core/src/test/java/org/apache/camel/issues/RegExPredicateIssueTest.java ---------------------------------------------------------------------- diff --git a/camel-core/src/test/java/org/apache/camel/issues/RegExPredicateIssueTest.java b/camel-core/src/test/java/org/apache/camel/issues/RegExPredicateIssueTest.java index 27e005c..1fe09ef 100644 --- a/camel-core/src/test/java/org/apache/camel/issues/RegExPredicateIssueTest.java +++ b/camel-core/src/test/java/org/apache/camel/issues/RegExPredicateIssueTest.java @@ -31,7 +31,7 @@ public class RegExPredicateIssueTest extends ContextTestSupport { public void configure() throws Exception { from("direct:a") .choice() - .when(body(String.class).regex("^0.*$")).to("mock:result") + .when(bodyAs(String.class).regex("^0.*$")).to("mock:result") .otherwise().to("mock:other") .end(); } http://git-wip-us.apache.org/repos/asf/camel/blob/c63c2503/camel-core/src/test/java/org/apache/camel/processor/ValidateRegExpTest.java ---------------------------------------------------------------------- diff --git a/camel-core/src/test/java/org/apache/camel/processor/ValidateRegExpTest.java b/camel-core/src/test/java/org/apache/camel/processor/ValidateRegExpTest.java index ee3f345..0e0211f 100644 --- a/camel-core/src/test/java/org/apache/camel/processor/ValidateRegExpTest.java +++ b/camel-core/src/test/java/org/apache/camel/processor/ValidateRegExpTest.java @@ -70,7 +70,7 @@ public class ValidateRegExpTest extends ContextTestSupport { return new RouteBuilder() { public void configure() { from("direct:start") - .validate(body(String.class).regex("^\\d{2}\\.\\d{2}\\.\\d{4}$")) + .validate(bodyAs(String.class).regex("^\\d{2}\\.\\d{2}\\.\\d{4}$")) .to("mock:result"); } }; http://git-wip-us.apache.org/repos/asf/camel/blob/c63c2503/camel-core/src/test/java/org/apache/camel/processor/interceptor/AdviceWithWeaveAfterLastSplitTest.java ---------------------------------------------------------------------- diff --git a/camel-core/src/test/java/org/apache/camel/processor/interceptor/AdviceWithWeaveAfterLastSplitTest.java b/camel-core/src/test/java/org/apache/camel/processor/interceptor/AdviceWithWeaveAfterLastSplitTest.java index f94b13d..f50b728 100644 --- a/camel-core/src/test/java/org/apache/camel/processor/interceptor/AdviceWithWeaveAfterLastSplitTest.java +++ b/camel-core/src/test/java/org/apache/camel/processor/interceptor/AdviceWithWeaveAfterLastSplitTest.java @@ -48,7 +48,7 @@ public class AdviceWithWeaveAfterLastSplitTest extends ContextTestSupport { return new RouteBuilder() { @Override public void configure() throws Exception { - from("direct:input").split(body(String.class).tokenize(",")).log("within split: ${body}").end(); + from("direct:input").split(bodyAs(String.class).tokenize(",")).log("within split: ${body}").end(); } }; } http://git-wip-us.apache.org/repos/asf/camel/blob/c63c2503/camel-core/src/test/java/org/apache/camel/util/DumpModelAsXmlTransformRouteConstantTest.java ---------------------------------------------------------------------- diff --git a/camel-core/src/test/java/org/apache/camel/util/DumpModelAsXmlTransformRouteConstantTest.java b/camel-core/src/test/java/org/apache/camel/util/DumpModelAsXmlTransformRouteConstantTest.java new file mode 100644 index 0000000..8147225 --- /dev/null +++ b/camel-core/src/test/java/org/apache/camel/util/DumpModelAsXmlTransformRouteConstantTest.java @@ -0,0 +1,64 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.camel.util; + +import org.apache.camel.ContextTestSupport; +import org.apache.camel.builder.RouteBuilder; +import org.apache.camel.converter.jaxp.XmlConverter; +import org.apache.camel.model.ModelHelper; +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.NodeList; + +/** + * + */ +public class DumpModelAsXmlTransformRouteConstantTest extends ContextTestSupport { + + public void testDumpModelAsXml() throws Exception { + String xml = ModelHelper.dumpModelAsXml(context, context.getRouteDefinition("myRoute")); + assertNotNull(xml); + log.info(xml); + + Document doc = new XmlConverter().toDOMDocument(xml); + NodeList nodes = doc.getElementsByTagName("constant"); + assertEquals(1, nodes.getLength()); + Element node = (Element)nodes.item(0); + assertNotNull("Node <simple> expected to be instanceof Element", node); + assertEquals("Hello World", node.getTextContent()); + + nodes = doc.getElementsByTagName("to"); + assertEquals(1, nodes.getLength()); + node = (Element)nodes.item(0); + assertNotNull("Node <to> expected to be instanceof Element", node); + assertEquals("mock:result", node.getAttribute("uri")); + assertEquals("myMock", node.getAttribute("id")); + assertEquals("true", node.getAttribute("customId")); + } + + @Override + protected RouteBuilder createRouteBuilder() throws Exception { + return new RouteBuilder() { + @Override + public void configure() throws Exception { + from("direct:start").routeId("myRoute") + .transform(constant("Hello World")) + .to("mock:result").id("myMock"); + } + }; + } +} http://git-wip-us.apache.org/repos/asf/camel/blob/c63c2503/camel-core/src/test/java/org/apache/camel/util/DumpModelAsXmlTransformRouteLanguageTest.java ---------------------------------------------------------------------- diff --git a/camel-core/src/test/java/org/apache/camel/util/DumpModelAsXmlTransformRouteLanguageTest.java b/camel-core/src/test/java/org/apache/camel/util/DumpModelAsXmlTransformRouteLanguageTest.java new file mode 100644 index 0000000..40d6aa2 --- /dev/null +++ b/camel-core/src/test/java/org/apache/camel/util/DumpModelAsXmlTransformRouteLanguageTest.java @@ -0,0 +1,65 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.camel.util; + +import org.apache.camel.ContextTestSupport; +import org.apache.camel.builder.RouteBuilder; +import org.apache.camel.converter.jaxp.XmlConverter; +import org.apache.camel.model.ModelHelper; +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.NodeList; + +/** + * + */ +public class DumpModelAsXmlTransformRouteLanguageTest extends ContextTestSupport { + + public void testDumpModelAsXml() throws Exception { + String xml = ModelHelper.dumpModelAsXml(context, context.getRouteDefinition("myRoute")); + assertNotNull(xml); + log.info(xml); + + Document doc = new XmlConverter().toDOMDocument(xml); + NodeList nodes = doc.getElementsByTagName("language"); + assertEquals(1, nodes.getLength()); + Element node = (Element)nodes.item(0); + assertNotNull("Node <simple> expected to be instanceof Element", node); + assertEquals("constant", node.getAttribute("language")); + assertEquals("Hello World", node.getTextContent()); + + nodes = doc.getElementsByTagName("to"); + assertEquals(1, nodes.getLength()); + node = (Element)nodes.item(0); + assertNotNull("Node <to> expected to be instanceof Element", node); + assertEquals("mock:result", node.getAttribute("uri")); + assertEquals("myMock", node.getAttribute("id")); + assertEquals("true", node.getAttribute("customId")); + } + + @Override + protected RouteBuilder createRouteBuilder() throws Exception { + return new RouteBuilder() { + @Override + public void configure() throws Exception { + from("direct:start").routeId("myRoute") + .transform(language("constant", "Hello World")) + .to("mock:result").id("myMock"); + } + }; + } +}