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

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

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

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

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

2 ответа

Решение

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

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

Я не пробовал это сам, но с учетом иерархии загрузки классов это должно работать. Вы можете узнать больше об иерархии загрузки классов здесь - 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);
}
Другие вопросы по тегам