当我从J2SE (桌面)应用程序访问它们时,我有一个工作良好的web服务。要访问此服务,我需要遵循以下命令:
MyWebServiceService webService =新MyWebServiceService();
MyWebService端口= webService.getMyWebServicePort();
webService.run("XYZ");
当我在一个独立的应用程序中使用它时,它会很好地工作。But...when -我尝试以同样的方式访问web服务,但使用生成的存根访问servlet-客户机,得到以下错误:
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服务的例子,但不幸的是,我不能这样做.(而且不知道是什么导致了问题。
应用服务器:JBoss4.2.3GA
从servlet连接web服务是可能的吗?多么?
我尝试过使用@WebServiceRef注释,但似乎web容器无法注入web服务存根。我认为容器本身不能这样做,因为存根类已经由wsimport工具生成,并且它可以使用这个类访问web服务。
存根类是使用以下命令生成的:
wsimport -keep -p com.myhost.ws http://www.myhost.com/services/MyWebService?wsdl发布于 2010-01-19 19:34:16
您是否确保您的类路径不包含具有不同版本的多个JAX?在我看来,这个例外就像是版本冲突。应用程序服务器通常有某种“认可的”lib目录,其中包含总是在web应用程序类路径之前添加的JARS。也许您的应用服务器在那里有一个相互冲突的JAX实现?
如果使用Maven对应用程序进行打包,请确保传递依赖关系不会引入不必要的JAX(使用'mvn依赖关系:tree‘来检查这一点)。
发布于 2010-03-03 16:19:25
对我来说,这听起来绝对像是JAXB的冲突。查看您在war中拥有的jaxb版本,并确保它们与Jboss目录中的jaxb jar没有冲突。
发布于 2013-07-11 04:58:04
另外,如果正确安装了jbossws-本机库,则应该从jboss/lib/核可目录中删除以下软件包:
否则,您就无法通过EJB或servlet连接到web服务。
https://stackoverflow.com/questions/2093889
复制相似问题