繁体   English   中英

编译时VS运行时

[英]Compile-time VS run-time

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

所以我想使用这个罐子,当我使用它的时候,我得到一个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获取类。

如果您查看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()并返回错误的代码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM