【发布时间】:2012-07-09 01:38:20
【问题描述】:
我正在尝试为使用 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);
当我尝试 google 时,我发现 weblogic 中存在类似的问题:https://wso2.org/jira/browse/CARBON-4835 当我们看到 axis2.jaxws.spi.Provider 类的源代码时,我们就知道它是 javax.xml.ws.spi.Provider 的子类! 我想知道可能出了什么问题?有什么想法吗?
【问题讨论】:
-
您是在打包或显式调用 Axis2,还是只是在使用 JAX-WS API?理想情况下,您根本不需要引用 Axis2,而只需依赖 WebSphere 的内置 JAX-WS 支持(它恰好基于 Axis2,但至少有些定制)。
-
@dbreaux 感谢您的回复。正如您正确提到的,从客户端项目中,我没有明确调用axis2。我已经依赖 jsr181-api、jaxb-api、jaxws-api jars。必须注意,Web 服务是使用 Axis2 公开的,它运行在同一个 websphere8 实例中。
-
你的意思是你已经依赖这些罐子了? (对不起,我还没有在 WAS8 上变得聪明。)我认为在 EAR 和 WAR 本身中,包括在共享库配置中,你根本不想指向这些 jar,因为它们隐含地属于WebSphere。
-
那些罐子是我耳朵的一部分,我无法在 websphere 中找到特定的罐子(我不知道 websphere 是否有它自己的罐子实现......这可能会发生冲突用我打包的罐子)