【问题标题】:xalan error messages despite using "saxon=true" in ServiceMix 6.1.4 with Camel 2.16.5尽管在 ServiceMix 6.1.4 和 Camel 2.16.5 中使用了“saxon=true”,但 xalan 错误消息
【发布时间】:2018-08-18 02:34:07
【问题描述】:

我正在尝试使用 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)。但是,当我明确告诉组件使用撒克逊语时,为什么要使用 xalan?我缺少什么以及如何让 xslt 组件与 saxon 和 xslt 2.0 一起使用?

【问题讨论】:

  • 尝试使用更新版本的 ServiceMix / Karaf / 以及 OSGi 之外的版本。也尝试重新启动 ServiceMix,它可能是关于类加载问题,或刷新包等。
  • 您可能还想尝试添加transformerFactoryClass=net.sf.saxon.TransformationFactory 而不是saxon=true
  • 我已经尝试了所有这些。重新启动无济于事,刷新捆绑包和清除缓存也无济于事。 ServiceMix 7.0.x 和 7.1.x 的行为方式相同。添加transformerFactoryClass=net.sf.saxon.TransformationFactory 而不是saxon=true 也无济于事。
  • 也没有关于 xslt 没有找到 saxon 的错误消息。似乎只是忽略了使用它的选项。
  • 不知道这是否相关,但您是否尝试过使用.to() 而不是.toD()?鉴于您只有一个样式表,您问题中的端点是静态的,因此您不需要 .toD()

标签: apache-camel xslt-2.0 saxon apache-servicemix


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2019-02-07
    • 2014-08-29
    • 2016-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-17
    • 2012-07-11
    • 2012-06-28
    相关资源
    最近更新 更多