Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Eclipse 4.12 - java.lang.ClassNotFoundException: com.sun.xml.internal.bind.v2.ContextFactory

I am getting below error while running my eclipse plugin. Eclipse used 4.12 with java11. It used to work fine in eclipse 4.6.3 + java8.

javax.xml.bind.JAXBException: Provider com.sun.xml.internal.bind.v2.ContextFactory not found
 - with linked exception:
[java.lang.ClassNotFoundException: com.sun.xml.internal.bind.v2.ContextFactory cannot be found by com.my.cep.studio.cluster.topology_0.0.0]

!ENTRY com.my.cep.diagramming 4 0   at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:146)
    at javax.xml.bind.ContextFinder.find(ContextFinder.java:289)
    at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:412)
    at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:375)
    at com.my.cep.studio.cluster.topology.editors.ClusterTopologyDiagramManager.parseFile(ClusterTopologyDiagramManager.java:193)
    at com.my.cep.studio.cluster.topology.editors.ClusterTopologyDiagramManager.openModel(ClusterTopologyDiagramManager.java:175)
    at com.my.cep.diagramming.drawing.BaseDiagramManager.createDrawingCanvas(BaseDiagramManager.java:233)
    at com.my.cep.diagramming.drawing.DiagramManager$2.run(DiagramManager.java:259)
    at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:313)
    at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:770)
    at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721)
    at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:715)
    at java.base/java.security.AccessController.doPrivileged(Native Method)
    at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
    at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:740)
    at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
    at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
    at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
    at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
    at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
Caused by: java.lang.ClassNotFoundException: com.sun.xml.internal.bind.v2.ContextFactory cannot be found by com.my.cep.studio.cluster.topology_0.0.0
    at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:512)
    at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:423)
    at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:415)
    at org.eclipse.osgi.internal.loader.ModuleClassLoader.loadClass(ModuleClassLoader.java:155)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
    at javax.xml.bind.ContextFinder.safeLoadClass(ContextFinder.java:480)
    at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:112)
like image 523
Java dev Avatar asked Sep 19 '19 10:09

Java dev


4 Answers

Sun people have remove directly access to jaxb package in java 11.
These dependency will work instead of it. Same fix if you are facing hibernate NullPointerException issue.

<dependency>
    <groupId>com.sun.xml.bind</groupId>
    <artifactId>jaxb-core</artifactId>
    <version>2.3.0.1</version>
</dependency>
<dependency>
    <groupId>javax.xml.bind</groupId>
    <artifactId>jaxb-api</artifactId>
    <version>2.3.1</version>
</dependency>
<dependency>
    <groupId>com.sun.xml.bind</groupId>
    <artifactId>jaxb-impl</artifactId>
    <version>2.3.1</version>
</dependency>
<dependency>
    <groupId>org.javassist</groupId>
    <artifactId>javassist</artifactId>
    <version>3.25.0-GA</version>
</dependency>
like image 172
Vivek Kumar Patel Avatar answered Nov 01 '22 06:11

Vivek Kumar Patel


Yes, you are using features in javax that existed in java 8 but are removed in Java 11

see this answer How to resolve java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException in Java 9

like image 40
Yann TM Avatar answered Nov 01 '22 06:11

Yann TM


I've stumbled upon this question while migrating a big ancient Java application to Java 11. I think the following might come useful.

I had everything in place in my Maven POMs, javax bindings, JAXB's implementation, a few tests working fine. Yet, the original application's tests kept inexplicably complaining that com.sun.xml.internal.bind.v2.ContextFactory is not found.

Indeed, that class isn't in any 3rd-party implementations of JAXB (I'm using the Glassfish's one, but there are several others), and one has to replace the default factory that is instantiated inside javax.xml.bind.JAXBContext.newInstance( <classes> ) with some new implementation (com.sun.xml.bind.v2.JAXBContextFactory in my case and, I guess, in other JAXB libs too).

And well, one of the ways to set that is via the jaxb.properties file, which must be visible to the classpath (so, in Maven, it's usually somewhere like src/main/resources/*). As it is explained here, this file has to contain:

javax.xml.bind.context.factory=com.sun.xml.bind.v2.JAXBContextFactory

In my case, it was containing the old now-disappeared factory. I guess, current JAXB libraries use a correct default factory if they don't meet that file, however it might be already present in your codebase and you might need a while before realising it. I hope that this answer will save you the time I wasted.

like image 9
zakmck Avatar answered Nov 01 '22 04:11

zakmck


These libs worked for me (inspired by Vivek's response above). When I tried using JAXB sample from Vogella tutorial with Intellij.

dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.12'
    compile group: 'org.eclipse.persistence', name: 'org.eclipse.persistence.moxy',version: '2.7.3'
    compile group: 'javax.xml.bind', name: 'jaxb-api', version: '2.3.1'
    compile 'com.sun.xml.bind:jaxb-core:2.3.0.1'
    compile 'com.sun.xml.bind:jaxb-impl:2.3.1'
    compile 'org.javassist:javassist:3.25.0-GA'
}
like image 4
Diego Avatar answered Nov 01 '22 04:11

Diego