WebSphere 8:Axis2 WS的JAX-WS客户端

WebSphere 8:Axis2 WS的JAX-WS客户端,websphere,jax-ws,axis2,Websphere,Jax Ws,Axis2,我正在尝试为使用Axis2、WebSphere8和Java1.6公开的服务编写一个JAX WS客户端。 独立客户机(即在本地计算机上运行的客户机)工作正常,但当我将客户机部署到运行在同一websphere服务器上的应用程序中时 java.lang.ClassCastException:无法将类org.apache.axis2.jaxws.spi.Provider强制转换为类javax.xml.ws.spi.Provider 在第行OpenPortType service=OpenService

我正在尝试为使用Axis2、WebSphere8和Java1.6公开的服务编写一个JAX WS客户端。 独立客户机(即在本地计算机上运行的客户机)工作正常,但当我将客户机部署到运行在同一websphere服务器上的应用程序中时
java.lang.ClassCastException:无法将类org.apache.axis2.jaxws.spi.Provider强制转换为类javax.xml.ws.spi.Provider
在第行
OpenPortType service=OpenService
.create(wsdlFile.toURL(),
新QName(“http://www.test.com/schemas/public/open-api/Open/“,”OpenService“))。getPort(
OpenPortType.class)

当我尝试谷歌搜索时,我发现weblogic中也存在类似的问题: 当我们看到axis2.jaxws.spi.Provider类的源代码时,我们就知道它是javax.xml.ws.spi.Provider的一个子类!!
我想知道怎么了?有什么想法吗?

除非您直接调用Axis2功能,而不是简单地使用JAX-WSAPI,否则您不想将Axis打包到EAR中。WebSphere确实提供了自己的JAX-WS实现,这与您在应用程序中部署的另一个JAX-WS实现冲突并不奇怪。(特别要注意的是,WebSphere自己的实现是基于Axis2的。)


如果您确实需要部署一个不同的实现,那么您可能至少需要将WebSphereClassLoader策略调整为parent_。也许还有更多的事情要做;我们已经有一段时间没有自己做过了。但是使用内置JAX-WS实现更容易、更干净,这意味着根本不部署任何JAR。

您是打包或显式调用Axis2,还是只使用JAX-WS API?理想情况下,您根本不需要引用Axis2,只需要依赖WebSphere内置的JAX-WS支持(它恰好基于Axis2,但至少有些定制)。@dbreaux感谢您的响应。正如您正确地提到的,在客户端项目中,我没有显式地调用axis2。我已经对jsr181 api、jaxb api、jaxws api JAR建立了依赖关系。必须注意的是,web服务是使用Axis2公开的,并且它运行在同一个websphere8实例中。您将依赖关系放在这些JAR上是什么意思?(对不起,我还没有在WAS8上变得聪明。)我认为在EAR和WAR本身,包括在共享库配置中,您根本不想指向那些JAR,因为它们隐式地是WebSphere的一部分。这些JAR是我EAR的一部分,我无法在WebSphere中找到特定的JAR(我不知道websphere是否有自己的JAR实现……这可能与我打包的JAR冲突)