This is an automated email from the ASF dual-hosted git repository. davsclaus pushed a commit to branch camel-4.4.x in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/camel-4.4.x by this push: new e6c684cd492 CAMEL-20724: camel-saxon - Fix xquery namespaces usage (#13996) e6c684cd492 is described below commit e6c684cd49266db6573cdbb7b782768d5214b9af Author: Denis Istomin <istomin....@gmail.com> AuthorDate: Wed May 1 09:11:31 2024 +0500 CAMEL-20724: camel-saxon - Fix xquery namespaces usage (#13996) --- .../main/java/org/apache/camel/language/xquery/XQueryLanguage.java | 6 ++++++ .../builder/saxon/XQueryHeaderNameResultTypeAndNamespaceTest.java | 5 ++++- .../org/apache/camel/reifier/language/XQueryExpressionReifier.java | 3 ++- 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/components/camel-saxon/src/main/java/org/apache/camel/language/xquery/XQueryLanguage.java b/components/camel-saxon/src/main/java/org/apache/camel/language/xquery/XQueryLanguage.java index cf1554b837c..dfa1ec77594 100644 --- a/components/camel-saxon/src/main/java/org/apache/camel/language/xquery/XQueryLanguage.java +++ b/components/camel-saxon/src/main/java/org/apache/camel/language/xquery/XQueryLanguage.java @@ -16,6 +16,8 @@ */ package org.apache.camel.language.xquery; +import java.util.Map; + import net.sf.saxon.Configuration; import org.apache.camel.CamelContext; import org.apache.camel.Expression; @@ -57,6 +59,10 @@ public class XQueryLanguage extends SingleInputTypedLanguageSupport implements P if (clazz != null) { builder.setResultType(clazz); } + Map<String, String> ns = property(Map.class, properties, 2, null); + if (ns != null && !ns.isEmpty()) { + builder.setNamespaces(ns); + } if (configuration != null) { builder.setConfiguration(configuration); } diff --git a/components/camel-saxon/src/test/java/org/apache/camel/builder/saxon/XQueryHeaderNameResultTypeAndNamespaceTest.java b/components/camel-saxon/src/test/java/org/apache/camel/builder/saxon/XQueryHeaderNameResultTypeAndNamespaceTest.java index f77262723fc..83bc485738e 100644 --- a/components/camel-saxon/src/test/java/org/apache/camel/builder/saxon/XQueryHeaderNameResultTypeAndNamespaceTest.java +++ b/components/camel-saxon/src/test/java/org/apache/camel/builder/saxon/XQueryHeaderNameResultTypeAndNamespaceTest.java @@ -32,6 +32,7 @@ public class XQueryHeaderNameResultTypeAndNamespaceTest extends CamelTestSupport MockEndpoint mock = getMockEndpoint("mock:55"); mock.expectedBodiesReceived("body"); mock.expectedHeaderReceived("cheeseDetails", "<number xmlns=\"http://acme.com/cheese\">55</number>"); + mock.expectedHeaderReceived("numberExists", "true"); template.sendBodyAndHeader("direct:in", "body", "cheeseDetails", "<number xmlns=\"http://acme.com/cheese\">55</number>"); @@ -46,9 +47,11 @@ public class XQueryHeaderNameResultTypeAndNamespaceTest extends CamelTestSupport Namespaces ns = new Namespaces("c", "http://acme.com/cheese"); var xq = expression().xquery().expression("/c:number = 55").namespaces(ns).resultType(Integer.class) .source("header:cheeseDetails").end(); - + var xqExist = expression().xquery().expression("exists(/c:number)").namespaces(ns).resultType(String.class) + .source("header:cheeseDetails").end(); from("direct:in").choice() .when(xq) + .setHeader("numberExists", xqExist) .to("mock:55") .otherwise() .to("mock:other") diff --git a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/language/XQueryExpressionReifier.java b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/language/XQueryExpressionReifier.java index cc13d1248ed..60a7bef8f0a 100644 --- a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/language/XQueryExpressionReifier.java +++ b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/language/XQueryExpressionReifier.java @@ -48,9 +48,10 @@ public class XQueryExpressionReifier extends SingleInputTypedExpressionReifier<X } protected Object[] createProperties() { - Object[] properties = new Object[2]; + Object[] properties = new Object[3]; properties[0] = asResultType(); properties[1] = parseString(definition.getSource()); + properties[2] = definition.getNamespaces(); return properties; }