JAX-WS 与XFire比较

 

【说明】

      本文我将通过三个简单的小实验来验证jax-wsXFire在发布和调用WebService上的区别,从而得出相应的结论以便在以后使用他们发布和调用WebService时作为进行选择的依据。

【实验】

 [Experiment1]调用WebServiceClient端采用jax-ws调用XFire发布的WebService;(ProjectXfireJax

         流程:

1) 建立JavaProject

2) 建立WebServiceClient

(1)     OtherèMyEclipseèWebServicesèWebServiceClient

(2)     Strategy”只能选jax-ws(不能选XFire);

(3)     选用WSDL URL;((3)(4)两步表示只能用jax-ws采用WSDL解析的方式来调用WebService);

(4)     下一步会提示加入jax-ws的包;

(5)     Finish”后会自动产生很多的类;

3) 手动设计本地调用WebService的类,流程:

(1)       实例化一个ServiceNumberPlusService srvc = new NumberPlusService()

(2)       生成该WebService的本地代理:

NumberPlusServicePortType delegate = srvc.getNumberPlusServiceHttpPort()

(3)       通过该代理调用服务中的Operation

delegate.plus(4, 6)

[Experiment2]调用WebServiceClient端采用XFire,采用WSDl解析的方式来调用jax-ws发布的WebServiceProject1234567);

流程:

1)    建立WebServiceProject(建立基于XFireClient端要求建立的项目必须为WebServiceProject);

2)    建立WebServiceClient

(1)     OtherèMyEclipseèWebServicesèWebServiceClient

(2)     Strategy”选XFire(这次是XFirejax-ws均可选);

(3)     选用WSDL URL;(表示只采用WSDL解析的方式来调用WebService);

(4)     下一步会提示加入XFire1.2JAXBLibraries包;

(5)     Finish”后会自动产生很多的类(其中一个类XXXServiceClient中会有main()方法可以再其中写调用服务的代码);

结果:调用失败(原因不明)

[Experiment3]对基于JAX-WS发布的WebService采用将接口抓到本地的方式来调用;

         流程:

1)       建立JavaProject

2)       JAX-WS发布的WebServiceXXXDelegate抓到本地(就像将XFire发布的WebServiceInterface抓到本地一样)

结果:这样显然不行!因为jax-ws发布的XXXDelegate类要用到该WebService的实现类,所以如果将XXXDelegate抓到本地就意味着要将WebService的实现类也抓到本地,而这是不可能的。

【结论】

1)   用基于jax-wsClient端调用基于XFirejax-wsWebService都没有问题;

而用基于XFireClient端调用基于XFireWebService存在问题(什么原因目前还不明);

2)   基于Jax-wsClient端只能通过解析WSDL文档的方式来调用WebService,不可以使用将WebService的接口抓到本地进行掉用的方式;

基于XFireClient端则能够通过两种方式来调用WebService:(但目前这两种方式只针对XFire发布的WebService

(1)       WebServiceInterface抓到本地,进行调用;

(2)       通过得到WebServiceWSDLFile或是WSDLURL,解析WSDL来调用WebService

3)   基于jax-wsWebServiceClient端可以建立在任何Project中;

基于XFireWebServiceClient端则必须建立在WebServiceProject中;

对于非WebServiceProjectProject要想调用基于XFireWebService必须将其Interface抓到本地进行调用;

4)   基于Jax-ws发布的WebService只发布WSDL文档,

基于XFireWebService则会发布WSDl+服务接口;

5)   基于Jax-ws发布的WebService会显示的产生WSDL文档;

基于XFire发布的WebService则只是在调用时由服务器产生临时的;

Jax-ws 设计了监听器机制; XFire 没有;

你可能感兴趣的:(jax-ws)