Загрузите мою собственную реализацию 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);
}