Apache camel Camel-saxon-Xquery:xmlns名称空间的错误声明

Apache camel Camel-saxon-Xquery:xmlns名称空间的错误声明,apache-camel,xquery,saxon,Apache Camel,Xquery,Saxon,我有一个我不明白的大问题 我有一个骆驼路线,它有一个xquery转换: <transform> <xquery>resource:file {{choregraphies.resources.directory}}/LINCASA1/xquery/getTypApr_request.xquery </xquery> </transform> Saxon在apachecamel试图声明一个名称空间绑定时报告了该错

我有一个我不明白的大问题

我有一个骆驼路线,它有一个xquery转换:

 <transform> 
        <xquery>resource:file {{choregraphies.resources.directory}}/LINCASA1/xquery/getTypApr_request.xquery
    </xquery>
    </transform>

Saxon在apachecamel试图声明一个名称空间绑定时报告了该错误,其中(a)前缀为“xmlns”,或(b)名称空间URI为“”

我已经检查了StaticQueryContext.declareNamespace()方法的9.5和9.8源代码,它们看起来是相同的:如果出现此前缀或URI,两者都会报告此错误。因此,似乎不是撒克逊人的改变导致了这个问题

前缀xmlns用于声明中,例如
xmlns:p=“my.uri”
。在DOM中,此类声明被视为名称为(前缀=xmlns,本地名称=p,uri=”的属性http://www.w3.org/2000/xmlns/"). 相反,在XQuery使用的XDM数据模型中,此声明不被视为属性节点;它是一个名称为“p”且字符串值为“my.uri”的名称空间节点,并且前缀“xmlns”或uri“”从来没有任何名称空间绑定。XQuery 3.1规范的第4.13节明确禁止在查询中出现的命名空间声明中使用此前缀或URI,这就是为什么Saxon在与这些值一起使用StaticQueryContext.declareNamespace()时抛出错误的原因

我已经在上查看了Camel源代码
Camel正在声明它在DOM中遇到的每个名称空间绑定,这似乎是合理的,但我需要对Camel有更深入的理解,才能确切地了解这里发生了什么。

当Apache Camel试图声明一个名称空间绑定时,Saxon报告了一个错误,其中(a)前缀是“xmlns”,或者(b)命名空间URI为“”

我已经检查了StaticQueryContext.declareNamespace()方法的9.5和9.8源代码,它们看起来是相同的:如果出现此前缀或URI,两者都会报告此错误。因此,似乎不是撒克逊人的改变导致了这个问题

前缀xmlns用于声明中,例如
xmlns:p=“my.uri”
。在DOM中,此类声明被视为名称为(前缀=xmlns,本地名称=p,uri=”的属性http://www.w3.org/2000/xmlns/"). 相反,在XQuery使用的XDM数据模型中,此声明不被视为属性节点;它是一个名称为“p”且字符串值为“my.uri”的名称空间节点,并且前缀“xmlns”或uri“”从来没有任何名称空间绑定。XQuery 3.1规范的第4.13节明确禁止在查询中出现的命名空间声明中使用此前缀或URI,这就是为什么Saxon在与这些值一起使用StaticQueryContext.declareNamespace()时抛出错误的原因

我已经在上查看了Camel源代码
Camel声明了它在DOM中遇到的每个名称空间绑定,这似乎是有道理的,但我需要对Camel有更深入的了解,才能确切了解这里发生了什么。

感谢您的回复,我实际上查看了Saxon和XqueryBuilder代码,发现它们之间存在一些差异。但我怀疑Camel版本会从2.17升级到2.21,因为通过调试XqueryBuilder,Camel 2.17中没有考虑路由的xmlns命名空间,而在2.21中,它出现在变量:XqueryBuilder的namespacePrefixes中。我继续我的研究。@Roy9590你找到解决这个问题的办法了吗。对于Camel 2.22.0和Saxon-HE-9.8.0-12.jar,我得到了相同的错误:org.apache.Camel.RuntimeExpressionException:java.lang.IllegalArgumentException:org.apache.Camel.component.xquery.XQueryBuilder.evaluate(XQueryBuilder.java:155)~[Camel-Saxon-2.22.1.jar:2.22.1]在org.apache.camel.component.xquery.XQueryBuilder.evaluate(XQueryBuilder.java:120)~[camel-saxon-2.22.1.jar:2.22.1]在org.apache.camel.processor.TransformProcessor.process(TransformProcessor.java:50)~[camel-core-2.22.1.jar:2.22.1]感谢您的回复,实际上,我研究了Saxon和XqueryBuilder代码,发现它们之间存在一些差异。但我怀疑Camel版本会从2.17升级到2.21,因为通过调试XqueryBuilder,Camel 2.17中没有考虑路由的xmlns命名空间,而在2.21中,它出现在变量:XqueryBuilder的namespacePrefixes中。我继续我的研究。@Roy9590你找到解决这个问题的办法了吗。对于Camel 2.22.0和Saxon-HE-9.8.0-12.jar,我得到了相同的错误:org.apache.Camel.RuntimeExpressionException:java.lang.IllegalArgumentException:org.apache.Camel.component.xquery.XQueryBuilder.evaluate(XQueryBuilder.java:155)~[Camel-Saxon-2.22.1.jar:2.22.1]在org.apache.camel.component.xquery.XQueryBuilder.evaluate(XQueryBuilder.java:120)~[camel-saxon-2.22.1.jar:2.22.1]在org.apache.camel.processor.TransformProcessor.process(TransformProcessor.java:50)~[camel-core-2.22.1.jar:2.22.1]
xquery version "1.0";
declare namespace xs="http://www.w3.org/2001/XMLSchema";
declare namespace com="com.edfgdf.a21.business.impl";
declare variable $in.headers.prmId as xs:string external;
declare variable $in.headers.id as xs:string external;

<com:getTypApr>
<idClient>{$in.headers.id}</idClient>
<reference>{$in.headers.prmId}</reference>
</com:getTypApr>
<routes xmlns="http://camel.apache.org/schema/spring">
org.apache.camel.RuntimeExpressionException: java.lang.IllegalArgumentException: Misdeclaration of xmlns namespace
    at org.apache.camel.component.xquery.XQueryBuilder.evaluate(XQueryBuilder.java:154) ~[camel-saxon-2.21.0.jar:2.21.0]
    at org.apache.camel.component.xquery.XQueryBuilder.evaluate(XQueryBuilder.java:119) ~[camel-saxon-2.21.0.jar:2.21.0]
    at org.apache.camel.processor.TransformProcessor.process(TransformProcessor.java:50) ~[camel-core-2.21.0.jar:2.21.0]
    at org.apache.camel.processor.RedeliveryErrorHandler.process(RedeliveryErrorHandler.java:548) ~[camel-core-2.21.0.jar:2.21.0]
    at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:201) [camel-core-2.21.0.jar:2.21.0]
    at org.apache.camel.processor.Pipeline.process(Pipeline.java:138) [camel-core-2.21.0.jar:2.21.0]
    at org.apache.camel.processor.Pipeline.process(Pipeline.java:101) [camel-core-2.21.0.jar:2.21.0]
    at org.apache.camel.processor.CamelInternalProcessor.process(CamelInternalProcessor.java:201) [camel-core-2.21.0.jar:2.21.0]
    at org.apache.camel.component.seda.SedaConsumer.sendToConsumers(SedaConsumer.java:298) [camel-core-2.21.0.jar:2.21.0]
    at org.apache.camel.component.seda.SedaConsumer.doRun(SedaConsumer.java:210) [camel-core-2.21.0.jar:2.21.0]
    at org.apache.camel.component.seda.SedaConsumer.run(SedaConsumer.java:155) [camel-core-2.21.0.jar:2.21.0]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [na:1.8.0_162]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [na:1.8.0_162]
    at java.lang.Thread.run(Thread.java:748) [na:1.8.0_162]
Caused by: java.lang.IllegalArgumentException: Misdeclaration of xmlns namespace
    at net.sf.saxon.query.StaticQueryContext.declareNamespace(StaticQueryContext.java:719) ~[Saxon-HE-9.8.0-8.jar:na]
    at org.apache.camel.component.xquery.XQueryBuilder.initialize(XQueryBuilder.java:720) ~[camel-saxon-2.21.0.jar:2.21.0]
    at org.apache.camel.component.xquery.XQueryBuilder.evaluateAsDOM(XQueryBuilder.java:183) ~[camel-saxon-2.21.0.jar:2.21.0]
    at org.apache.camel.component.xquery.XQueryBuilder.evaluate(XQueryBuilder.java:144) ~[camel-saxon-2.21.0.jar:2.21.0]
    ... 13 common frames omitted