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)封装
package com.yht.msg.client;
import java.rmi.RemoteException;
import org.apache.axis2.AxisFault;
import com.yht.msg.SendAttach;
import com.yht.msg.SendAttachResponse;
import com.yht.msg.SendAttachServiceStub;
/**
* 调用wsdl文件生成的客户端类,创建一个客户端发送消息。
* @author Administrator
*
*/
public class SendAttachClient
{
/**
* 发送消息主题字符串。
*/
private String subject;
/**
* 服务地址。
*/
private String serviceAddress;
/**
* 声明客户端对象。
*/
private SendAttachServiceStub stub;
/**
* 设置消息体的主题内容。
* @param subject 主题内容。
*/
public void setSubject(String subject)
{
this.subject = subject;
}
/**
* 设置消息的服务地址,即你的消息要发到哪儿去。
* @param serviceAddress 服务地址。
*/
public void setServiceAddress(String serviceAddress)
{
this.serviceAddress = serviceAddress;
}
/**
* 发送消息的方法。
* @return 发送成功的响应。
*/
public String sendAttach()
{
String result = null;
SendAttachResponse response = null;
//1、根据服务地址,创建一个发送消息的客户端。
try
{
stub = new SendAttachServiceStub(serviceAddress);
}
catch (AxisFault e1)
{
// TODO Auto-generated catch block
e1.printStackTrace();
}
//2、创建一个发送消息的请求消息体。
SendAttach sendAttach14 = new SendAttach();
sendAttach14.setArgs0(subject);
//3、根据请求消息体,发送消息并获取响应。
try
{
response = stub.sendAttach(sendAttach14);
}
catch (RemoteException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
//4、如果获取的响应不为空,获取响应的字符串内容。
if(response != null)
{
result = response.get_return();
}
return result;
}
}
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>。
服务端源代码如下:
package com.yht.msg.service;
import com.yht.msg.SendAttach;
import com.yht.msg.SendAttachResponse;
import com.yht.msg.SendAttachServiceSkeletonInterface;
public class GetAttachService
implements SendAttachServiceSkeletonInterface
{
public SendAttachResponse sendAttach(SendAttach arg0)
{
// TODO Auto-generated method stub
System.out.println(arg0.getArgs0());
SendAttachResponse response = new SendAttachResponse();
response.set_return("success");
return response;
}
}
4、SoapUI调测
(1)客户端调测
将wsdl文件导入soapUI,配置soapUI接受消息地址,开启接受消息的服务端。写客户端测试代码如下:
package main;
import com.yht.msg.client.SendAttachClient;
/**
* 客户端测试类。
* @author Administrator
*
*/
public class Test
{
/**
* 入口方法。
* @param args
*/
public static void main(String[] args)
{
String result = null;
String subject = "Hello Axis2-1.6.2!";
String serviceAddress = "http://127.0.0.1:8088/SendAttachService";
//创建客户端类。
SendAttachClient client = new SendAttachClient();
//设置消息体内容。
client.setSubject(subject);
//设置服务地址。
client.setServiceAddress(serviceAddress);
//发送消息获取,结果。
result = client.sendAttach();
//打印结果。
System.out.println(result);
}
}
运行该类,查看开启的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的基本操作,参见附件。