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);
