com.sun.xml.internal.ws.fault.SOAPFaultBuilder的NoClassDefFoundError

时间:2015-02-11 19:32:14

标签: java web-services soap jar soapfault

我们的实时环境中的Web服务客户端最近得到了例外:

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)
....

我已经在线进行了大量搜索,包括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

我的理解是我们的客户端从服务器收到SOAP Fault并且它丢失了一些jar文件。所以我试图通过首先重新创建它来解决问题。

我在Eclipse中创建了一个简单的Web Service服务器项目,它有一个web方法抛出一个由@WebFault注释的简单错误类。然后我创建了一个使用Web方法的简单Web服务客户端项目。客户端项目在其类路径中没有任何额外的库/ jar;它只有JRE。令我惊讶的是,它没有抛出NoClassDefFoundError异常!相反,我得到了我在服务器端定义的javax.xml.ws.soap.SOAPFaultException

班级SOAPFaultBuilder确实在JRE的rt.jar中。因此,我创建的简单Web服务项目可能正常工作。但是,为什么我们的实时环境中的Web服务客户端会抛出NoClassDefFoundError异常?该项目肯定在类路径中有rt.jar。

任何人都可以对这个问题有所了解吗?如果它丢失了一些jar文件(来自jaxws RI或Apache CXF或其他),为什么我创建的超级简单客户端没有抛出错误?实时环境和我的本地环境都使用Java7u51。

2 个答案:

答案 0 :(得分:1)

我有同样的错误,我通过删除tomcat lib文件夹中的jax-impl.jar解决了这个问题。这是jaxb jar版本与我在tomcat中安装的一个webapp的冲突。

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

答案 1 :(得分:0)

我遇到了同样的问题,随后我可以解决这个问题。

由于问题中提到的以下错误,无法找到SOAP Fault的根本原因。

我按照以下链接中提到的步骤来确定NoClassDefFoundError的原因。

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

我可以在应用程序日志中找到以下错误:

  

java.lang.ExceptionInInitializerError
  引起:java.lang.ClassCastException:com.sun.xml.bind.v2.runtime.JAXBContextImpl无法强制转换为com.sun.xml.internal.bind.api.JAXBRIContext

上述classcast异常的原因是由于jar文件冲突。

rt.jar(这存在于jre类路径中) jaxb-impl-2.0.1.jar(这在我的应用程序类路径中出现)。

我已从类路径中删除了文件jaxb-impl-2.0.1.jar,实际错误消失了。