Jar不使用包含的类或命名空间冲突

时间:2013-05-17 17:32:01

标签: java jar namespaces collision

我正在使用netbeans从WSDL文档生成Web服务客户端。

客户端工作正常,直到我们将其放入我们的生产环境中。这些jar是针对jaxws-api.jar和jaxb-api.jar中的javax.ws.xxxxx类生成的,我们将它放在生产类路径中。

在我们的生产环境中,我们有其他依赖于xfire库的代码。当我们尝试实例化SubmissionAPI()时,我们得到一个NoClassDefFound异常。我正在粘贴下面的堆栈跟踪。

UBLSoapTest类似乎调用了正确的'Service'类,但是'Service'类 正在调用org.codehaus.xfire.jaxws.Provider。

我检查了javax.xml.ws.Service的源代码,它有'import javax.xml.ws.spi.Provider;'

我们尝试在内部使用javax.xxxx类组装jar,但仍然得到相同的结果。我怀疑我们需要在清单文件中设置一个类路径,但我不确定需要在那里。

FAIL: Exception: java.lang.NoClassDefFoundError: Could not initialize class
org.codehaus.xfire.jaxws.JAXWSHelper
org.codehaus.xfire.jaxws.ServiceDelegate.<init>(ServiceDelegate.java:33)
org.codehaus.xfire.jaxws.ServiceDelegate.<init>(ServiceDelegate.java:53)
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)

我有点不知道从哪里看。

我们已尝试在清单中设置classpath,但收效甚微。

我们尝试的基本jar结构是:

/org/xxxx
/META-INF/xxx

/org/xxx
/META-INF/xxx
/javax/xxx

/org/xxx
/META-INF/xxx
/jaxws-api.jar
/jaxb.jar

1 个答案:

答案 0 :(得分:1)

您似乎缺少JAX-WS的impl jar。如果您依靠Codehaus提供impl,您可能需要确保它们的impl有效。根据他们的网站,它是一个新支持的组件。

另一种方法是提供自己的impl jar并将其放在类路径中,以便在那里找到JAX-WS接口。但通常,部署Web服务应用程序的应用程序服务器应该在其类路径中包含impl。