【问题标题】:web client for web service用于 Web 服务的 Web 客户端
【发布时间】:2011-01-06 19:47:22
【问题描述】:

当我从 J2SE(桌面)应用程序访问它们时,我有一个运行良好的 Web 服务。要访问此服务,我确实遵循:

  1. 使用 java wsimport 工具通过 wsdl 链接生成存根类
  2. 然后我使用生成的类创建服务并运行 wsdl 操作之一。它看起来像这样:

    MyWebServiceService webService = new MyWebServiceService();

    MyWebService 端口 = webService.getMyWebServicePort();

    webService.run("XYZ");

当我在独立应用程序中使用它时,我很伤心。 但是...当我尝试以相同的方式但从 servlet-client 访问 Web 服务时,使用生成的存根出现以下错误:

java.lang.ClassCastException: com.sun.xml.bind.v2.runtime.JAXBContextImpl cannot be cast to com.sun.xml.bind.api.JAXBRIContext
org.jboss.ws.metadata.umdm.EndpointMetaData.eagerInitializeAccessors(EndpointMetaData.java:686)
org.jboss.ws.metadata.umdm.EndpointMetaData.initializeInternal(EndpointMetaData.java:567)
org.jboss.ws.metadata.umdm.EndpointMetaData.eagerInitialize(EndpointMetaData.java:553)
org.jboss.ws.metadata.builder.jaxws.JAXWSClientMetaDataBuilder.rebuildEndpointMetaData(JAXWSClientMetaDataBuilder.java:314)
org.jboss.ws.core.jaxws.spi.ServiceDelegateImpl.getPortInternal(ServiceDelegateImpl.java:271)
org.jboss.ws.core.jaxws.spi.ServiceDelegateImpl.getPort(ServiceDelegateImpl.java:202)
javax.xml.ws.Service.getPort(Service.java:143...

我在谷歌上搜索了很长时间,但没有找到任何有用的主题。一些主题显示了从 servlet 访问 Web 服务的示例,但不幸的是我不能这样做......(而且不知道是什么造成了麻烦。

应用服务器:jboss 4.2.3GA

是否可以从 servlet 连接 Web 服务?怎么样?

我尝试过使用 @WebServiceRef 注释,但似乎 web-container 无法注入 web-service 存根。而且我认为容器本身不能这样做,因为 wsimport 工具已经生成了存根类,并且它足以使用这些类来访问 Web 服务。

存根类是使用以下命令生成的:

wsimport -keep -p com.myhost.ws http://www.myhost.com/services/MyWebService?wsdl

【问题讨论】:

  • 发现这个jax-ws.dev.java.net/guide/Using_JAX_WS_2_1_with_JavaSE6.html 可能是问题的根源,我会检查它...
  • 你用的是什么版本的java?什么版本的 JAX-WS RI?你在你的战争中打包 JAX-RI 吗?
  • 1. jdk 1.6.0_13 2.如果RI是'远程接口'那么我不知道如何确定它的版本3.是的,RI也被打包了
  • 我见过这个异常,但只有当 WS 返回空响应时。

标签: java web-services jaxb


【解决方案1】:

另外,如果正确安装了 jbossws-native 库,则应从 jboss_home/lib/endorsed 目录中删除以下软件包:

  • jboss-jaxrpc.jar
  • jboss-jaxws-ext.jar
  • jboss-jaxws.jar
  • jboss-saaj.jar

否则您将无法通过 EJB 或 servlet 连接到 Web 服务。

【讨论】:

    【解决方案2】:

    对我来说,这听起来像是 JAXB 冲突。检查你在你的战争中拥有的 jaxb 版本,并确保它们不与 Jboss 可能在其 lib 目录中的 jaxb jar 冲突。

    【讨论】:

    • 解决了从 $JBOSS_HOME/server/default/lib 和 $JBOSS_HOME/lib/endorsed 目录中删除 jboss-jaxws.jar 库的问题,此链接很有帮助:bluefishgroup.com/library/2007/… 非常感谢您的帮助!跨度>
    【解决方案3】:

    您是否确保您的类路径不包含多个不同版本的 JAX-B Jars?该异常对我来说似乎是版本冲突。应用程序服务器通常有某种“认可”的 lib 目录,其中包含始终添加在 Web 应用程序类路径前面的 JARS。也许您的应用服务器在那里有一个冲突的 JAX-B 实现?

    如果您使用 Maven 打包您的应用程序,请确保传递依赖项不会引入不需要的 JAX-B Jars(使用 'mvn dependency:tree' 进行检查)。

    【讨论】:

      猜你喜欢
      • 2014-09-04
      • 1970-01-01
      • 1970-01-01
      • 2013-06-29
      • 2016-04-18
      • 2011-12-28
      • 1970-01-01
      • 1970-01-01
      • 2013-02-03
      相关资源
      最近更新 更多