Hi Kerry,

Yes it executes in another thread (jetty http executor thread pool), so the
context is different.

The code actually fails quite deep in the abyss of the java service loader:


Caused by: java.util.ServiceConfigurationError:
javax.xml.parsers.DocumentBuilderFactory: Provider
org.apache.xerces.jaxp.DocumentBuilderFactoryImpl not found
at java.util.ServiceLoader.fail(ServiceLoader.java:239) ~[?:?]


I should switch the current thread classloader to use the classloader of
the class java.util.ServiceLoader?

Thanks!!
Nicolas



On Tue, Mar 27, 2018 at 3:38 PM, Kerry <karaf-u...@avionicengineers.com>
wrote:

> Hazarding a guess at this but when it fails when called by the camel route
> it will be executing on a different thread when then when executed by karaf
> command. You could try and confirm this by surrounding the code that is
> failing with a thread context switch so that it switches to the context of
> the class that has the failing code.
>
> Kerry
>
> Sent from BlueMail <http://www.bluemail.me/r?b=12512>
> On 27 Mar 2018, at 14:17, Nicolas Brasey <nicolas.bra...@gmail.com> wrote:
>>
>> Hi,
>>
>> I'm feeling frustrated because like everytime I'm adventuring with XML in
>> an OSGi context, I end up with classloading issues, and this time is no
>> exception :-) So I would like to know what/how you guys are doing it...
>>
>> My use case is extremely simple, yet I can't figure out what I'm doing
>> wrong. I need to use an XML parser to get a Document object from an XML
>> file. This XML parsing code is embedded inside a service (DS). The weird
>> thing is that If I invoke this service with a karaf command, then it works
>> fine. If the same code is invoked through a REST endpoint (another bundle),
>> then I get the following class not found:
>>
>> Caused by: java.util.ServiceConfigurationError: 
>> javax.xml.parsers.DocumentBuilderFactory:
>> Provider org.apache.xerces.jaxp.DocumentBuilderFactoryImpl not found
>> at java.util.ServiceLoader.fail(ServiceLoader.java:239) ~[?:?]
>> at java.util.ServiceLoader.access$300(ServiceLoader.java:185) ~[?:?]
>> at java.util.ServiceLoader$LazyIterator.nextService(ServiceLoader.java:372)
>> ~[?:?]
>>
>>
>> AFAIK, Karaf is pulling the servicemix implementation of Xerces, and I
>> doubled check that the package is available in karaf:
>>
>>
>> dms@root>exports | grep org.apache.xerces.jaxp
>> org.apache.xerces.jaxp.datatype
>>                               │ 2.11.0                             │ 348 │
>> org.apache.servicemix.bundles.xerces
>> org.apache.xerces.jaxp.validation
>>                               │ 2.11.0                             │ 348 │
>> org.apache.servicemix.bundles.xerces
>> org.apache.xerces.jaxp
>>                              │ 2.11.0                             │ 348 │
>> org.apache.servicemix.bundles.xerces
>>
>>
>>
>> So, I don't know what I'm doing wrong here.
>>
>> Any clue ?
>>
>>
>> Thanks,
>> Nicolas
>>
>>

Reply via email to