This is an automated email from the ASF dual-hosted git repository.

davsclaus pushed a commit to branch xpath
in repository https://gitbox.apache.org/repos/asf/camel.git

commit ba6bdd79ae1e970f605db5c9324f6c915c9b75a0
Author: Claus Ibsen <[email protected]>
AuthorDate: Tue Apr 23 09:24:51 2019 +0200

    camel3 - a little bit of modularization around xpath
---
 .../org/apache/camel/builder/xml/XPathBuilder.java | 16 +++++++++++
 .../apache/camel/language/xpath/XPathLanguage.java | 32 +++++++++++++++++++---
 .../camel/model/language/XPathExpression.java      | 13 ++++-----
 3 files changed, 50 insertions(+), 11 deletions(-)

diff --git 
a/core/camel-core/src/main/java/org/apache/camel/builder/xml/XPathBuilder.java 
b/core/camel-core/src/main/java/org/apache/camel/builder/xml/XPathBuilder.java
index 580abfd..b60de21 100644
--- 
a/core/camel-core/src/main/java/org/apache/camel/builder/xml/XPathBuilder.java
+++ 
b/core/camel-core/src/main/java/org/apache/camel/builder/xml/XPathBuilder.java
@@ -118,6 +118,7 @@ public class XPathBuilder extends ServiceSupport implements 
CamelContextAware, E
     // let's assume XPath expressions result in nodesets.
     private volatile Class<?> resultType;
     private volatile QName resultQName = XPathConstants.NODESET;
+    private volatile boolean useSaxon;
     private volatile String objectModelUri;
     private volatile String factoryClassName;
     private volatile DefaultNamespaceContext namespaceContext;
@@ -373,6 +374,7 @@ public class XPathBuilder extends ServiceSupport implements 
CamelContextAware, E
      * @return the current builder
      */
     public XPathBuilder saxon() {
+        this.useSaxon = true;
         this.objectModelUri = SAXON_OBJECT_MODEL_URI;
         this.factoryClassName = SAXON_FACTORY_CLASS_NAME;
         return this;
@@ -832,6 +834,20 @@ public class XPathBuilder extends ServiceSupport 
implements CamelContextAware, E
         this.setFactoryClassName(SAXON_FACTORY_CLASS_NAME);
     }
 
+    /**
+     * Whether to enable Saxon on this particular XPath expression.
+     */
+    public void setUseSaxon(boolean useSaxon) {
+        this.useSaxon = useSaxon;
+        if (useSaxon) {
+            enableSaxon();
+        }
+    }
+
+    public boolean isUseSaxon() {
+        return useSaxon;
+    }
+
     public String getObjectModelUri() {
         return objectModelUri;
     }
diff --git 
a/core/camel-core/src/main/java/org/apache/camel/language/xpath/XPathLanguage.java
 
