Repository: camel Updated Branches: refs/heads/camel-2.14.x 485309b60 -> 638355862
CAMEL-8182: Add documentType option to xml dsl. Thanks to Stephan Siano for the patch. Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/63835586 Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/63835586 Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/63835586 Branch: refs/heads/camel-2.14.x Commit: 638355862837baf415f82450b2e373f8d58a4fea Parents: 485309b Author: Claus Ibsen <davscl...@apache.org> Authored: Mon Jan 19 14:32:26 2015 +0100 Committer: Claus Ibsen <davscl...@apache.org> Committed: Mon Jan 19 14:35:28 2015 +0100 ---------------------------------------------------------------------- .../camel/model/language/XPathExpression.java | 33 ++++++++++++++++++++ .../camel/language/xpath/XPathLanguageTest.xml | 8 ++--- 2 files changed, 37 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/63835586/camel-core/src/main/java/org/apache/camel/model/language/XPathExpression.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/model/language/XPathExpression.java b/camel-core/src/main/java/org/apache/camel/model/language/XPathExpression.java index 16226a1..fb8415d 100644 --- a/camel-core/src/main/java/org/apache/camel/model/language/XPathExpression.java +++ b/camel-core/src/main/java/org/apache/camel/model/language/XPathExpression.java @@ -35,6 +35,8 @@ import org.apache.camel.util.ObjectHelper; @XmlRootElement(name = "xpath") @XmlAccessorType(XmlAccessType.FIELD) public class XPathExpression extends NamespaceAwareExpression { + @XmlAttribute(name = "documentType") + private String documentTypeName; @XmlAttribute(name = "resultType") private String resultTypeName; @XmlAttribute(name = "saxon") @@ -49,6 +51,8 @@ public class XPathExpression extends NamespaceAwareExpression { private String headerName; @XmlTransient + private Class<?> documentType; + @XmlTransient private Class<?> resultType; @XmlTransient private XPathFactory xpathFactory; @@ -69,6 +73,22 @@ public class XPathExpression extends NamespaceAwareExpression { return "xpath"; } + public Class<?> getDocumentType() { + return documentType; + } + + public void setDocumentType(Class<?> documentType) { + this.documentType = documentType; + } + + public String getDocumentTypeName() { + return documentTypeName; + } + + public void setDocumentTypeName(String documentTypeName) { + this.documentTypeName = documentTypeName; + } + public Class<?> getResultType() { return resultType; } @@ -135,6 +155,13 @@ public class XPathExpression extends NamespaceAwareExpression { @Override public Expression createExpression(CamelContext camelContext) { + if (documentType == null && documentTypeName != null) { + try { + documentType = camelContext.getClassResolver().resolveMandatoryClass(documentTypeName); + } catch (ClassNotFoundException e) { + throw ObjectHelper.wrapRuntimeCamelException(e); + } + } if (resultType == null && resultTypeName != null) { try { resultType = camelContext.getClassResolver().resolveMandatoryClass(resultTypeName); @@ -154,6 +181,9 @@ public class XPathExpression extends NamespaceAwareExpression { @Override protected void configureExpression(CamelContext camelContext, Expression expression) { + if (documentType != null) { + setProperty(expression, "documentType", documentType); + } if (resultType != null) { setProperty(expression, "resultType", resultType); } @@ -179,6 +209,9 @@ public class XPathExpression extends NamespaceAwareExpression { @Override protected void configurePredicate(CamelContext camelContext, Predicate predicate) { + if (documentType != null) { + setProperty(predicate, "documentType", documentType); + } if (resultType != null) { setProperty(predicate, "resultType", resultType); } http://git-wip-us.apache.org/repos/asf/camel/blob/63835586/components/camel-saxon/src/test/resources/org/apache/camel/language/xpath/XPathLanguageTest.xml ---------------------------------------------------------------------- diff --git a/components/camel-saxon/src/test/resources/org/apache/camel/language/xpath/XPathLanguageTest.xml b/components/camel-saxon/src/test/resources/org/apache/camel/language/xpath/XPathLanguageTest.xml index aa16576..23cd4ea 100644 --- a/components/camel-saxon/src/test/resources/org/apache/camel/language/xpath/XPathLanguageTest.xml +++ b/components/camel-saxon/src/test/resources/org/apache/camel/language/xpath/XPathLanguageTest.xml @@ -33,7 +33,7 @@ <route> <from uri="seda:testSaxonWithFlag"/> <setBody> - <xpath saxon="true" resultType="java.lang.String" logNamespaces="true">tokenize(a, '\|')</xpath> + <xpath saxon="true" documentType="javax.xml.transform.sax.SAXSource" resultType="java.lang.String" logNamespaces="true">tokenize(a, '\|')</xpath> </setBody> <log message="Test Saxon with flag: ${body}"/> <to uri="mock:testSaxonWithFlagResult"/> @@ -42,7 +42,7 @@ <route> <from uri="seda:testSaxonWithFactory"/> <setBody> - <xpath factoryRef="saxonFactory" resultType="java.lang.String" logNamespaces="true">tokenize(a, '\|')</xpath> + <xpath factoryRef="saxonFactory" documentType="org.xml.sax.InputSource" resultType="java.lang.String" logNamespaces="true">tokenize(a, '\|')</xpath> </setBody> <log message="Test Saxon with factory: ${body}"/> <to uri="mock:testSaxonWithFactoryResult"/> @@ -64,7 +64,7 @@ <route> <from uri="seda:testSaxonWithFlagPredicate"/> <filter> - <xpath saxon="true" resultType="java.lang.String">tokenize(a, '\|')[1] = 'Hello'</xpath> + <xpath saxon="true" documentType="javax.xml.transform.sax.SAXSource" resultType="java.lang.String">tokenize(a, '\|')[1] = 'Hello'</xpath> <log message="Test Saxon with flag: ${body}"/> <to uri="mock:testSaxonWithFlagResultPredicate"/> </filter> @@ -73,7 +73,7 @@ <route> <from uri="seda:testSaxonWithFactoryPredicate"/> <filter> - <xpath factoryRef="saxonFactory" resultType="java.lang.String">tokenize(a, '\|')[1] = 'Hello'</xpath> + <xpath factoryRef="saxonFactory" documentType="org.xml.sax.InputSource" resultType="java.lang.String">tokenize(a, '\|')[1] = 'Hello'</xpath> <log message="Test Saxon with factory: ${body}"/> <to uri="mock:testSaxonWithFactoryResultPredicate"/> </filter>