XSL 转换无法调用用户定义的 Java 方法
我有以下 XSL,它为我的 Java 类定义了命名空间。简而言之,我试图根据 XML 文件中的值指向不同的资源包(我知道资源包确实用于国际化,但为什么要重新创建轮子?):
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fo="http://www.w3.org/1999/XSL/Format"
xmlns:java="http://xml.apache.org/xalan/java"
xmlns:pf="my.package.common.PropertiesFinder">
<xsl:variable name="compType" select="//comp_type"/>
<xsl:variable name="props" select="pf:getPropsFile($compType)"/>
<xsl:variable name="DEF6Resources" select="java:util.ResourceBundle.getBundle($props)"/>
当转换运行时,我收到以下错误:
java.lang.NoSuchMethodException:对于扩展函数,找不到方法 org.apache.xml.utils.NodeVector.getProps([ExpressionContext,])
任何人都可以解释为什么会发生这种情况。这显然与我的类路径/加载器有关,但我不知道该怎么做......
提前非常感谢。
安娜
I have the following XSL which defines a namespace for my Java Class. In a nutshell I'm trying to point to a different resource bundle depending upon a value in my XML file (I know Resource Bundles are really for internationalization but why re-create the wheel?):
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fo="http://www.w3.org/1999/XSL/Format"
xmlns:java="http://xml.apache.org/xalan/java"
xmlns:pf="my.package.common.PropertiesFinder">
<xsl:variable name="compType" select="//comp_type"/>
<xsl:variable name="props" select="pf:getPropsFile($compType)"/>
<xsl:variable name="DEF6Resources" select="java:util.ResourceBundle.getBundle($props)"/>
When the transform runs I get the following error:
java.lang.NoSuchMethodException: For extension function, could not find method org.apache.xml.utils.NodeVector.getProps([ExpressionContext,])
Can anyone shed any light on why this is happening please. It's clearly something to do with my classpath/loader but I'm not sure what to do...
Many thanks in advance.
Anna
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您必须检查您的名称空间定义。
当您为 Java 类定义命名空间时,必须在其前面添加
java:
前缀。此外,调用的方法 (
getPropsFile
) 必须声明为static
。而且,我认为在这段代码中:
您缺少 java 根包:(
我不确定最后一个,也许 Xalan 解析器在某些情况下会在前面添加它?)
You have to check your namespace definition.
When you are defining a namespace for a Java class, you have to prepend it with the
java:
prefix.Also, the method invoked (
getPropsFile
) must be declared asstatic
.And, I think that at this block of code:
You are missing the java root package:
(I'm not sure of this last, maybe the Xalan parser prepends it for some cases?)
遇到同样的问题。
最后我发现 Xalan 无法加载带有静态块或静态变量或类似内容的类。
也许
PropertiesFinder
或ResourceBundle
在内部使用静态块。该错误消息确实具有误导性......
Got same problem.
Finally I found that Xalan is unable to load classes with static blocks or static variables, or something like that.
Maybe
PropertiesFinder
orResourceBundle
use static blocks internally.The error message was really misleading...