Почему не может JAXB находить мой jaxb.index при выполнении в Apache Felix?

Ввод номера строки с последующим gg приведет вас к этой строке.

52
задан Community 23 May 2017 в 02:32
поделиться

2 ответа

Хорошо, это заняло довольно много времени, но ответ не так уж удивителен и даже не так сложен:

JAXB может Не удалось найти jaxb.index, потому что по умолчанию newInstance (String) использует загрузчик классов текущего потока (как возвращено Thread.getContextClassLoader () ). Это не работает внутри Felix, потому что пакеты OSGi и потоки фреймворка имеют отдельные загрузчики классов.

Решение состоит в том, чтобы получить откуда-то подходящий загрузчик классов и использовать newInstance (String, ClassLoader) . У меня есть подходящий загрузчик классов из одного из классов в пакете, который содержит jaxb.index , разумным выбором из соображений гибкости, вероятно, будет ObjectFactory :

60
ответ дан 7 November 2019 в 09:30
поделиться

Edit 2:

I once had similar strange class loading problem in my application. If I run it as a normal application, everything was OK but when I invoked it as a Windows Service, it started to fail with ClassNotFoundExceptions. The analysis showed that the threads have their classloaders as null somehow. I solved the problem by setting the SystemClassLoader on the threads:

// ...
thread.setContextClassLoader(ClassLoader.getSystemClassLoader());
thread.start();
// ...

Don't know if your container allows this kind of change though.

0
ответ дан 7 November 2019 в 09:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: