NoClassDefFoundError for com.sun.xml.internal.ws.f

2019-05-07 08:54发布

问题:

Our web service client in live environment recently got the exception:

java.lang.NoClassDefFoundError: Could not initialize class com.sun.xml.internal.ws.fault.SOAPFaultBuilder 
at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:107)
at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:78)
at com.sun.xml.internal.ws.client.sei.SEIStub.invoke(SEIStub.java:135)
at com.sun.proxy.$Proxy146.search(Unknown Source)
....

I've done a lot of search online, including a few posts here at StackOverflow:

Catching webservice exception with CXF: NoClassDefFoundError: SOAPFaultBuilder

Could not initialize class com.sun.xml.internal.ws.fault.SOAPFaultBuilder

java.lang.NoClassDefFoundError: Could not initialize class com.sun.xml.internal.ws.fault.SOAPFaultBuilder

And my understanding was our client received a SOAP Fault from the server and it's missing some jar file. So I'm trying to solve the problem by first recreating it.

I created a simple Web Service server project in Eclipse which has a web method throws a simple fault class annotated by @WebFault. Then I created a simple Web Service client project which consumes the web method. The client project doesn't have any additional libraries/jars in its classpath; all it has is the JRE. To my surprise, it didn't throw the NoClassDefFoundError exception! Instead, I got the javax.xml.ws.soap.SOAPFaultException I defined on the server side.

The class SOAPFaultBuilder is indeed in rt.jar in JRE. So the simple web service projects I created probably just work as they should. However, how come the web service client in our live environment throw the NoClassDefFoundError exception? That project definitely has rt.jar in the classpath.

Can anyone please shed some light on this problem? If it's missing some jar files (either from the jaxws RI or Apache CXF or others), why would the super simple client I created didn't throw the error? Both the live environment and my local environment use Java7u51.

回答1:

I had the same erorr and I resolved this issue by deleting the jax-impl.jar from the tomcat lib folder. It was a possible conflict of the jaxb jar versions with one of my webapps installed in tomcat.

http://programtalk.com/java/i-was-running-gwt-application-on-tomca/



回答2:

I have encountered the same problem and I could subsequently resolve this.

Due to the following error mentioned in the Problem, the underlying cause of the SOAP Fault could not be found.

I followed the steps mentioned in the following link, to identify the reason for NoClassDefFoundError.

http://javarevisited.blogspot.in/2011/06/noclassdeffounderror-exception-in.html

I could find the following errors in my application log:

java.lang.ExceptionInInitializerError
Caused by: java.lang.ClassCastException: com.sun.xml.bind.v2.runtime.JAXBContextImpl cannot be cast to com.sun.xml.internal.bind.api.JAXBRIContext

The reason for the above classcast exception is due to conflicting jar files.

rt.jar (this is present in jre classpath) jaxb-impl-2.0.1.jar (this is present in my application classpath).

I have removed the file jaxb-impl-2.0.1.jar from my classpath and the actual error is gone.