apache-camel - 使用 camel-saxon 将 Saxon-PE 集成到 Camel 中
问题描述
我将 Camel 2.22.1 与 springboot 2.0.4.RELEASE 一起使用。骆驼组件camel-saxon
使用默认的 Saxon-HE。我有一些调用 Java 方法的 Xquery 文件,所以我想用 Saxon-PE 替换 Saxon-HE。我为 Saxon-PE 申请了一份测试许可证,并尝试了不同的方法,但没有成功。Saxon-PE jar 文件saxon9pe.jar
已经加载,但是,它仍然作为 Saxon HE 版本工作。我猜,Saxon-PE 没有正确加载许可证。
我尝试了以下方法,但都没有奏效。
- 将许可证文件
saxon-license.lic
和saxon9pe.jar
在同一个文件夹中 - 定义一个环境变量 SAXON_HOME,并将
saxon-license.lic
和放入saxonpe.jar
SAXON_HOME\bin - 在包
org.apache.camel.component.xquery.XQueryBuilder.configuration
中的类中修改以设置(我得到错误:未知配置属性http://saxon.sf.net/feature/licenseFileLocation)XqueryBuild.java
org.apache.camel.component.xquery
LICENSE_FILE_LOCATION
Saxon Documentation 提到要创建一个 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 的经验吗?
谢谢!
解决方案
从提供的额外信息来看,您似乎选择的是 Saxon JAR 文件,而不是许可证文件。
将许可证文件与 JAR 文件放在同一文件夹中通常就足够了,但它仅适用于某些类加载器。
通常,您要么需要确保包含 JAR 文件的目录位于类路径中,要么需要(以某种方式)设置 Saxon 的配置属性 LICENSE_FILE_LOCATION。
根据https://github.com/apache/camel/blob/master/components/camel-saxon/src/main/docs/xquery-component.adocconfiguration
,您可以使用and设置 Saxon 配置属性configurationProperties
,但我没有请参阅有关其工作原理的任何进一步说明。我会四处挖掘。
推荐阅读
- regex - 用前导符号弯曲数字,但不要吃加法/减法
- java - Vector2 类的旋转问题
- docker - 删除现有的 docker 容器/图像 GitLab CI
- google-sheets - 仅当与 Dropbox 中的特定字符串匹配时才对特定单元格求和
- php - Windows server 2008 SMTP 连接成功但邮件不发送
- python - Keras 不接受目标标签,因为它的形状?
- java - web3J 与 infura 的兼容性
- jquery - 在推送器上接收事件但数据的值为空
- python - 类复制方法返回不正确的引用
- reactjs - 有没有办法链接 react-redux 和 react-router?