当前位置: 首页 > 知识库问答 >
问题:

使用camel-saxon时XSLT编译失败

邓德厚
2023-03-14

我在我的项目中使用Fuse 6.1和camel 2.12版本,并面临以下问题。我试图将java.util.HashMap传递到我的xslt,并访问map以检索我的XSLT中的一堆值。为此,我构建了一个映射,并将其放在bean的头中,并访问它XSLT。我创建了一个测试用例来运行此路线,一切都运行良好,能够在XSLT中访问映射,XSLT正在编译良好,并生成预期的XML,如果我在类路径中net.sf.saxon/saxon/8.9.0.4,但如果我尝试在fuse 6.1中部署相同的路由,则会出现以下错误。后来我意识到,并在pom文件中用骆驼-撒克逊依赖替换net.sf.saxonjar文件,并且同一路线的测试用例失败了。问题是我如何使用骆驼-撒克逊功能使它运行。

这是我的路线

<route id="newCustomerMapToXmlTransformationRoute">
            <from uri="direct:newCustomerMapToXmlTransformation" />
            <to uri="customerIdGenerationProcessor" /> 
            <to uri="xslt:xslt/flatFileToCustomer.xsl?transformerFactory=tFactory&amp;failOnNullBody=false" />
            <removeHeader headerName="customerProfileMap" />
        </route>

XSLT: 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xd="http://www.oxygenxml.com/ns/doc/xsl"
    xmlns:Map="java.util.HashMap"  exclude-result-prefixes="Map" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.0">

<xsl:variable name="sourceName" select="Map:get($customerProfileMap,'aaaa')"/>
</xsl:stylesheet>

Getting following error: 
        at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197) 
[                          main] XsltErrorListener              ERROR Cannot find a matching 2-argument function named {java.util.HashMap}get(). Note that direct calls to Java methods are not available under Saxon-HE; 
net.sf.saxon.trans.XPathException: Cannot find a matching 2-argument function named {java.util.HashMap}get(). Note that direct calls to Java methods are not available under Saxon-HE

我花了很多时间来寻找解决方案,但什么都找不到。有谁能帮我解决这个问题吗?从fuse中卸载camel saxon功能并使用net有意义吗。旧金山。萨克森罐子?

共有2个答案

傅乐湛
2023-03-14

Fuse 6.1附带Saxon HE(9.5.1.21),这是一个免费库,对XSTL的支持有限。

您可以阅读其他版本的Saxon,需要支付$$$才能获得:http://saxon.sourceforge.net/

Saxon 8.9的旧版本可能有更多功能,他们在9中删除了这些功能。x,仅在付费$$$版本中提供。

相反,您可以先在Camel消息中设置这些头,然后从xslt文件中访问这些头,如本文所述,在将参数输入到xslt中以进行处理一节中

  • http://camel.apache.org/xslt
鄢雅畅
2023-03-14

从2009年8月发布的Saxon 9.2开始,该产品被重新包装;免费版本的Saxon-HE不支持对Java扩展函数的调用(因此出现了一条错误消息,完全解释了发生了什么)。支持此功能的最后一个开源版本是Saxon-B9.1,如果您愿意,当然欢迎您继续使用它。

重新打包的原因主要是商业上的:我们认为,如果我们能让更多的用户转向付费版本,我们只能继续投资开发开源版本,而这一策略被证明是成功的,这就是开源版本今天继续开发的原因。

 类似资料:
  • 在pom中。xml我使用spring-tx-4.1.4。释放。但是maven编译该项目时出现了一个错误: org.apache.maven.lifecycle.生命周期执行异常:无法执行目标org.apache.maven.plugins: maven-compiler-plugin: 2.3.2:编译(default-compile)项目事务:编译失败\p4_projects\交易\src\ma

  • 我正在使用Saxon的ANT任务将XSLT应用于XML。以下是我创建的蚂蚁目标: 当XSLT放在项目中的上述文件夹中时,它可以正常工作。但是现在,我需要将XSLT打包为jar的一部分,以便能够将代码分发给第三方客户端。我屏蔽了XSLT,但是现在无法引用它(即使在删除了之后)。在使用Saxon时,是否有不同的方法来引用作为jar一部分的XSLT?

  • 我们有一个用例,我们必须从Xlst模板调用实例方法。我们使用的是Saxon-He9.6版本。穿过了这个堆栈溢出的柱子。我们尝试用Java对象作为参数pssing XML transformer,然后更新模板以调用该实例方法。但它给出了javax.xml.Transform.TransformerConfigurationException。 如果我们可以使用Saxon HE从XSLT模板中调用实例

  • 我有一个用这个Saxon命令创建的编译样式表: java net。旧金山。撒克逊人。编译[选项]样式表输出[参数…] 现在,我想将这个样式表应用到我的Java代码中的XML树。是否可以使用JAXP应用编程接口来实现这一点,如果可以,具体如何实现?在此之前,非常感谢您的任何帮助。

  • 问题内容: 我想对多个输出文件进行XSLT转换。我在那里使用了“ xsl:result-document”。转换失败时,应删除所有输出文件。但是,如果“ xsl:result-document”创建的文档生成失败,则我的程序无法再删除该文档。我认为原因是“ xsl:result- document”创建了一个不同的OutputStream。有谁知道如何关闭所有输出流? 编辑:我使用Saxon 9.

  • 当我运行我的xsl样式表时,我需要知道是否存在一些文件。因为xslt没有本地方法来测试文件是否存在(ASFAIK),所以我想用javascript来做这件事。通常我使用saxon 9 HE,但是一些同事告诉我HE版本不支持javascript函数。有没有一种方法可以用saxon 9 HE执行java脚本函数? 我尝试过这个例子:如何在xslt中包含javaScript文件,但oxygen给了我一个