Ввод номера строки с последующим gg
приведет вас к этой строке.
Хорошо, это заняло довольно много времени, но ответ не так уж удивителен и даже не так сложен:
JAXB может Не удалось найти jaxb.index, потому что по умолчанию newInstance (String)
использует загрузчик классов текущего потока (как возвращено Thread.getContextClassLoader ()
). Это не работает внутри Felix, потому что пакеты OSGi и потоки фреймворка имеют отдельные загрузчики классов.
Решение состоит в том, чтобы получить откуда-то подходящий загрузчик классов и использовать newInstance (String, ClassLoader)
. У меня есть подходящий загрузчик классов из одного из классов в пакете, который содержит jaxb.index
, разумным выбором из соображений гибкости, вероятно, будет ObjectFactory
:
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.