加载我自己的Xalan实现,其中旧的Xalan被加载到父类加载器

我正在为一个框架编写一个插件,它将我的代码加载为子类加载器

问题是该框架使用某个Xerces版本,与我的代码不兼容,我想使用我自己的“jar”用于xerces,但似乎既然旧的已经加载了,我似乎无法制作我的代码使用我的。

我正在寻找一些类加载器分离,我知道这是一个已知的问题,但似乎无法解决它

在这种情况下,是否有任何框架,库或代码示例在本地用户使用较新的jar?

您是否尝试将框架和Xerces库的类作为ExtClassLoader的一部分加载到对应于java.ext.dirs系统属性的路径中? 这样,ExtClassLoader将加载框架的Xerces实现版本。

然后,您可以将Xerces实现的版本放在与要由AppClassLoader加载的java.class.path系统属性相对应的路径中。

我自己没有尝试过,但考虑到类加载层次结构,这应该可行。 您可以在此处了解有关类加载层次结构的更多信息 – http://onjava.com/pub/a/onjava/2005/01/26/classloading.html

尝试做:

ClassLoader oldContextClassLoader = Thread.currentThread().getContextClassLoader(); Thread.currentThread().setContextClassLoader(childClassLoader); try{ // do xml parsing }finally{ Thread.currentThread().setContextClassLoader(oldContextClassLoader); }