如何使用Xalan处理器调用外部java函数

时间:2013-08-19 21:04:25

标签: java xslt namespaces xalan

我在使用Xalan处理器的XSL代码中调用外部java函数时遇到了麻烦。

我得到的错误是:

Exception in thread "main" java.lang.RuntimeException: java.lang.NoSuchMethodException: For extension function, could not find method org.apache.xml.utils.NodeVector.incrementPropertyId([ExpressionContext,] ).

我在执行编译命令的文件夹中有一个名为Util.java的java类。

在我的xsl文件中,我已将我的命名空间声明为:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                          xmlns:java="http://xml.apache.org/xslt/java" exclude-result-prefixes="java"
                          xmlns:util="xalan://Util">

我使用以下方式调用我的函数:

<xsl:copy-of select="util:incrementPropertyId(blablabal)"/>

所以我想我的问题来自我的命名空间,但它有什么问题?

此外,它是一个xsl 1.0样式表。

感谢您的帮助

编辑:

在我的Util.java文件中,我没有声明包,因为我在根...我应该添加一个包Util;对我班级的定义?

2 个答案:

答案 0 :(得分:0)

可能你的问题是你在调用方法时没有提到名称空间 尝试:

<xsl:copy-of select="util:incrementPropertyId()"/>    

答案 1 :(得分:0)

在extension-element-prefix中定义您的名称空间util,并为该命名空间分配包和类的名称:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                      xmlns:java="http://xml.apache.org/xslt/java" exclude-result-prefixes="java"
                      extension-element-prefix="util"
                      xmlns:util="your.package.YourClass">