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