我已經瀏覽了類似問題的所有文章,但無法解決我的問題。我已經XSLT,如下圖所示:從XSLT調用Java函數給出「無法編譯樣式表」
XSLT:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:proxy="java:com.hp.gpp.pp.util.UrlUtils"
extension-element-prefixes="proxy">
<xsl:output method="xml" version="1.0" indent="yes" />
<xsl:param name="proxy" />
<xsl:variable name="baseurl"
select="/html/head/base/@href"/>
<!-- copy input to output -->
<xsl:template match='*|@*'>
<xsl:copy>
<xsl:apply-templates select='node()|@*' />
</xsl:copy>
</xsl:template>
<xsl:template match="*[@href]">
<xsl:copy>
<xsl:attribute name="href"><xsl:value-of
select="proxy:rewriteRelative($proxy,$baseurl,@href)" /></xsl:attribute>
<xsl:apply-templates select="node()|@*[name(.)!='href']" />
</xsl:copy>
</xsl:template>
<xsl:template match="*[@src]">
<xsl:copy>
<xsl:attribute name="src"><xsl:value-of
select="proxy:rewriteRelative($proxy,$baseurl,@src)" /></xsl:attribute>
<xsl:apply-templates select="node()|@*[name(.)!='src']" />
</xsl:copy>
</xsl:template>
<!-- rewrite <a href> -->
<xsl:template match="base">
</xsl:template>
</xsl:stylesheet>
和Java代碼:
XSLTemplateFactory templateFactory = new DefaultTemplateFactory();
Templates templates = templateFactory.getTemplatesFromURL(XSS_FILE_NAME);
Source xmlStrim = new StreamSource(reader);
Result oStream = new StreamResult(res.getWriter());
Transformer transformer = templates.newTransformer();
transformer.setParameter("proxy", new UrlUtils(req, res));
transformer.transform(xmlStrim, oStream);
不知何故,代碼工作在本地,而部署在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
你知道命名空間前綴'proxy'與模板參數'proxy'無關嗎?什麼是'UrlUtils'和'rewriteRelative'?這是一個本土的圖書館嗎? – Borodin