我在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.