Ответ зависит от того, как процессор XSLT ищет класс расширения. Вам может понадобиться прочитать исходный код и / или запустить его через отладчик, чтобы выяснить это.
Например, если процессор XSLT использует загрузчик классов потока (TCCL), это обычно приводит к сбою, поскольку TCCL не определен в OSGi. Вы можете обойти это, явно установив TCCL на время вызова процессору XSLT, например ::1003*
ClassLoader orig = Thread.currentThread().getContextClassLoader();
Thread.currentThread().setContextClassLoader(MyClass.class.getClassLoader());
try {
// invoke XSLT processor
} finally {
Thread.currentThread.setContextClassLoader(orig);
}
, где MyClass
- это класс из вашего пакета и имеет видимость класса расширения.
В худшем случае процессор может искать расширение, используя собственный загрузчик классов, то есть с простым вызовом Class.forName()
. Лучшее, что можно сделать здесь, - побить разработчика библиотеки за то, что он так глуп. После того, как вы это сделаете, вы можете использовать фрагмент, чтобы присоединить класс расширения к комплекту процессоров ... это неприятный хак, но лучше, чем некоторые другие возможные неприятные хаки.