首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Web前端 >

jax-ws WebService相关有关问题(一)

2013-04-05 
jax-ws WebService相关问题(一)?2.Client端同样部署在jboss web容器上的时候,客户端调用报: java.lang.Cla

jax-ws WebService相关问题(一)

?

2.Client端同样部署在jboss web容器上的时候,客户端调用报: java.lang.ClassCastException: com.sun.xml.ws.client.WSServiceDelegate cannot be cast to javax.xml.ws.spi.ServiceDelegate21

?

解释: 这是由于JBOSS有自带的jax-ws api的实现,称为jbossws。导致api类实现冲突。

解决方案:

思路是将JDK总的JAX-WS实现相关的类替换为加载JBOSS的JAX-WS API实现类。

?

做法是将jboss/lib/endorsed/ 目录下的:

? ? ? ? ? ? ? ? ? jboss-jaxrpc.jar

? ? ? ? ? ? ? ? ? jboss-jaxws.jar

? ? ? ? ? ? ? ? ? jboss-jaxws-ext.jar

? ? ? ? ? ? ? ? ? jboss-saaj.jar

? ? ? ? ? ? ? ? ? xercesImpl.jar

拷贝到%JAVA_HOME%/jre/endorsed/目录下。(这使用了JDK的endorsed机制,请查阅相关资料)

JDK的endorsed目录可以根据System.getProperty("java.endorsed.dirs")获得。 需要注意的是:在web容器使用哪个JDK就在那个JDK下面去修改。

?

3.发布的wsdl里面如果import 了wsdl和xsd文件时,客户端访问每次都会Addressing,如何将本地war包里面的xsd和wsdl和发布的服务绑定上?

解释:这个是由于WS的机制造成的,JAX-WS官方提供了解决方案。

解决方案:采用添加jax-ws-catalog的方式,绑定本地的xsd和wsdl

?

?

Jax-ws-catalog.xml的放置位置:

???wsimport?命令行或者ant任务

使用-catalog?可选参数,指定catalog file.?例如:

-catalog jax-ws-catalog.xml

?

???WebService客户端运行时环境

Classpath下的该目录:META-INF/jax-ws-catalog.xml

(.jar包中的META-INF/jax-ws-catalog.xml也算)

?

???轻量级的基于HTTP server (j2se)的endpoint发布

就是说是通过调用接口EndPoint.publish(),并指定了HttpServer的。

包括通过Spring的轻量级发布辅助类发布的:

org.springframework.remoting.jaxws.SimpleJaxWsServiceExporter

org.springframework.remoting.jaxws.SimpleHttpServerJaxWsServiceExporter

Classpath下的该目录:META-INF/jax-ws-catalog.xml

?

???基于Servlet的endpoint

WEB-INF/jax-ws-catalog.xml

?

???基于JSR 109标准的?EJB?模块发布

META-INF/jax-ws-catalog.xml

【备注】

笔者在使用CXF作为webservice实现的时候通过指定jax-ws-catalog.xml是能够很好的被加载解析。但是使用JDK自带的jax-ws或者Metro jax-ws RI时,使用JBOSS作为发布容器,始终不能正确执行jax-ws-catalog.xml中描述的?import wsdl/xsdschema引用替换,进一步调试发现是通过jndi的方式访问了jax-ws-catalog.xml,但是没达到使用本地wsdl/xsd的效果

?

4.如何采用endpoint的方式发布一个servcename下有多个portname的WebService?

how to publish multi port webservice with same serviceName?

解释:一般看JAX-WS RI上的例子或者Spring的两个http Stand alone publish 发布辅助类(上文提到的:Spring的轻量级发布辅助类),都看不到这方面的资料。是因为多 port 使用的比较少。

解决方案:扩展Spring提供的http endpoint pubish类 :AbstractJaxWsServiceExporter。

该类胡自动解析带有@WebService注解的初始化为Spring bean了的endpoint发布类,并基于配置的basepath进行发布,发布地址:http://hostname:port/basepath/serviceName/portName

?

代码:

?

?

?

?

热点排行