gpt4 book ai didi

java - Web 服务的 Web 客户端

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:12:54 25 4
gpt4 key购买 nike

我有一个 Web 服务,当我从 J2SE(桌面)应用程序访问它们时,它工作正常。要访问此服务,我会遵循:

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

    MyWebServiceService webService = new MyWebServiceService();

    MyWebService port = webService.getMyWebServicePort();

    webService.run("XYZ");

令我遗憾的是,当我在独立应用程序中使用它时,它工作正常。但是...当我尝试以相同的方式但从 servlet 客户端访问 Web 服务时,使用生成的 stub ,我收到以下错误:

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 访问网络服务的示例,但不幸的是我不能这样做......(并且不知道是什么导致了麻烦。

应用服务器:jboss 4.2.3GA

是否可以从 servlet 连接网络服务?怎么办?

我试过使用@WebServiceRef 注释,但网络容器似乎无法注入(inject)网络服务 stub 。而且我认为容器本身不能这样做,因为 stub 类已经由 wsimport 工具生成,并且足以使用这些类来访问 Web 服务。

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

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

最佳答案

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

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

关于java - Web 服务的 Web 客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2093889/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com