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

发布于 2024-10-26 22:42:49 字数 219 浏览 6 评论 0原文

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

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

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

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

I'm writing a plugin for a framework that loads my code as a child classloader

The problem is that that framework uses a certain Xerces version, that is not compatible with my code, I want to use my "own" jar for xerces, but it seems since the old one was already loaded, I can't seem to make my code use mine.

I'm looking for some classloader seperation, I know it's a know problem, but can't seem to solve it

Is there any framework, library, or code sample to user locally a newer jar in such a scenario?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

两相知 2024-11-02 22:42:49

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

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

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

Have you tried loading the classes of your framework and Xerces libs as a part of the ExtClassLoader by placing them in path corresponding to the java.ext.dirs system property? This way the framework's version of Xerces implementation will be loaded by the ExtClassLoader.

You can then place your version of Xerces implementation in the path corresponding to the java.class.path system property to be loaded by the AppClassLoader.

I have not tried this myself, but considering the class loading hierarchy this should work. You can learn more about the class loading hierarchy here - http://onjava.com/pub/a/onjava/2005/01/26/classloading.html

盗梦空间 2024-11-02 22:42:49

尝试做:

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

try doing:

ClassLoader oldContextClassLoader = Thread.currentThread().getContextClassLoader();
Thread.currentThread().setContextClassLoader(childClassLoader);
try{
    // do xml parsing
}finally{
    Thread.currentThread().setContextClassLoader(oldContextClassLoader);
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文