This is an automated email from the ASF dual-hosted git repository. davsclaus pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/camel.git
commit d7ea35b7bbf072655337ab48faa84a3fc4a4338f Author: Claus Ibsen <[email protected]> AuthorDate: Thu Oct 1 20:41:26 2020 +0200 CAMEL-15605: Languages should be singleton for better performance. --- .../apache/camel/language/xpath/XPathLanguage.java | 17 +++++++++++++ .../reifier/language/XPathExpressionReifier.java | 28 +++++++++++++++------- .../java/org/apache/camel/language/XPathTest.java | 4 ++-- 3 files changed, 39 insertions(+), 10 deletions(-) diff --git a/components/camel-xpath/src/main/java/org/apache/camel/language/xpath/XPathLanguage.java b/components/camel-xpath/src/main/java/org/apache/camel/language/xpath/XPathLanguage.java index fd90f94..5c6ccd5 100644 --- a/components/camel-xpath/src/main/java/org/apache/camel/language/xpath/XPathLanguage.java +++ b/components/camel-xpath/src/main/java/org/apache/camel/language/xpath/XPathLanguage.java @@ -18,6 +18,7 @@ package org.apache.camel.language.xpath; import java.util.Map; +import javax.xml.namespace.QName; import javax.xml.xpath.XPathFactory; import org.apache.camel.Expression; @@ -31,6 +32,7 @@ import org.apache.camel.support.LanguageSupport; @Language("xpath") public class XPathLanguage extends LanguageSupport { private Class<?> resultType; + private QName resultQName; private Class<?> documentType; private XPathFactory xpathFactory; private Boolean useSaxon; @@ -75,6 +77,10 @@ public class XPathLanguage extends LanguageSupport { if (clazz != null) { setResultType(clazz); } + QName qname = property(QName.class, properties, "resultQName", null); + if (qname != null) { + setResultQName(qname); + } setUseSaxon(property(Boolean.class, properties, "useSaxon", null)); setObjectModelUri(property(String.class, properties, "objectModelUri", null)); setThreadSafety(property(Boolean.class, properties, "threadSafety", null)); @@ -91,6 +97,14 @@ public class XPathLanguage extends LanguageSupport { return resultType; } + public void setResultQName(QName qName) { + this.resultQName = qName; + } + + public QName getResultQName() { + return resultQName; + } + public void setResultType(Class<?> resultType) { this.resultType = resultType; } @@ -159,6 +173,9 @@ public class XPathLanguage extends LanguageSupport { if (threadSafety != null) { builder.setThreadSafety(threadSafety); } + if (resultQName != null) { + builder.setResultQName(resultQName); + } if (resultType != null) { builder.setResultType(resultType); } diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/language/XPathExpressionReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/language/XPathExpressionReifier.java index c49f1f0..b033b14 100644 --- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/language/XPathExpressionReifier.java +++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/language/XPathExpressionReifier.java @@ -19,6 +19,7 @@ package org.apache.camel.reifier.language; import java.util.HashMap; import java.util.Map; +import javax.xml.xpath.XPathConstants; import javax.xml.xpath.XPathFactory; import org.apache.camel.CamelContext; @@ -68,6 +69,7 @@ public class XPathExpressionReifier extends ExpressionReifier<XPathExpression> { Map<String, Object> properties = new HashMap<>(9); properties.put("expression", expression); properties.put("documentType", definition.getDocumentType()); + properties.put("XPathTest", asQName(definition.getResultTypeName())); properties.put("resultType", definition.getResultType()); properties.put("useSaxon", definition.getSaxon()); properties.put("xPathFactory", definition.getXPathFactory()); @@ -78,16 +80,26 @@ public class XPathExpressionReifier extends ExpressionReifier<XPathExpression> { return properties; } + private Object asQName(String resultTypeName) { + if (resultTypeName == null) { + return null; + } + if ("NUMBER".equalsIgnoreCase(resultTypeName)) { + return XPathConstants.NUMBER; + } else if ("STRING".equalsIgnoreCase(resultTypeName)) { + return XPathConstants.STRING; + } else if ("BOOLEAN".equalsIgnoreCase(resultTypeName)) { + return XPathConstants.BOOLEAN; + } else if ("NODESET".equalsIgnoreCase(resultTypeName)) { + return XPathConstants.NODESET; + } else if ("NODE".equalsIgnoreCase(resultTypeName)) { + return XPathConstants.NODE; + } + return null; + } + @Override protected void configureLanguage(Language language) { - if (definition.getResultType() == null && definition.getResultTypeName() != null) { - try { - Class<?> clazz = camelContext.getClassResolver().resolveMandatoryClass(definition.getResultTypeName()); - definition.setResultType(clazz); - } catch (ClassNotFoundException e) { - throw RuntimeCamelException.wrapRuntimeException(e); - } - } if (definition.getDocumentType() == null && definition.getDocumentTypeName() != null) { try { Class<?> clazz = camelContext.getClassResolver().resolveMandatoryClass(definition.getDocumentTypeName()); diff --git a/core/camel-core/src/test/java/org/apache/camel/language/XPathTest.java b/core/camel-core/src/test/java/org/apache/camel/language/XPathTest.java index 3b2ee7f..e07322d 100644 --- a/core/camel-core/src/test/java/org/apache/camel/language/XPathTest.java +++ b/core/camel-core/src/test/java/org/apache/camel/language/XPathTest.java @@ -56,8 +56,8 @@ public class XPathTest extends LanguageTestSupport { @Override protected Language assertResolveLanguage(String languageName) { XPathLanguage answer = new XPathLanguage(); - answer.setResultType(XPathConstants.STRING); - assertEquals(XPathConstants.STRING, answer.getResultType()); + answer.setResultQName(XPathConstants.STRING); + assertEquals(XPathConstants.STRING, answer.getResultQName()); return answer; } }
