You're right, I think the current setup on 4.1 is not optimal and a bit too
sensitive to the thread context class loader.
Can you simply remove the xalan and xerces jars from the lib/endorsed
folder and the corresponding export packages in etc/config.properties ?
If you want to use xalan and xerces, deploy them as bundles instead.

Also, please raise a JIRA so that we can fix that.

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

> Yes that was also my understanding and this is what I'm doing. Like I said
> before, it works well from the karaf command but not when the call is
> initiated from somewhere else.
>
>
>
> On Tue, Mar 27, 2018 at 6:21 PM, Guillaume Nodet <gno...@apache.org>
> wrote:
>
>> In Karaf, we ensure that you can use DocumentBuilderFactory#newInst
>> ance().
>> That's the standard java api to create a Parser and it works well in
>> Karaf.
>>
>> 2018-03-27 18:11 GMT+02:00 Nicolas Brasey <nicolas.bra...@gmail.com>:
>>
>>> Hi Guillaume,
>>>
>>> Thanks for those infos. I'm running Karaf 4.1.2.  So I tried to lookup
>>> a DocumentBuilderFactory service but no one are availably in standard in
>>> this karaf version.
>>>
>>> What do you exactly mean by "it should already work" ? If it can help, I
>>> actually based my implementation on the example I found in Karaf, in the
>>> Kar service implementation, the class FeatureDetector. It is parsing an XML
>>> feature file, which is exactly what I'm trying to do as well. My
>>> implementation is 1 to 1.
>>>
>>> So the code seems perfectly working when a karaf command is calling it,
>>> but badly failing when coming from a jetty thread (REST endpoint).
>>>
>>> I would be happy to get away with a nasty workaround, I'm not looking by
>>> a by-the-book implementation :-)
>>>
>>> Thanks again!
>>> Nicolas
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>> On Tue, Mar 27, 2018 at 5:02 PM, Guillaume Nodet <gno...@apache.org>
>>> wrote:
>>>
>>>> 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-user@avionicengineers.c
>>>>> om> 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
>>>>
>>>>
>>>
>>
>>
>> --
>> ------------------------
>> Guillaume Nodet
>>
>>
>


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

Reply via email to