- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我们的项目中,我们目前已迁移到 Java 8,并且现在希望使用内部 XML 库而不是其他库。为此,我们删除了例如我们的 xalan.jar 来 self 们的类路径。
这会在尝试渲染 XML 文件时导致 ClassNotFoundExceptions。在 XSL 样式表中,我们用来转换 XML 文件,我们还调用外部 Java 方法,如下例所示:
<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">
...
<xsl:template name="example">
<fo:block>
<xsl:value-of select="java:my.package.name.JavaClass.testMethod('test')"/>
</fo:block>
</xsl:template>
...
但是,总是当外部方法 testMethod()
如果应该调用,则进程会因 ClassNotFoundException 而停止。我调试了com.sun.org.apache.xalan.internal.xsltc.compiler.FunctionCall
中的代码类并发现 XSLTC 尝试实例化 my.package.name.JavaClass
以便调用 testMethod()
。这没关系。但是...
尝试在以下代码 com.sun.org.apache.xalan.internal.utils.ObjectFactory
中实例化/加载该类:
/**
* Find a Class using the same class loader for the ObjectFactory by default
* or boot class loader when Security Manager is in place
*/
public static Class<?> findProviderClass(String className, boolean doFallback)
throws ClassNotFoundException, ConfigurationError
{
return findProviderClass (className,
findClassLoader (), doFallback);
}
进一步调用findClassLoader()
获得正确的类加载器来加载我的 JavaClass
:
/**
* Figure out which ClassLoader to use. For JDK 1.2 and later use
* the context ClassLoader.
*/
public static ClassLoader findClassLoader()
{
if (System.getSecurityManager()!=null) {
//this will ensure bootclassloader is used
return null;
}
// Figure out which ClassLoader to use for loading the provider
// class. If there is a Context ClassLoader then use it.
ClassLoader context = SecuritySupport.getContextClassLoader();
ClassLoader system = SecuritySupport.getSystemClassLoader();
ClassLoader chain = system;
while (true) {
if (context == chain) {
...loop to get correct class loader
}
现在,在我们的项目中,我们遇到了一个“问题”,即我们有一个 SecurityManager 实现,这意味着上面的实现只返回 null
而不是上下文类加载器。
顺便说一句:我还希望在这里获得上下文类加载器,但是如果 SecurityManager 允许加载类,稍后会进行额外的检查,为什么它在这里只返回 null?
这再次意味着我的类尝试使用引导类加载器加载,但引导类加载器不知道我的类,因此会引发异常。删除 SecurityManager 返回上下文类加载器,它能够加载我的类并且可以成功转换 XML。
那么 - 如果您还在这里 sleep - 有没有办法仍然能够在 XSL 样式表中使用我的外部 Java 方法?在这种情况下有办法加载我的类吗?我考虑了以下可能的解决方案,但它们都不能真正令我满意:
按以下方式使用反射在 XSL 中创建 JavaClass 的实例:
但是,最后一种方法也不起作用,因为该类也是通过 AppClassLoader 加载的,并且在解析过程中可能也不可用。但也许有类似的解决方案?
提前致谢。
最诚挚的问候,延斯
最佳答案
类似这样的工作:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fo="http://www.w3.org/1999/XSL/Format"
xmlns:myHelper="http://xml.apache.org/xalan/java/my.package.name.JavaClass">
...
<xsl:template name="example">
<fo:block>
<xsl:value-of select="myHelper:testMethod('test')"/>
</fo:block>
</xsl:template>
如何在样式表声明中指定命名空间(在本例中为 myHelper)取决于您用来处理 XSL 的内容,上面的示例适用于 Xalan。
关于xslt - 使用 JDK 内部 Xalan 和 SecurityManager 从 XSL 样式表内部加载外部 Java 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29171010/
我正在为框架编写一个插件,它将我的代码作为子类加载器加载 问题是该框架使用某个 Xerces 版本,与我的代码不兼容,我想使用我的“自己的”jar for xerces,但似乎由于旧版本已经加载,我不
我正在运行一个从 https://svn.wso2.org/repos/wso2/people/suresh/saml2/sso-demo/src-dist 下载的 Maven 项目问题是,它可以在另
考虑这段代码(完全基于飞碟的“入门”代码,保留他们的权利): package flyingsaucerpdf; import java.io.File; import java.io.FileOutp
我正在尝试使用 xalan XPathAPI 解析 xhtml 文件。我被以下要求困住了。这是 xhtml 的片段
我有一个 Java 程序(目前在 JDK 1.5 中运行),它在使用 Xalan 处理 XSLT 样式表时出现奇怪的异常。我不是在寻找如何解决异常:网上有很多关于这个的信息。我只想知道如何在我的代码中
我正在寻找一种方法,使 xalan 在 .xml 到 .fo 转换中生成的章节编号中不包含某些字母。我正在使用 org.apache.xalan.xsltc.trax.TransformerFacto
我正在使用 xalan 2.7.1 通过 xslt 样式表验证我的 xml 文档。它适用于第一个文档,并在出现错误时返回错误消息以及 xml 源的正确行号和列号,方法是使用 NodeInfo.line
我的xsl文件
我有一个 JSP,它将 XSL 附加到从数据库中提取的 XML 文档。该应用程序正在使用 Saxon 解析器,但我的 XML 需要使用 Xalan 解析器。 JSP 页面可以覆盖要使用的解析器吗? 最
我正在尝试编译一个示例 Visual C++ 2008 项目来测试 Xalan-C++ 库。当我尝试编译该项目时,它给出了一条错误消息“xalan-c_1_11d.dll is missing”。当我
我正在使用 Xalan-C++ 进行 XSLT 转换,但我在这段代码中遇到了段错误: XalanTransformer evalTransformer; evalTransformer.setUseV
我有以下代码: final TransformerFactory factory = TransformerFactory.newInstance(); factory.setAttribute(XM
我的项目有一个报告模块,它以 XML 的形式从数据库中收集数据,并在其上运行 XSLT 以生成用户所需格式的报告。此时的选项是 HTML 和 CSV。 我们使用 Java 和 Xalan 与数据进行所
本文整理了Java中org.apache.xalan.extensions.XSLProcessorContext类的一些代码示例,展示了XSLProcessorContext类的具体用法。这些代码示
我有一个应用程序,我使用 Xalan 作为 XSLT 处理器。我现在想使用撒克逊语。我想确保所有现有的转换仍然有效。因此我想对所有现有的 XML 文件使用 Xalan。对于新的 XML 文件,我想使用
我在 eclipse 插件中使用 xalan 时遇到问题。 当我尝试通过以下方式创建工厂实例时: TransformerFactory tFactory = TransformerFactory.ne
我有以下基于 Xalan 的 XSLT: TransformerFactory factory = TransformerFactory.newInstance(); XalanErrorListen
我们继承了一个应用程序(基于 Java,在 WebLogic 10.3.5 上运行),该应用程序广泛使用 JSTL XML 标记,特别是 XPath 选择器。由于这些标记的实现以及 DTMManage
我在 editing an XML file in a stream 上实现此问题的解决方案时遇到问题。我收到 MalFormedUrlException:无协议(protocol)。 XML 文件编
在我看来,JDK 6(和 7)附带的 Xalan 版本不处理输入文件中的注释,如 ... 所指定的那样。 给定以下输入文件,dangling.xml A bar where I dr
我是一名优秀的程序员,十分优秀!