Загрузите мою собственную реализацию Xalan, где более старый Xalan загружается в родительский загрузчик классов - PullRequest
0 голосов
/ 26 марта 2011

Я пишу плагин для платформы, которая загружает мой код как дочерний загрузчик классов

Проблема в том, что эта среда использует определенную версию Xerces, которая не совместима с моим кодом, я хочу использоватьмой "собственный" jar для xerces, но, кажется, поскольку старый уже загружен, я не могу заставить свой код использовать мой.

Я ищу разделение загрузчиков классов, знаю, что это известная проблема, но, похоже, не могу ее решить

Существует ли какая-либо инфраструктура, библиотека или пример кода для локального использования пользователемБаночка новее по такому сценарию?

Ответы [ 2 ]

1 голос
/ 05 октября 2011

Вы пытались загрузить классы вашей платформы и библиотек Xerces как часть ExtClassLoader, поместив их в путь, соответствующий системному свойству java.ext.dirs?Таким образом, версия фреймворка реализации Xerces будет загружена ExtClassLoader.

Затем вы можете поместить свою версию реализации Xerces в путь, соответствующий системному свойству java.class.path, который будет загружен AppClassLoader.

Я сам не пробовал, но с учетом иерархии загрузки классов это должно работать.Вы можете узнать больше об иерархии загрузки классов здесь - http://onjava.com/pub/a/onjava/2005/01/26/classloading.html

0 голосов
/ 26 марта 2011

попробуйте сделать:

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