Web服务的Web客户端

时间:2010-01-19 13:50:25

标签: java web-services jaxb

当我从J2SE(桌面)应用程序访问它时,我的Web服务工作正常。要访问此服务,请执行以下操作:

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

    MyWebServiceService webService = new MyWebServiceService();

    MyWebService port = webService.getMyWebServicePort();

    webService.run( “XYZ”);

  4. 我很难过,当我在一个独立的应用程序中使用它时它工作正常。 但是......当我尝试以相同的方式访问web服务但是从servlet-client访问时,使用生成的存根我会收到以下错误:

    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容器无法注入Web服务存根。我认为容器本身不能这样做,因为存根类已经由wsimport工具生成,并且它使用这些类来访问web服务。

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

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

3 个答案:

答案 0 :(得分:10)

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

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

  • jboss-jaxrpc.jar
  • jboss-jaxws-ext.jar
  • jboss-jaxws.jar
  • 的JBoss-没有saaj.jar

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