【问题标题】:Compile-time VS run-time编译时 VS 运行时
【发布时间】:2013-05-20 19:31:06
【问题描述】:

我遇到了麻烦,我有一个 jar,合作伙伴创建该 jar 以从实现一些 wsdl 处理的 web 服务中读取,这是在 netbeans 中创建的。

所以我想使用这个jar,当我使用它时,我得到一个NoClassDefFoundError,我认为这是因为有一些库冲突,所以从堆栈跟踪中查看:

NoClassDefFoundError org.codehaus.xfire.jaxws.JAXWSHelper
[...]
org.codehaus.xfire.jaxws.Provider.createServiceDelegate(Provider.java:32)
javax.xml.ws.Service.<init>(Service.java:56)
org.ubl.soap.test.SubmissionAPI.<init>(SubmissionAPI.java:44)

我正在使用来自javax.xml.ws 的库,所以它使用Service.java,所以有时在该类中它使用类javax.xml.ws.Provider,但由于某种原因,它在来自org.codehaus.xfire.jaxws 的其他库中使用相同的类.

org.codehaus.xfire.jaxws 来自 xfire.jar 和 javax.xml.ws 来自我在项目中使用的两个 jar,一个是axis2,另一个是 jaxws-api.jar。

我想到的第一件事是,如果它是从axis2而不是jaxws-api.jar中获取的类,那么axis2中的类可能无法正常工作,因为它们较旧,所以如果我想使用jaxws中的类- api.jar 而不是axis2中的那些我该怎么办?

在类路径中,定义了它们两个,因此在不同的 jar 中定义了相同的类,但命名空间相同,我不能只删除axis2,因为系统正在使用其中的一些。 ..

所以我知道错误 NoDefFoundClass 是一个运行时错误,所以它可能构建正确,但在运行时是从 xfire 而不是axis2获取类...

【问题讨论】:

  • 它叫NoClassDefFoundError 而不是NoDefFoundClass。也请张贴例外的顶部。问题是没有找到一些类。当您通过 FQN 处理类时,您编写的问题永远不会发生,因此,javax.xml.ws.Provider 不应被处理为 org.codehaus.xfire.jaxws.Provider
  • 对不起,上面是java.lang.NoClassDefFoundError: Could not initialize class org.codehaus.xfire.jaxws.JAXWSHelper

标签: java class jar collision


【解决方案1】:

如果您查看 Provider 类的 javadoc:http://docs.oracle.com/javase/6/docs/api/javax/xml/ws/spi/Provider.html#provider()

上面写着:

如果名称为 META-INF/services/javax.xml.ws.spi.Provider 的资源存在,则其第一行(如果存在)用作实现类的 UTF-8 编码名称。

因此,创建该文件并将您要使用的 Provider 的名称放入其中。

问题是你调用Provider.provider(),它返回了错误的。

【讨论】:

  • 问题是不应该使用 org.codehaus.xfire.jaxws.JAXWSHelper,问题是不应该使用整个库,注意我正在使用来自 jaxws 的类.xml.ws 不是来自 org.codehaus.xfire...
  • 我意识到javax.xml.ws下的Provider类是一个接口,所以在运行时搜索Provider类的实现时,它找到的是org.codehaus.xfire,但我想知道的是,如果我从 netbeans 运行它,它是如何工作的..
  • @user2391243 您必须查看源代码才能了解实际要调用的类。
  • 是的,我看了看,失败的行是:delegate = Provider.provider().createServiceDelegate(wsdlDocumentLocation,serviceName,this.getClass());并引用类 javax.xml.ws.spi.Provider.java 看起来是一个抽象类..
  • 但由于某种原因需要 org.codehaus.xfire.jaxws.Provider.createServiceDelegate
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-28
  • 1970-01-01
  • 1970-01-01
  • 2010-10-25
  • 2014-04-11
相关资源
最近更新 更多