【问题标题】:NoClassDefFoundError for com.sun.xml.internal.ws.fault.SOAPFaultBuildercom.sun.xml.internal.ws.fault.SOAPFaultBuilder 的 NoClassDefFoundError
【发布时间】:2015-02-11 19:32:13
【问题描述】:

我们在live环境中的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 错误,它缺少一些 jar 文件。所以我试图通过首先重新创建它来解决这个问题。

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

SOAPFaultBuilder 类确实在 JRE 的 rt.jar 中。因此,我创建的简单 Web 服务项目可能只是按其应有的方式工作。但是,我们live环境中的web服务客户端怎么会抛出NoClassDefFoundError异常呢?该项目的类路径中肯定有 rt.jar。

谁能解释一下这个问题?如果它缺少一些 jar 文件(来自 jaxws RI 或 Apache CXF 或其他文件),为什么我创建的超级简单客户端没有抛出错误?直播环境和我的本地环境都使用Java7u51。

【问题讨论】:

  • 在这篇文章之后我学到的一件事是java.lang.ClassNotFoundException 和java.lang.NoClassDefFoundError 之间的区别。在这种情况下,问题可能是因为SOAPFaultBuilder 由于其他原因未能初始化。不幸的是,我在我们的生产日志中没有发现其他异常。现在,我将尝试通过添加 jaxws-api.jar、jaxws-rt.jar、jaxws-tools.jar 和 saaj-impl.jar 到其他帖子建议的类路径来解决问题。
  • 我正在使用带有 RS-libs 的 TomEE ...但也遇到了这个问题 ...@xli 自从您从事此工作以来,您有任何进展吗?
  • @FibreFoX 不多。您可以尝试添加这些 JAR 以查看是否有帮助。我最终删除了这些 JAR,因为它们在我们的系统中引起了一些依赖问题。

标签: java web-services soap jar soapfault


【解决方案1】:

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

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

【讨论】:

  • 请注意 link-only answers 是不鼓励的,所以答案应该是寻找解决方案的终点(而不是另一个参考中途停留,随着时间的推移往往会变得陈旧)。请考虑在此处添加独立的概要,并保留链接作为参考。
  • 明白了。感谢您指出.. 会记住以后的帖子
【解决方案2】:

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

由于问题中提到的以下错误,无法找到 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,实际错误消失了。

【讨论】:

    猜你喜欢
    • 2011-09-28
    • 2016-06-05
    • 2021-08-05
    • 2017-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多