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中;

基于XFire

你可能感兴趣的:(Java,webservice)