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

时间:2011-03-26 04:27:52

标签: java jar xerces classloader

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

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

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

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

2 个答案:

答案 0 :(得分:1)

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

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

我自己没有尝试过,但考虑到类加载层次结构,这应该有效。您可以在此处详细了解类加载层次结构 - http://onjava.com/pub/a/onjava/2005/01/26/classloading.html

答案 1 :(得分:0)

尝试做:

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