You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@karaf.apache.org by "Boban Petkovic (JIRA)" <ji...@apache.org> on 2018/03/29 16:07:00 UTC

[jira] [Comment Edited] (KARAF-5674) Karaf 4.2.0 M2 class load issue

    [ https://issues.apache.org/jira/browse/KARAF-5674?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16419255#comment-16419255 ] 

Boban Petkovic edited comment on KARAF-5674 at 3/29/18 4:06 PM:
----------------------------------------------------------------

Hi [~gnt], I've just tried the snapshot from today (March 29th) and I hit another issue. cxf-dosgi (2.3.0) does not work if cxf is installed (I tried cxf 3.2.0, 3.2.2 and 3.2.4 version). If cxf is not installed, cxf-dosgi bundles work fine, they got activated. cxf and cxf-dosgi work fine in karaf 4.2.0 M2. In the log I see the following error:
{code:java}
2018-03-29T17:54:46,652 | ERROR | paxweb-config-1-thread-1 | Activator | 166 - org.ops4j.pax.web.pax-web-runtime - 7.0.0 | Unable to start pax web server: org/w3c/dom/ElementTraversal
java.lang.NoClassDefFoundError: org/w3c/dom/ElementTraversal
 at java.lang.ClassLoader.defineClass1(Native Method) ~[?:?]
 at java.lang.ClassLoader.defineClass(ClassLoader.java:763) ~[?:?]
 at org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.defineClass(BundleWiringImpl.java:2410) ~[?:?]
 at org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.findClass(BundleWiringImpl.java:2194) ~[?:?]
 at org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1607) ~[?:?]
 at org.apache.felix.framework.BundleWiringImpl.access$200(BundleWiringImpl.java:80) ~[?:?]
 at org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:2053) ~[?:?]
 at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[?:?]
 at org.apache.xerces.parsers.AbstractDOMParser.startDocument(Unknown Source) ~[?:?]
 at org.apache.xerces.impl.dtd.XMLDTDValidator.startDocument(Unknown Source) ~[?:?]
 at org.apache.xerces.impl.XMLDocumentScannerImpl.startEntity(Unknown Source) ~[?:?]
 at org.apache.xerces.impl.XMLVersionDetector.startDocumentParsing(Unknown Source) ~[?:?]
 at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source) ~[?:?]
 at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source) ~[?:?]
 at org.apache.xerces.parsers.XMLParser.parse(Unknown Source) ~[?:?]
 at org.apache.xerces.parsers.DOMParser.parse(Unknown Source) ~[?:?]
 at org.apache.xerces.jaxp.DocumentBuilderImpl.parse(Unknown Source) ~[?:?]
 at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:121) ~[?:?]
 at org.ops4j.util.xml.ElementHelper.getRootElement(ElementHelper.java:103) ~[?:?]
 at org.ops4j.pax.web.service.internal.DefaultPropertyResolver.getDefaltProperties(DefaultPropertyResolver.java:59) ~[?:?]
 at org.ops4j.pax.web.service.internal.DefaultPropertyResolver.<init>(DefaultPropertyResolver.java:50) ~[?:?]
 at org.ops4j.pax.web.service.internal.Activator.updateController(Activator.java:339) ~[?:?]
 at org.ops4j.pax.web.service.internal.Activator.lambda$scheduleUpdateFactory$2(Activator.java:291) ~[?:?]
 at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [?:?]
 at java.util.concurrent.FutureTask.run(FutureTask.java:266) [?:?]
 at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:?]
 at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:?]
 at java.lang.Thread.run(Thread.java:748) [?:?]
Caused by: java.lang.ClassNotFoundException: org.w3c.dom.ElementTraversal
 at java.net.URLClassLoader.findClass(URLClassLoader.java:381) ~[?:?]
 at java.lang.ClassLoader.loadClass(ClassLoader.java:424) ~[?:?]
 at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[?:?]
 at org.apache.felix.framework.ExtensionManager$ExtensionManagerWiring.getClassByDelegation(ExtensionManager.java:940) ~[?:?]
 at org.apache.felix.framework.BundleWiringImpl.searchImports(BundleWiringImpl.java:1660) ~[?:?]
 at org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1590) ~[?:?]
 at org.apache.felix.framework.BundleWiringImpl.access$200(BundleWiringImpl.java:80) ~[?:?]
 at org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:2053) ~[?:?]
 at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[?:?]
 ... 28 more{code}
