从XSLT调用Java函数会得到;无法编译样式表";

从XSLT调用Java函数会得到;无法编译样式表";,xslt,Xslt,我已经浏览了所有类似问题的帖子,但无法解决我的问题。我创建了XSLT,如下所示: XSLT: 不知何故,代码在本地工作,但在Jboss上部署时提供: ERROR: 'The first argument to the non-static Java function 'rewriteRelative' is not a valid object reference.' FATAL ERROR: 'Could not compile stylesheet' com.hp.gpp.pp.exce

我已经浏览了所有类似问题的帖子,但无法解决我的问题。我创建了XSLT,如下所示:

XSLT:

不知何故,代码在本地工作,但在Jboss上部署时提供:

ERROR:  'The first argument to the non-static Java function 'rewriteRelative' is not a valid object reference.'
FATAL ERROR:  'Could not compile stylesheet'
com.hp.gpp.pp.exception.ProxyPortletException: error.transformer : Could not compile stylesheet
在这里找不到问题。有人能帮我吗

谢谢和问候,
Rikin

您需要从Java中删除
transformer.setParameter
调用,并从XSLT中删除相应的
指令

然后将名称空间前缀绑定到Java类,如下所示

<xsl:script implements-prefix="proxy" language="java" src="java:com.hp.gpp.pp.util.UrlUtils"/>

然后你就可以写了

<xsl:attribute name="href">
  <xsl:value-of select="proxy:rewriteRelative($baseurl, @href)" />
</xsl:attribute>


我假设
rewriteRelative
只需要两个参数:基本URL和相对URL?我不清楚前面的第一个参数
$proxy
的用途,但我猜它不属于这里。

我在尝试使用XSLT 2.0“样式表”进行转换时遇到这个错误,但我使用的是XSLT 1.0解析器


我不确定这是否适用于你的错误。出于这个原因,我在stackoverflow中发布了一个单独的Q&a:

您是否意识到名称空间前缀
proxy
与模板参数
proxy
无关,对吗?什么是
UrlUtils
rewriteRelative
?是土生土长的图书馆吗?谢谢你的回复。这里有几个问题:1>您可以看到UrlUtils类需要请求和响应对象来创建对象。这些对象用于重写HREF URL。我将如何传递这些对象?2> 转换器将如何调用UrlUtils的方法,因为这些方法不是静态的-无法使它们保持静态。这就是为什么rewriteRelative有第三个参数$proxy,它被设置为Transformer的参数。这是错误的方法还是什么?
<xsl:script implements-prefix="proxy" language="java" src="java:com.hp.gpp.pp.util.UrlUtils"/>
<xsl:attribute name="href">
  <xsl:value-of select="proxy:rewriteRelative($baseurl, @href)" />
</xsl:attribute>