编程语言
首页 > 编程语言> > 在JBoss中通过XSLT调用Java函数会引发转换器异常(在tomcat中有效)

在JBoss中通过XSLT调用Java函数会引发转换器异常(在tomcat中有效)

作者:互联网

我在Java中有一个公共静态0参数函数,试图通过Webapp中的XSLT调用它.当我在tomcat(5.5.34)中运行它时,它工作正常,但是当我在JBoss(6.1 final)中运行它时,我得到了错误

TransformerException: Instance method call to method getScoreXMLTagClass requires an
Object instance as first argument

我想知道JBoss是否使用其他XSLT解析器-我相信我想使用Xalan,而且我听说Saxon(在此Web应用程序的某些部分中使用)可能与此类产品存在兼容性问题.有没有办法知道它在使用/强迫它使用另一个?抱歉,如果我在这里错过了一些重要信息,这不是我的专业领域-让我知道是否需要其他信息.

编辑:
为了说明如何使用它,下面是代码

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
...
xmlns:resources="java:com.example.MyResources"
<xmlns:rclass="java:com.example.MyClass">
    <xsl:template name="scoreString">
    <xsl:param name="string" />
    <xsl:value-of select="resources:getString(rclass:getData(),$string,null)"/>
</xsl:template>

<xsl:template match="/">
<xsl:if test="normalize-space(.)">
<div>
<xsl:for-each select="s:scores/s:score">
<xsl:for-each select="s:net">
<dl>
<dt>
    <xsl:call-template name="scoreString">
    <xsl:with-param name="string">network</xsl:with-param>
        </xsl:call-template>
    <xsl:value-of select="@id"/>
</dt>
...

我已经简化了类名以简化它.等效错误将是

TransformerException: Instance method call to method getData requires an
Object instance as first argument

编辑2

方法是

public static final Class getData()
{
    return MyClass.class;
}

解决方法:

似乎需要使用’xalan://’而不是’java:’来声明Java名称空间,因此

<xmlns:rclass="xalan://com.example.MyClass">

在这种情况下.我不确定为什么它可以在tomcat而不是JBoss上运行,但是他们可能会选择不同版本的Xalan jar.

标签:saxon,jboss,xalan,xslt,java
来源: https://codeday.me/bug/20191101/1984657.html