Here's the way to solve the problem for Karaf 4.2, hopefully I can merge it
before the release is done:
  https://github.com/apache/karaf/pull/481

For 4.1, the distribution should already work.

The OSGi 133 (Service Loader) and 702 (XML Parser) are clearly not
sufficient when working with libraries that have not been built solely for
OSGi and which use the standard way to use the XML apis.

Fwiw, the openjdk code contains code specific to glassfish osgi
environment, in a similar way than the above PR.


2018-03-27 16:57 GMT+02:00 Nicolas Brasey <nicolas.bra...@gmail.com>:

> 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
>>>
>>>
>


-- 
------------------------
Guillaume Nodet

Reply via email to