【问题标题】:WebSphere 8 : JAX-WS client for Axis2 WSWebSphere 8:Axis2 WS 的 JAX-WS 客户端
【发布时间】: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 是否有它自己的罐子实现......这可能会发生冲突用我打包的罐子)

标签: websphere jax-ws axis2


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2013-01-08
    • 2014-03-27
    • 1970-01-01
    • 1970-01-01
    • 2017-04-05
    • 1970-01-01
    • 2012-01-11
    • 1970-01-01
    • 2018-04-22
    相关资源
    最近更新 更多