我正在尝试为使用Axis2,WebSphere8,Java 1.6公开的服务编写JAX WS客户端。
独立客户端(即在我的本地机器上运行的客户端)工作正常但是当我在同一个websphere服务器上运行的应用程序中部署客户端时,我得到
java.lang.ClassCastException: Cannot cast class org.apache.axis2.jaxws.spi.Provider to class javax.xml.ws.spi.Provider
在 OpenPortType service = OpenService
.create(wsdlFile.toURL(),
new QName( "http://www.test.com/schemas/public/open-api/Open/","OpenService")).getPort(
OpenPortType.class);
行
当我尝试谷歌时,我发现weblogic中存在类似的问题:https://wso2.org/jira/browse/CARBON-4835 当我们看到axis2.jaxws.spi.Provider类的源代码时,我们才知道它是javax.xml.ws.spi.Provider的子类! 我想知道什么可能是错的?有什么想法吗?
答案 0 :(得分:0)
除非您直接调用Axis2功能,而不是简单地使用JAX-WS API,否则您不希望将Axis打包到您的EAR中。 WebSphere确实提供了自己的JAX-WS实现,我对您在应用程序中部署的另一个JAX-WS实现的冲突并不感到惊讶。 (特别要注意,WebSphere自己的实现基于Axis2。)
如果确实需要部署不同的实现,则可能必须至少将WebSphere类加载器策略调整为parent_last。可能还有更多事要做;我们自己这样做已经有一段时间了。但是使用内置的JAX-WS实现更加容易和清晰,这意味着根本不会部署任何这些jar。