【问题标题】:How to call an external java function with Xalan processor如何使用 Xalan 处理器调用外部 java 函数
【发布时间】:2013-08-21 19:10:13
【问题描述】:

我在使用 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;给我的班级定义?

【问题讨论】:

  • 我在使用最新的 Xalan (2.7) 时遇到了完全相同的问题...是否以某种方式解决了?
  • @lazertyuiopl 不,发现使用 Xalan 是不可能的。

标签: java xslt namespaces xalan


【解决方案1】:

在 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">

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 对不起,我的错误,我提到了一个命名空间,只是在提问时忘记输入。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-02
    • 2013-12-06
    • 2011-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-13
    相关资源
    最近更新 更多