两个依赖于不同Xalan实现的程序如何在同一个VM / System Classloader中共存?

时间:2011-03-27 07:14:18

标签: java xalan endorsed

我在几个flavors中问了这个问题,我想我不是在问正确的问题。我现在怀疑Xalan,因为它实现了Java认可的标准,在给定的VM / ClassLoader上只能有一个实现。

这是真的吗?在同一个System ClassLoader中,2个Xalan实现不能“直播”吗?或者,如果他们可以,如何

2 个答案:

答案 0 :(得分:1)

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

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

中添加一个文件

META-INF\services\名为

javax.xml.transform.TransformerFactory

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

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

注意:这里的好处是,当反对到常规类加载委托时,正在当前类加载器中搜索META-INF\services第一个,其中类正在父类中搜索,然后是系统,然后才在子类中查找

答案 1 :(得分:0)

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

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

我使用嵌入式应用程序剥离了大型应用程序中的所有特定xalan依赖项。作为FOP的库虽然以前假装需要一些特定的xalan jar,但没有它就运行得很好,它解决了很多类加载问题(java ee app server在打包xalan的某些情况下会出现问题)。