0

我遇到了麻烦,我有一个 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获取类...

4

1 回答 1

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()它并返回错误的。

于 2013-05-20T19:57:35.213 回答