我在几个flavors问这个问题,我想我没有问正确的问题。我现在怀疑Xalan,因为它实现了Java认可的标准,所以只能在给定的VM/ClassLoader上实现一个实现。两个程序如何根据不同的Xalan实现共存于同一个VM/System Classloader中?
这是真的吗?在同一个System ClassLoader中不能有2个Xalan实现?或者如果他们可以,如何?
我在几个flavors问这个问题,我想我没有问正确的问题。我现在怀疑Xalan,因为它实现了Java认可的标准,所以只能在给定的VM/ClassLoader上实现一个实现。两个程序如何根据不同的Xalan实现共存于同一个VM/System Classloader中?
这是真的吗?在同一个System ClassLoader中不能有2个Xalan实现?或者如果他们可以,如何?
这似乎是惊人的答案:
对于每个Xalan的实现中使用一个单独的类加载器,并在
META-INF\services\
称为
javax.xml.transform.TransformerFactory
编辑它添加一个文件,并把它的唯一内容类装载器将使用的Xalan实现,例如:
com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl
注:这里的好处是,作为反对到正规的类加载代表团META-INF\services
正在搜索在当前的类加载器第一,在那里为类是在父,那么系统搜索,和只有那么在孩子classloder
jdk中包含一些xalan版本。对于大多数用法,我个人的经验是使用这个版本就足够了。即使它可能是以前的版本,现在有没有新的xalan开发?我更喜欢使用包含的,经过严格测试的版本。
我不认为必须在同一个jdk中使用xsl变换器是一个好主意(即使我猜测它可以完成)。如果你确实需要使用Xalan的一些更新的版本,而不是JDK一个,你可以引荐本篇FAQ:http://xml.apache.org/xalan-j/faq.html#faq-N100EF
我全部剥离特定的Xalan依赖于大的应用程序,只使用嵌入式之一。作为FOP的库,虽然他们以前假装需要一些特定的xalan jar,但没有它就运行得很好,并且它解决了很多类加载问题(java ee app server在某些情况下在xalan打包时给出问题)。
我有XSLs只适用于旧的Xalan由于我不推荐使用的API,并且因为它们已经安装在客户端我甚至不能修复它们。但是使用旧的Xalan,一些新的iText功能不起作用...所以我的解决方案将其作为单独的JVM进程完全运行 – 2011-05-06 04:39:31
另请参阅:http://stackoverflow.com/questions/5447633/how-to-prevent -xalan-JAR-说,有-META-INF服务 - 使用javax-XML变换变换 – 2011-03-27 09:06:37