Apache camel 使用Camel-Saxon在Camel中集成Saxon-PE
我将Camel 2.22.1与springboot 2.0.4.RELEASE一起使用。camel组件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-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
放在SAXON_HOME\bin中saxonpe.jar
- 修改包
中类org.apache.camel.component.xquery.XQueryBuilder.configuration
中的XqueryBuild.java
以设置org.apache.camel.component.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时失败,其中