【发布时间】:2011-01-06 19:47:22
【问题描述】:
当我从 J2SE(桌面)应用程序访问它们时,我有一个运行良好的 Web 服务。要访问此服务,我确实遵循:
- 使用 java wsimport 工具通过 wsdl 链接生成存根类
-
然后我使用生成的类创建服务并运行 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