1

我正在尝试为使用 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 !!我想知道可能出了什么问题?任何想法 ?

4

1 回答 1

0

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

如果您确实需要部署不同的实现,您可能至少必须将 WebSphere 类加载器策略调整为 parent_last。可能还有更多工作要做;自从我们自己做这件事以来已经有一段时间了。但是使用内置的 JAX-WS 实现更容易和更简洁,这意味着根本不需要部署任何这些 jar。

于 2012-07-17T15:39:11.707 回答