Apache camel 使用Camel-Saxon在Camel中集成Saxon-PE

Apache camel 使用Camel-Saxon在Camel中集成Saxon-PE,apache-camel,saxon,Apache Camel,Saxon,我将Camel 2.22.1与springboot 2.0.4.RELEASE一起使用。camel组件camel-saxon使用默认的saxon-HE。我有一些Xquery文件,它们调用Java方法,所以我想用Saxon PE替换Saxon HE。我为Saxon PE申请了一个测试许可证,并尝试了不同的方法,但没有成功。Saxon PE jar文件Saxon 9pe.jar已经加载,但是,它仍然作为Saxon HE版本运行。我猜,Saxon PE没有正确加载许可证 我尝试了以下方法,但没有一种有

我将Camel 2.22.1与springboot 2.0.4.RELEASE一起使用。camel组件
camel-saxon
使用默认的saxon-HE。我有一些Xquery文件,它们调用Java方法,所以我想用Saxon PE替换Saxon HE。我为Saxon PE申请了一个测试许可证,并尝试了不同的方法,但没有成功。Saxon PE jar文件
Saxon 9pe.jar
已经加载,但是,它仍然作为Saxon HE版本运行。我猜,Saxon PE没有正确加载许可证

我尝试了以下方法,但没有一种有效

  • 将许可证文件
    saxonlicense.lic
    saxon9pe.jar
    放在同一文件夹中
  • 定义一个环境变量SAXON_HOME,并将
    SAXON license.lic
    saxonpe.jar
    放在SAXON_HOME\bin中
  • 修改包
    org.apache.camel.component.xquery.XQueryBuilder.configuration
    中类
    XqueryBuild.java
    中的
    org.apache.camel.component.xquery
    以设置
    许可证文件位置
    (我得到错误:未知配置属性)
Saxon文档提到创建XML配置文件,但我不知道应该将此XML配置文件放在哪里

使用Java调用运行Xquery时,我遇到了错误:

原因:net.sf.saxon.trans.XPathException:找不到名为Q{java:java.lang.Double}MAX_VALUE()的0参数函数。Saxon HE下net.sf.Saxon.query.UnboundFunctionLibrary.bindUnboundFunctionReferences(UnboundFunctionLibrary.Java:166)~[saxon9pe.jar!/:na]中没有对Java方法的自反调用
在net.sf.saxon.query.QueryModule.bindunbundFunctionCalls(QueryModule.java:1172)~[saxon9pe.jar!/:na]
在net.sf.saxon.expr.instruction.Executable.fixupQueryModules(Executable.java:462)~[saxon9pe.jar!/:na]
在net.sf.saxon.query.XQueryParser.makeXQueryExpression(XQueryParser.java:176)~[saxon9pe.jar!/:na]
在net.sf.saxon.query.StaticQueryContext.compileQuery(StaticQueryContext.java:597)~[saxon9pe.jar!/:na]
在net.sf.saxon.query.StaticQueryContext.compileQuery(StaticQueryContext.java:658)~[saxon9pe.jar!/:na]
在org.apache.camel.component.xquery.XQueryBuilder$3.createQueryExpression(XQueryBuilder.java:276)~[classes!/:2.23.1]
在org.apache.camel.component.xquery.XQueryBuilder.initialize(XQueryBuilder.java:745)~[classes!/:2.23.1]
在org.apache.camel.component.xquery.XQueryBuilder.evaluatesDOM(XQueryBuilder.java:190)~[classes!/:2.23.1]
在org.apache.camel.component.xquery.XQueryBuilder.evaluate(XQueryBuilder.java:151)~[classes!/:2.23.1]
... 省略40个公共帧

一些人可以分享一些使用camel设置Saxon-PE以使调用Java在Xquery中工作的经验吗


谢谢

从提供的额外信息来看,您似乎正在获取Saxon JAR文件,而不是许可证文件

将许可证文件与JAR文件放在同一文件夹中通常就足够了,但它只适用于某些类加载器

通常,您需要确保包含JAR文件的目录位于类路径上,或者需要(以某种方式)设置Saxon的配置属性LICENSE\u file\u位置


根据,您可以使用
configuration
configurationProperties
设置Saxon配置属性,但我看不到任何关于如何工作的进一步解释。我会仔细研究一下。

从提供的额外信息来看,您似乎正在获取Saxon JAR文件,而不是许可证文件

将许可证文件与JAR文件放在同一文件夹中通常就足够了,但它只适用于某些类加载器

通常,您需要确保包含JAR文件的目录位于类路径上,或者需要(以某种方式)设置Saxon的配置属性LICENSE\u file\u位置


根据,您可以使用
configuration
configurationProperties
设置Saxon配置属性,但我看不到任何关于如何工作的进一步解释。我会仔细研究一下。

知道它是如何失败的会很有用。具体地说,我们需要确定它是否正在查找Saxon PE jar文件并尝试执行它(但失败),或者它是否未能找到Saxon PE jar文件。了解症状将有助于区分这两种情况。请注意,该问题是重复的,因此一些成员可能倾向于将其作为重复问题来结束;我不愿意这样做,因为自2016年以来答案可能已经改变了。如果Xquery不需要Saxon PE中的功能,那么一切都很好。当我尝试执行Xquery时,如果失败,则调用Java方法。即使使用saxon文档中的简单示例
{double:MAX_VALUE()}
运行带有Java调用的Xquery时,错误仍然是:
,原因是:net.sf.saxon.trans.XPathException:找不到名为Q{Java:Java.lang.double}MAX_VALUE()的0参数函数。Saxon HE下net.sf.Saxon.query.UnboundFunctionLibrary.bindundFunctionReferences(UnboundFunctionLibrary.Java:166)~[saxon9pe.jar!/:na]
我确信
saxon9pe.jar
已加载并使用,请相信它的行为与Saxon HE一样,因为许可证没有正确加载。了解它是如何失败的会很有用。具体地说,我们需要确定它是否正在查找Saxon PE jar文件并尝试执行它(但失败),或者它是否未能找到Saxon PE jar文件。了解症状将有助于区分这两种情况。请注意,该问题是重复的,因此一些成员可能倾向于将其作为重复问题来结束;我不愿意这样做,因为自2016年以来答案可能已经改变了。如果Xquery不需要Saxon PE中的功能,那么一切都很好。如果在尝试执行Xquery时失败,其中