1、封装准备

根据上篇,wsdl文件生成客户端和服务端代码后,需要做一定的封装,方便调用。

封装前做如下准备:

(1)将wsdl文件生成的java代码(上篇的工程AttachService中的src文件夹下的java代码。)打出jar包:AttachService-Axis2-1.6.2.jar。

(2)创建客户端和服务端封装工程:Demo-Axis2-1.6.2。注意:创建“Dynamic Web Project”工程。

(3)将Axis2的所有jar包(E:\axis2-1.6.2\lib),放到工程Demo-Axis2-1.6.2的lib下,导入工程的Libraries。

(4)将Axis2的conf文件夹(E:\axis2-1.6.2)拷贝到工程Demo-Axis2-1.6.2的WEB-INF文件夹下。

(5)将Axis2的modules和services文件夹(E:\axis2-1.6.2\repository)拷贝到工程Demo-Axis2-1.6.2的WEB-INF文件夹下。

(6)将Axis2的web.xml(E:\axis2-1.6.2\webapp\WEB-INF),拷贝到工程Demo-Axis2-1.6.2的WEB-INF文件夹下。

(7)将刚打出的AttachService-Axis2-1.6.2.jar,拷贝到Demo-Axis2-1.6.2的lib文件夹下;并导入工程的libraries中。

(8)将上一篇中生成的AttachService.aar服务包,放到Demo-Axis2-1.6.2的WEB-INF/services/文件夹下,(该文件夹就是刚拷贝进来的)。

2、客户端

(1)类名

在wsdl文件生成的客户端和服务端代码中,客户端类为:SendAttachServiceStub.java。(应该说以Stub结尾的这个类是客户端类)。我们就使用该类的对象,发送Soap消息。

(2)封装


  1. package com.yht.msg.client;  

  2.   

  3. import java.rmi.RemoteException;  

  4.   

  5. import org.apache.axis2.AxisFault;  

  6.   

  7. import com.yht.msg.SendAttach;  

  8. import com.yht.msg.SendAttachResponse;  

  9. import com.yht.msg.SendAttachServiceStub;  

  10.   

  11. /** 

  12.  * 调用wsdl文件生成的客户端类,创建一个客户端发送消息。 

  13.  * @author Administrator 

  14.  * 

  15.  */  

  16. public class SendAttachClient   

  17. {  

  18.     /** 

  19.      * 发送消息主题字符串。 

  20.      */  

  21.     private String subject;  

  22.       

  23.     /** 

  24.      * 服务地址。 

  25.      */  

  26.     private String serviceAddress;  

  27.       

  28.     /** 

  29.      * 声明客户端对象。 

  30.      */  

  31.     private SendAttachServiceStub stub;  

  32.       

  33.     /** 

  34.      * 设置消息体的主题内容。 

  35.      * @param subject 主题内容。 

  36.      */  

  37.     public void setSubject(String subject)  

  38.     {  

  39.         this.subject = subject;  

  40.     }  

  41.       

  42.     /** 

  43.      * 设置消息的服务地址,即你的消息要发到哪儿去。 

  44.      * @param serviceAddress 服务地址。 

  45.      */  

  46.     public void setServiceAddress(String serviceAddress)   

  47.     {  

  48.         this.serviceAddress = serviceAddress;  

  49.     }  

  50.   

  51.     /** 

  52.      * 发送消息的方法。 

  53.      * @return 发送成功的响应。 

  54.      */  

  55.     public String sendAttach()  

  56.     {  

  57.         String result = null;  

  58.         SendAttachResponse response = null;  

  59.           

  60.         //1、根据服务地址,创建一个发送消息的客户端。  

  61.         try  

  62.         {  

  63.             stub = new SendAttachServiceStub(serviceAddress);  

  64.         }  

  65.         catch (AxisFault e1)  

  66.         {  

  67.             // TODO Auto-generated catch block  

  68.             e1.printStackTrace();  

  69.         }  

  70.           

  71.         //2、创建一个发送消息的请求消息体。  

  72.         SendAttach sendAttach14 = new SendAttach();  

  73.         sendAttach14.setArgs0(subject);  

  74.           

  75.         //3、根据请求消息体,发送消息并获取响应。  

  76.         try  

  77.         {  

  78.             response = stub.sendAttach(sendAttach14);  

  79.         }  

  80.         catch (RemoteException e)  

  81.         {  

  82.             // TODO Auto-generated catch block  

  83.             e.printStackTrace();  

  84.         }  

  85.           

  86.         //4、如果获取的响应不为空,获取响应的字符串内容。  

  87.         if(response != null)  

  88.         {  

  89.             result = response.get_return();  

  90.         }  

  91.           

  92.         return result;  

  93.     }  

  94. }  



