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>

Reply via email to