b/core/camel-core/src/main/java/org/apache/camel/language/xpath/XPathLanguage.java
index 0ec4bcd..c9b7ebd 100644
--- 
a/core/camel-core/src/main/java/org/apache/camel/language/xpath/XPathLanguage.java
+++ 
b/core/camel-core/src/main/java/org/apache/camel/language/xpath/XPathLanguage.java
@@ -35,6 +35,8 @@ public class XPathLanguage extends LanguageSupport {
     private Boolean useSaxon;
     private String objectModelUri;
     private Boolean threadSafety;
+    private Boolean logNamespaces;
+    private String headerName;
 
     public Predicate createPredicate(String expression) {
         expression = loadResource(expression);
@@ -76,10 +78,6 @@ public class XPathLanguage extends LanguageSupport {
         return useSaxon;
     }
 
-    public Boolean isUseSaxon() {
-        return useSaxon != null && useSaxon;
-    }
-
     public String getObjectModelUri() {
         return objectModelUri;
     }
@@ -96,6 +94,26 @@ public class XPathLanguage extends LanguageSupport {
         this.threadSafety = threadSafety;
     }
 
+    public Boolean getLogNamespaces() {
+        return logNamespaces;
+    }
+
+    public void setLogNamespaces(Boolean logNamespaces) {
+        this.logNamespaces = logNamespaces;
+    }
+
+    public String getHeaderName() {
+        return headerName;
+    }
+
+    public void setHeaderName(String headerName) {
+        this.headerName = headerName;
+    }
+
+    private boolean isUseSaxon() {
+        return useSaxon != null && useSaxon;
+    }
+
     protected void configureBuilder(XPathBuilder builder) {
         if (threadSafety != null) {
             builder.setThreadSafety(threadSafety);
@@ -103,6 +121,12 @@ public class XPathLanguage extends LanguageSupport {
         if (resultType != null) {
             builder.setResultQName(resultType);
         }
+        if (logNamespaces != null) {
+            builder.setLogNamespaces(logNamespaces);
+        }
+        if (headerName != null) {
+            builder.setHeaderName(headerName);
+        }
 
         if (isUseSaxon()) {
             builder.enableSaxon();
diff --git 
a/core/camel-core/src/main/java/org/apache/camel/model/language/XPathExpression.java
 
b/core/camel-core/src/main/java/org/apache/camel/model/language/XPathExpression.java
index e832601..27ec20d 100644
--- 
a/core/camel-core/src/main/java/org/apache/camel/model/language/XPathExpression.java
+++ 
b/core/camel-core/src/main/java/org/apache/camel/model/language/XPathExpression.java
@@ -27,7 +27,6 @@ import org.apache.camel.CamelContext;
 import org.apache.camel.Expression;
 import org.apache.camel.Predicate;
 import org.apache.camel.RuntimeCamelException;
-import org.apache.camel.builder.xml.XPathBuilder;
 import org.apache.camel.spi.Metadata;
 import org.apache.camel.util.ObjectHelper;
 
@@ -246,7 +245,7 @@ public class XPathExpression extends 
NamespaceAwareExpression {
             setProperty(expression, "resultType", resultType);
         }
         if (isSaxon) {
-            ObjectHelper.cast(XPathBuilder.class, expression).enableSaxon();
+            setProperty(expression, "useSaxon", true);
         }
         if (xpathFactory != null) {
             setProperty(expression, "xPathFactory", xpathFactory);
@@ -258,10 +257,10 @@ public class XPathExpression extends 
NamespaceAwareExpression {
             setProperty(expression, "threadSafety", threadSafety);
         }
         if (isLogNamespaces) {
-            ObjectHelper.cast(XPathBuilder.class, 
expression).setLogNamespaces(true);
+            setProperty(expression, "logNamespaces", true);
         }
         if (ObjectHelper.isNotEmpty(getHeaderName())) {
-            ObjectHelper.cast(XPathBuilder.class, 
expression).setHeaderName(getHeaderName());
+            setProperty(expression, "headerName", getHeaderName());
         }
         // moved the super configuration to the bottom so that the namespace 
init picks up the newly set XPath Factory
         super.configureExpression(camelContext, expression);
@@ -279,7 +278,7 @@ public class XPathExpression extends 
NamespaceAwareExpression {
             setProperty(predicate, "resultType", resultType);
         }
         if (isSaxon) {
-            ObjectHelper.cast(XPathBuilder.class, predicate).enableSaxon();
+            setProperty(predicate, "useSaxon", true);
         }
         if (xpathFactory != null) {
             setProperty(predicate, "xPathFactory", xpathFactory);
@@ -291,10 +290,10 @@ public class XPathExpression extends 
NamespaceAwareExpression {
             setProperty(predicate, "threadSafety", threadSafety);
         }
         if (isLogNamespaces) {
-            ObjectHelper.cast(XPathBuilder.class, 
predicate).setLogNamespaces(true);
+            setProperty(predicate, "logNamespaces", true);
         }
         if (ObjectHelper.isNotEmpty(getHeaderName())) {
-            ObjectHelper.cast(XPathBuilder.class, 
predicate).setHeaderName(getHeaderName());
+            setProperty(predicate, "headerName", getHeaderName());
         }
         // moved the super configuration to the bottom so that the namespace 
init picks up the newly set XPath Factory
         super.configurePredicate(camelContext, predicate);

Reply via email to