3、服务端

(1)接口

在wsdl文件生成的客户端和服务端代码中,会有一个接口类SendAttachServiceSkeletonInterface.java和接口实现类SendAttachServiceSkeleton.java。作为服务端时,service.xml中默认的处理接收消息的类就是SendAttachServiceSkeleton.java。

(2)调用

创建类GetAttachService实现接口SendAttachServiceSkeletonInterface。修改aar包中service.xml文件中的内容:<parameter name="ServiceClass">com.yht.msg.SendAttachServiceSkeleton</parameter>;将com.yht.msg.SendAttachServiceSkeleton替换为工程Demo-Axis2-1.6.2中实现了接口SendAttachServiceSkeletonInterface的类GetAttachService。即<parameter name="ServiceClass">com.yht.msg.service.GetAttachService</parameter>。

服务端源代码如下:


  1. package com.yht.msg.service;  

  2.   

  3. import com.yht.msg.SendAttach;  

  4. import com.yht.msg.SendAttachResponse;  

  5. import com.yht.msg.SendAttachServiceSkeletonInterface;  

  6.   

  7. public class GetAttachService   

  8.     implements SendAttachServiceSkeletonInterface  

  9. {  

  10.       

  11.     public SendAttachResponse sendAttach(SendAttach arg0)   

  12.     {  

  13.         // TODO Auto-generated method stub  

  14.         System.out.println(arg0.getArgs0());  

  15.           

  16.         SendAttachResponse response = new SendAttachResponse();  

  17.         response.set_return("success");  

  18.         return response;  

  19.     }  

  20.       

  21. }  


4、SoapUI调测

(1)客户端调测

将wsdl文件导入soapUI,配置soapUI接受消息地址,开启接受消息的服务端。写客户端测试代码如下:


  1. package main;  

  2.   

  3. import com.yht.msg.client.SendAttachClient;  

  4.   

  5. /** 

  6.  * 客户端测试类。 

  7.  * @author Administrator 

  8.  * 

  9.  */  

  10. public class Test   

  11. {  

  12.     /** 

  13.      * 入口方法。 

  14.      * @param args 

  15.      */  

  16.     public static void main(String[] args)  

  17.     {  

  18.         String result = null;  

  19.         String subject = "Hello Axis2-1.6.2!";  

  20.         String serviceAddress = "http://127.0.0.1:8088/SendAttachService";  

  21.           

  22.         //创建客户端类。  

  23.         SendAttachClient client = new SendAttachClient();  

  24.           

  25.         //设置消息体内容。  

  26.         client.setSubject(subject);  

  27.           

  28.         //设置服务地址。  

  29.         client.setServiceAddress(serviceAddress);  

  30.           

  31.         //发送消息获取,结果。  

  32.         result = client.sendAttach();  

  33.           

  34.         //打印结果。  

  35.         System.out.println(result);  

  36.     }  

  37. }  

运行该类,查看开启的soapUI是否正确接受到发送的消息。

(2)服务端调测

3.(2)中的demo服务端类,接受到消息体后打印消息内容,并返回响应“success”。将Demo-Axis2-1.6.2放到tomcat上启动;利用soapUI发送消息到Demo。soapUI发送地址如下:

地址格式:http://服务器IP:服务器端口/应用名/services/发布的服务名(service.xml中的service的名称)

地址实例:http://localhost:8080/Demo-Axis2-1.6.2/services/SendAttachService

发送后,查看eclipse控制台是否打印了,soapUI发送来的消息;soapUI是否正确接受了来自eclipse的响应“success”。

soapUI的基本操作,参见附件。