Ideally I would like to avoid overloading too much from the vanilla
karaf to avoid too much dependencies to ease the future karaf version
upgrades, but since I'm blocked at the moment I can give it a try. The best
for me would be to find a nasty workaround with the classloader just to
make it work. Which classloader can I set on the current thread to make
this work?

Thanks a lot Guillaume for your help!

Cheers,
Nicolas



On Tue, Mar 27, 2018 at 8:09 PM, Guillaume Nodet <gno...@apache.org> wrote:

> 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