I am currently migrating an application from Karaf 3.0.8 to Karaf 4.2.1.
I have problems with a bundle, it can not instantiate a JAXB context object.
It throws the following exception:
java.lang.RuntimeException: Provider for class
javax.xml.parsers.SAXParserFactory cannot be created
at
javax.xml.parsers.$FactoryFinder.findServiceProvider($FactoryFinder.java:212)
at javax.xml.parsers.$FactoryFinder.find($FactoryFinder.java:180)
at javax.xml.parsers.$FactoryFinder.find($FactoryFinder.java:122)
at
javax.xml.parsers.SAXParserFactory.newInstance(SAXParserFactory.java:43)
at
com.sun.xml.bind.v2.util.XmlFactory.createParserFactory(XmlFactory.java:123)
at
com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.getXMLReader(UnmarshallerImpl.java:154)
at
javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:157)
at
javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:214)
...
at java.lang.Thread.run(Thread.java:745)
Caused by: java.util.ServiceConfigurationError:
javax.xml.parsers.SAXParserFactory: Provider
org.apache.xerces.jaxp.SAXParserFactoryImpl 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)
at java.util.ServiceLoader$LazyIterator.next(ServiceLoader.java:404)
at java.util.ServiceLoader$1.next(ServiceLoader.java:480)
at
javax.xml.parsers.$FactoryFinder.lambda$findServiceProvider$3($FactoryFinder.java:206)
at java.security.AccessController.doPrivileged(Native Method)
at
javax.xml.parsers.$FactoryFinder.findServiceProvider($FactoryFinder.java:197)
... 71 more
Caused by:
java.util.ServiceConfigurationError: javax.xml.parsers.SAXParserFactory:
Provider org.apache.xerces.jaxp.SAXParserFactoryImpl 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)
at java.util.ServiceLoader$LazyIterator.next(ServiceLoader.java:404)
at java.util.ServiceLoader$1.next(ServiceLoader.java:480)
at
javax.xml.parsers.$FactoryFinder.lambda$findServiceProvider$3($FactoryFinder.java:206)
at java.security.AccessController.doPrivileged(Native Method)
at
javax.xml.parsers.$FactoryFinder.findServiceProvider($FactoryFinder.java:197)
at javax.xml.parsers.$FactoryFinder.find($FactoryFinder.java:180)
at javax.xml.parsers.$FactoryFinder.find($FactoryFinder.java:122)
at
javax.xml.parsers.SAXParserFactory.newInstance(SAXParserFactory.java:43)
at
com.sun.xml.bind.v2.util.XmlFactory.createParserFactory(XmlFactory.java:123)
at
com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.getXMLReader(UnmarshallerImpl.java:154)
at
javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:157)
at
javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:214)
The class org.apache.xerces.jaxp.SAXParserFactoryImpl comes from bundle
mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.xerces/2.12.0_1
it is provided by the wss4j from the cxf-3.2.7 feature.
When I add an import to org.apache.xerces.jaxp to the bundle then JAXB is
working. But this cannot be the solution because it binds my bundle onto
this implementation.
How can I solve this problem?
Richard