尽管在带有 Camel 2.16.5 的 ServiceMix 6.1.4 中使用 "saxon=true",但仍然出现 xalan 错误消息

xalan error messages despite using "saxon=true" in ServiceMix 6.1.4 with Camel 2.16.5

我正在尝试使用 Apache ServiceMix 6.1.4 中的蓝图路由来执行 XSLT 2.0。 camel-saxon 特性已经安装并处于活动状态。 xslt 文件像这样嵌入到蓝图中:

<toD uri="xslt:path_to_xsl?saxon=true"/>

蓝图路由部署没有任何问题,但是一旦交换主体到达 xsl 组件,我就会收到 xalan 错误。 Xalan 显然抱怨无效的 xsl(因为它无法解析 xslt 2.0)。但是当我明确告诉组件使用 saxon 时,为什么使用 xalan?我缺少什么以及如何让 xslt 组件与 saxon 和 xslt 2.0 一起工作?

我缩小了问题范围。在我们的设置中,xsl 文件位于 Web 服务器上,这意味着 path_to_xsl 实际上是 http-address。解析蓝图文件时,参数 ?saxon=true 实际上被解释为 http-url 的一部分,而不是 xslt 组件的 uri-parameter。如果我使用本地文件路径而不是网络 url 撒克逊组件工作正常。所以实际上问题出在 org.apache.camel.component.xslt.XsltComponent 及其 org.apache.camel.util.ResourceHelper 中的 uri 解析算法中。那里的参数被添加到 http uri,然后被清除,因此它们永远不会显示为端点的 uri 参数。