WebService客户端开发(Axis2 1.5)



 



WebService的客户端开发方式很多,如果单纯为了使用一个WebService,而不想依赖太多的框架,那么随便选择个WebService框架就可以了。



 



为了封装方便,代码复用,更好的性能,一般选择客户端存根方式来开发。



 



开发环境:



Idea-8.13



Axis2-1.5



JDK-1.5



 



一、建立java项目



 



建立项目后,创建存根存放包。



 



按照如下图配置:





 


 


一定要选择ADB方式,ADB绑定方式生成的类最少,易于管理。


 


二、生成代码


 


按照如上图设置后,点OK,就生成好了,连单元测试的代码都封装好了。


 



 


说真的,生成后的代码直接看就傻眼了,看不出个头绪来。


 


三、看懂Axis2存根代码


 


Axis2生成的存根代码虽然复杂,但是有规律的,只要你搞明白生成的原理,再看生成后的代码,就会恍然大悟。


 


生成原理:


 


1、Axis将每个发布的服务生成一个对应的存根类,比如原来我的服务名为myws,那么生成后的存根就是MywsStub。


 


2、Axis将服务中每个方法生成一个存根下的内部类。


比如:


在服务端有这样的方法:public String doSomething(String taskname)


那么,生成的客户端中会有这样一个类:


MywsStub.DoSomething


这个类中还有自己的成员,成员即为原方法的参数。


 


四、封装客户端代码


 


一般来说,生成的WebService客户端代码都相当的乱,如果不懂规律,根本无法阅读。为了更好更方便更容易的调用WS服务,需要对客户端代码做进一步的封装。封装的点如下:


 


1、将存根中固定ip、端口改为变量。同时需要修改存根的构造方法。


2、构建一个和服务端对等的客户端类,并在其中的每个方法中再增加两个参数:ip和端口。


3、根据生成原理对客户端代码做更进一步封装。


4、发布客户端的jar。


 


按照以上的步骤,修改存根的构造方法。


并做进一步封装,封装代码如下:


/** 
* WS客户端封装代码 
* 
* @author leizhimin 2009-8-5 13:10:23 
*/     
public     class MywsClient {     
             public String doSomething(String taskname,String wsip,String port)     throws Exception { 
    
                MywsStub stub =     new MywsStub(wsip,port);     
                MywsStub.DoSomething opt =     new MywsStub.DoSomething();     
                opt.setTaskname(taskname);     
                     return stub.doSomething(opt).get_return();     
        }     

             public     static 
    void main(String[] args) 
    throws Exception { 
    
                MywsClient client =     new MywsClient();     
                String rs = client.doSomething(     "xxx",     "192.168.14.117", 
    "8080"); 
    
                System.out.println(rs);     
        }     
}      

     
 
  

   运行其中main测试方法如下: 
 
  

     xxxis finished! 
    

Process finished with exit code 0


看看客户端测试截图:


 



 


看看服务端tomcat的响应:


 



 


到此,客户端开发过程就结束了。