Вызов функции Java через XSLT в JBoss вызывает исключение преобразователя (работает в tomcat)

У меня есть открытая статическая функция аргумента 0 в Java, которую я пытаюсь вызвать через 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 (который используется в некоторых частях этого веб-приложения) может иметь проблемы с совместимостью с такими вещами. Есть ли способ сказать, что он использует / заставить его использовать другой? Извиняюсь, если я пропустил некоторую важную информацию здесь, это не моя область знаний - дайте мне знать, если нужна какая-то другая информация.

редактировать: чтобы показать, как это используется, вот код

<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;
}

2 ответа

Кажется, что вам нужно использовать "xalan://" вместо "java:" для объявления пространства имен java, поэтому

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

в этом случае. Я не уверен, почему это сработало на Tomcat, а не на JBoss, но, возможно, они подбирали разные версии ксаланской банки.

Вы правы в том, что при обращении к Java существуют различия между Xalan и Saxon; На первый взгляд мне кажется, что ваша таблица стилей предназначена для работы с Saxon, но на самом деле она работает под управлением Xalan. Вы можете узнать, какой продукт на самом деле используется, вызвав системное свойство ('xsl:vendor') из любого выражения XPath.

Другие вопросы по тегам