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 <[email protected]>
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;
}