I downloaded karaf 4.2.0 snapshot from [https://repository.apache.org/content/groups/snapshots-group/org/apache/karaf/apache-karaf/4.2.0-SNAPSHOT/]


was (Author: bobanbp):
Hi [~gnt], I've just tried the snapshot from today (March 29th) and I hit another issue. cxf-dosgi (2.3.0) does not work if cxf is installed (I tried cxf 3.2.0, 3.2.2 and 3.2.4 version). If cxf is not installed, cxf-dosgi bundles work fine, they got activated. In the log I see the following error:
{code:java}
2018-03-29T17:54:46,652 | ERROR | paxweb-config-1-thread-1 | Activator | 166 - org.ops4j.pax.web.pax-web-runtime - 7.0.0 | Unable to start pax web server: org/w3c/dom/ElementTraversal
java.lang.NoClassDefFoundError: org/w3c/dom/ElementTraversal
 at java.lang.ClassLoader.defineClass1(Native Method) ~[?:?]
 at java.lang.ClassLoader.defineClass(ClassLoader.java:763) ~[?:?]
 at org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.defineClass(BundleWiringImpl.java:2410) ~[?:?]
 at org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.findClass(BundleWiringImpl.java:2194) ~[?:?]
 at org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1607) ~[?:?]
 at org.apache.felix.framework.BundleWiringImpl.access$200(BundleWiringImpl.java:80) ~[?:?]
 at org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:2053) ~[?:?]
 at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[?:?]
 at org.apache.xerces.parsers.AbstractDOMParser.startDocument(Unknown Source) ~[?:?]
 at org.apache.xerces.impl.dtd.XMLDTDValidator.startDocument(Unknown Source) ~[?:?]
 at org.apache.xerces.impl.XMLDocumentScannerImpl.startEntity(Unknown Source) ~[?:?]
 at org.apache.xerces.impl.XMLVersionDetector.startDocumentParsing(Unknown Source) ~[?:?]
 at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source) ~[?:?]
 at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source) ~[?:?]
 at org.apache.xerces.parsers.XMLParser.parse(Unknown Source) ~[?:?]
 at org.apache.xerces.parsers.DOMParser.parse(Unknown Source) ~[?:?]
 at org.apache.xerces.jaxp.DocumentBuilderImpl.parse(Unknown Source) ~[?:?]
 at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:121) ~[?:?]
 at org.ops4j.util.xml.ElementHelper.getRootElement(ElementHelper.java:103) ~[?:?]
 at org.ops4j.pax.web.service.internal.DefaultPropertyResolver.getDefaltProperties(DefaultPropertyResolver.java:59) ~[?:?]
 at org.ops4j.pax.web.service.internal.DefaultPropertyResolver.<init>(DefaultPropertyResolver.java:50) ~[?:?]
 at org.ops4j.pax.web.service.internal.Activator.updateController(Activator.java:339) ~[?:?]
 at org.ops4j.pax.web.service.internal.Activator.lambda$scheduleUpdateFactory$2(Activator.java:291) ~[?:?]
 at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [?:?]
 at java.util.concurrent.FutureTask.run(FutureTask.java:266) [?:?]
 at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:?]
 at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:?]
 at java.lang.Thread.run(Thread.java:748) [?:?]
Caused by: java.lang.ClassNotFoundException: org.w3c.dom.ElementTraversal
 at java.net.URLClassLoader.findClass(URLClassLoader.java:381) ~[?:?]
 at java.lang.ClassLoader.loadClass(ClassLoader.java:424) ~[?:?]
 at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[?:?]
 at org.apache.felix.framework.ExtensionManager$ExtensionManagerWiring.getClassByDelegation(ExtensionManager.java:940) ~[?:?]
 at org.apache.felix.framework.BundleWiringImpl.searchImports(BundleWiringImpl.java:1660) ~[?:?]
 at org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1590) ~[?:?]
 at org.apache.felix.framework.BundleWiringImpl.access$200(BundleWiringImpl.java:80) ~[?:?]
 at org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:2053) ~[?:?]
 at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[?:?]
 ... 28 more{code}
I downloaded karaf 4.2.0 snapshot from https://repository.apache.org/content/groups/snapshots-group/org/apache/karaf/apache-karaf/4.2.0-SNAPSHOT/

> Karaf 4.2.0 M2 class load issue
> -------------------------------
>
>                 Key: KARAF-5674
>                 URL: https://issues.apache.org/jira/browse/KARAF-5674
>             Project: Karaf
>          Issue Type: Bug
>          Components: karaf-osgi
>    Affects Versions: 4.2.0.M2
>            Reporter: Boban Petkovic
>            Priority: Critical
>
> While migrating our application to work on karaf 4.2.0 (once it got released) I hit an issue with class loader while testing on karaf 4.2.0 M2. I will try to explain it simple:
> Let say I have bundle A that contains REST endpoints (CXF 3.2.2). I use dosgi to register CXF endpoints. From REST endpoint (in bundle A) we invoke some code from bundle B that uses aws-java-sdk-osgi bundle (version 1.11.272). This fails with the error:
> javax.xml.stream.XMLInputFactory: Provider com.ctc.wstx.stax.WstxInputFactory not found
> The same code works on karaf 4.1.5 and karaf 4.0.7 that we use at the moment. After some investigation I figured out that the context of class loader used to invoke the code from our bundles is org.apache.cxf.cxf-rt-transports-http. When I tried to set class loader to use our bundle's context it worked fine:
> {code:java}
> ClassLoader tccl = Thread.currentThread() .getContextClassLoader(); Thread.currentThread().setContextClassLoader(this.getClass().getClassLoader());
> AWS SDK calls that fails (from bundle B) 
> Thread.currentThread().setContextClassLoader(tccl);{code}
> Has something been changed when it comes to class loading mechanism in 4.2.0? While testing the same code on 4.1.5 I can see that the same context (org.apache.cxf.cxf-rt-transports-http) is used, but it works fine.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)