gpt4 book ai didi

xslt - 从 XSLT 调用 Java 函数给出 "Could not compile stylesheet"

转载 作者:行者123 更新时间:2023-12-05 01:34:26 25 4
gpt4 key购买 nike

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

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

无法在此处找到问题。有人可以帮助我吗?

谢谢和问候,梨金

最佳答案

您需要删除 transformer.setParameter从您的 Java 调用和相应的 <xsl:param name="proxy" />来自 XSLT 的指令。

然后像这样给Java类绑定(bind)命名空间前缀

<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 - 从 XSLT 调用 Java 函数给出 "Could not compile stylesheet",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17218847/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com