使用骆驼撒克逊将Saxon-PE整合到骆驼中

时间:2019-01-25 16:11:20

标签: apache-camel saxon

我将Camel 2.22.1与springboot 2.0.4.RELEASE一起使用。骆驼组件camel-saxon使用默认的Saxon-HE。我有一些Xquery文件,它们调用Java方法,因此我想用Saxon-PE替换Saxon-HE。我申请了一份Saxon-PE的测试许可证,并尝试了不同的方法,但没有成功。 Saxon-PE jar文件saxon9pe.jar已经加载,但是它仍作为Saxon HE版本工作。我想,该许可证未由Saxon-PE正确加载。

我尝试了以下方法,但没有一个起作用。

  • 将许可证文件saxon-license.licsaxon9pe.jar放在同一文件夹中
  • 定义环境变量SAXON_HOME,然后将saxon-license.licsaxonpe.jar放入SAXON_HOME \ bin
  • 修改包org.apache.camel.component.xquery.XQueryBuilder.configuration中类XqueryBuild.javaorg.apache.camel.component.xquery的{​​{1}}来设置LICENSE_FILE_LOCATION(我得到了错误:未知的配置属性http://saxon.sf.net/feature/licenseFileLocation

Saxon文档提到创建一个XML配置文件,但是我不知道该把XML配置文件放在哪里。

使用Java调用运行Xquery时出现错误:

Caused by: net.sf.saxon.trans.XPathException: Cannot find a 0-argument function named Q{java:java.lang.Double}MAX_VALUE(). Reflexive calls to Java methods are not available under Saxon-HE at net.sf.saxon.query.UnboundFunctionLibrary.bindUnboundFunctionReferences(UnboundFunctionLibrary.java:166) ~[saxon9pe.jar!/:na] at net.sf.saxon.query.QueryModule.bindUnboundFunctionCalls(QueryModule.java:1172) ~[saxon9pe.jar!/:na] at net.sf.saxon.expr.instruct.Executable.fixupQueryModules(Executable.java:462) ~[saxon9pe.jar!/:na] at net.sf.saxon.query.XQueryParser.makeXQueryExpression(XQueryParser.java:176) ~[saxon9pe.jar!/:na] at net.sf.saxon.query.StaticQueryContext.compileQuery(StaticQueryContext.java:597) ~[saxon9pe.jar!/:na] at net.sf.saxon.query.StaticQueryContext.compileQuery(StaticQueryContext.java:658) ~[saxon9pe.jar!/:na] at org.apache.camel.component.xquery.XQueryBuilder$3.createQueryExpression(XQueryBuilder.java:276) ~[classes!/:2.23.1] at org.apache.camel.component.xquery.XQueryBuilder.initialize(XQueryBuilder.java:745) ~[classes!/:2.23.1] at org.apache.camel.component.xquery.XQueryBuilder.evaluateAsDOM(XQueryBuilder.java:190) ~[classes!/:2.23.1] at org.apache.camel.component.xquery.XQueryBuilder.evaluate(XQueryBuilder.java:151) ~[classes!/:2.23.1] ... 40 common frames omitted

有人可以分享一些使用骆驼设置Saxon-PE以便在Xquery中调用Java的经验吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

从提供的其他信息来看,好像您要拾取的是Saxon JAR文件,而不是许可证文件。

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

通常,您需要确保包含JAR文件的目录在类路径上,或者您需要(以某种方式)设置Saxon的配置属性LICENSE_FILE_LOCATION。

根据https://github.com/apache/camel/blob/master/components/camel-saxon/src/main/docs/xquery-component.adoc,您可以使用configurationconfigurationProperties来设置Saxon配置属性,但是我看不到对此有任何进一步的解释。我会四处逛逛。