0

我以多种方式问了这个问题,但我认为我问的问题不正确。我现在怀疑 Xalan,因为它正在实现 Java 认可的标准,所以在给定的 VM / ClassLoader 上只能有一个实现。

这是真的吗?不能在同一个系统类加载器中“生活”2 个 Xalan 实现吗?或者如果他们可以,如何

4

2 回答 2

1

这似乎是一个令人惊讶的答案:

对于每个 Xalan 实现,使用单独的类加载器,并在

META-INF\services\

javax.xml.transform.TransformerFactory

编辑它并将其作为类加载器将使用的 Xalan 实现的唯一内容,例如:

com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl

注意:这里的好处是,与常规类加载委托相反,首先META-INF\services当前类加载器中搜索类,然后在父类中搜索类,然后在系统中搜索,然后才在子类加载器中搜索

于 2011-03-27T08:39:56.247 回答
0

jdk 中包含一些 xalan 版本。对于大多数用法,我个人的经验是使用这个版本就足够了。即使它可能是以前的版本,现在有没有新的 xalan 开发?我更喜欢使用包含的、经过严格测试的版本。

我不认为必须在同一个 jdk 中使用 xsl 转换器是一个好主意(即使我猜它可以做到)。如果你真的需要使用 xalan 的一些更新版本,而不是 jdk 版本,你可以参考这个常见问题:http: //xml.apache.org/xalan-j/faq.html#faq-N100EF

我剥离了大型应用程序中所有特定的 xalan 依赖项,只使用嵌入式的。作为 FOP 的库,虽然他们以前假装需要一些特定的 xalan jar,但没有它也可以正常运行,并且它解决了很多类加载问题(java ee 应用程序服务器在某些情况下打包 xalan 时会出现问题)。

于 2011-03-27T07:50:15.347 回答