【问题标题】:Load my own Xalan implementation where an older Xalan is loaded to the parent classloader加载我自己的 Xalan 实现,其中将旧 Xalan 加载到父类加载器
【发布时间】:2011-07-23 08:40:22
【问题描述】:

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

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

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

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

【问题讨论】:

标签: java jar xerces classloader


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    尝试做:

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

    【讨论】:

    • 谢谢,我假设 childClassLoader 可以通过对它加载的类执行此操作来实现:getClass().getClassLoader(),对吗?会尝试回信...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-11
    • 1970-01-01
    • 2013-12-30
    • 1970-01-01
    相关资源
    最近更新 更多