写一个简单的java类,通过axis2发布为webservice,返回多个结果值,进行访问查询。
下面为java类
package yang.service.person;
import java.util.ArrayList;
import java.util.Iterator;
class Person {
private int num;
private String name;
private String sex;
public Person() {
this.num = 000;
this.name = "";
this.sex = "";
}
public Person(int num, String name, String sex) {
this.num = num;
this.name = name;
this.sex = sex;
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}
public class PersonService {
private static ArrayList <Person> person = new ArrayList<Person>();
public static void init(){
person.add(new Person(1001, "杨飞", "男"));
person.add(new Person(1002, "张三", "男"));
person.add(new Person(1003, "王五", "男"));
person.add(new Person(1004, "李四", "女"));
person.add(new Person(1005, "李四", "男"));
}
public static ArrayList<Person> Queryall(String query) {
init();
if (query.equals("*"))
return person;
else
return new ArrayList<Person>();
}
public static ArrayList<Person> QueryPersonByNum(int num){
ArrayList <Person> per = new ArrayList<Person>();
for (Iterator<Person> it = person.iterator(); it.hasNext();) {
Person pp = it.next();
if (pp.getNum() == num) {
per.add(pp);
}
}
return per;
}
public static ArrayList<Person> QueryPersonByName( String name){
ArrayList <Person> per = new ArrayList<Person>();
for (Iterator<Person> it = person.iterator(); it.hasNext();) {
Person pp = it.next();
if (pp.getName().equals(name)) {
per.add(pp);
}
}
return per;
}
public static ArrayList<Person> AddPerson(int num, String name, String sex){
ArrayList <Person> per = new ArrayList<Person>();
person.add(new Person(num, name, sex));
per.add(new Person(num, name, sex));
return per;
}
public static String DelPersonByNum(int num){
for (Iterator<Person> it = person.iterator(); it.hasNext();) {
Person pp = it.next();
if (pp.getNum() == num) {
person.remove(pp);
return "Deleted Successful";
}
}
return "Deleted Error";
}
public static ArrayList<Person> UpdatePersonByNum(int num, String name, String sex){
ArrayList <Person> per = new ArrayList<Person>();
int i = 0;
for (Iterator<Person> it = person.iterator(); it.hasNext(); ) {
Person pp = it.next();
if (pp.getNum() == num) {
person.get(i).setName(name);
person.get(i).setSex(sex);
per.add(new Person(num, name, sex));
}
i++;
}
return per;
}
}
利用axis2插件,发布为webservice,如下所示:
wsdl文件如下:
利用soapUI访问,首先访问Queryall进行数据初始化
QueryPersonByName
QueryPersonByNum
UpdatePersonByNum
AddPerson
DelPersonByNum
客户端代码测试,利用Httpclient访问服务
package com.yang.personservice.httpclient;
import java.io.IOException;
import org.apache.http.HttpEntity;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
public class PersonServiceClientTest {
public static void main(String[] args) throws ClientProtocolException,
IOException {
// 服务地址
String url = "http://localhost:8080/axis2/services/PersonService?wsdl";
// 请求报文
String soapRequestData = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
+ "<soap:Envelope xmlns:soap=\"http://www.w3.org/2003/05/soap-envelope\" xmlns=\"http://person.service.yang\">"
+ "<soap:Header/>"
+ "<soap:Body>"
+ "<QueryPersonByNum>"
+ "<num>1001</num>"
+ "</QueryPersonByNum>"
+ "</soap:Body>"
+ "</soap:Envelope>";
// 创建客户端
CloseableHttpClient httpclient = HttpClients.createDefault();
// *****************get方法请求数据*********************
// 创建httpget
HttpGet httpget = new HttpGet(url);
// 执行httpget
CloseableHttpResponse getresponse = httpclient.execute(httpget);
System.out.println("Get Response Result:" + getresponse.toString());
// 获取消息实体,输出响应内容
System.out.println("Get Response Entity********************** " );
HttpEntity entity = getresponse.getEntity();
if (entity != null) {
String message = EntityUtils.toString(entity);
System.out.println(message);
}
EntityUtils.consume(entity);
getresponse.close();
// httpclient.close();
// *****************post方法提交请求报文*********************
System.out.println("************服务请求********************\n");
// 创建httppost
HttpPost httppost = new HttpPost(url);
// 把Soap请求数据添加到ttppost
HttpEntity postrequest = new StringEntity(soapRequestData);
httppost.setHeader("Content-Type", "application/soap+xml; charset=utf-8");
httppost.setEntity(postrequest);
//输出httppost请求报文
System.out.println("SOAP Request********************** " );
//System.out.println(EntityUtils.toString(postrequest));
System.out.println(EntityUtils.toString(httppost.getEntity()));
//执行post请求,输出响应结果
System.out.println("SOAP Response ********************** " );
CloseableHttpResponse postresponse = httpclient.execute(httppost);
System.out.println(postresponse.getStatusLine());
HttpEntity postresponseentity = postresponse.getEntity();
String postresult = EntityUtils.toString(postresponseentity);
System.out.println(postresult);
EntityUtils.consume(postrequest);
EntityUtils.consume(postresponseentity);
httpclient.close();
}
}
结果如下:
HTTP/1.1 200 OK
<?xml version='1.0' encoding='utf-8'?><soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope"><soapenv:Body><ns:QueryPersonByNumResponse xmlns:ns="http://person.service.yang" xmlns:ax21="http://person.service.yang/xsd"><ns:return xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ax21:Person"><ax21:name>杨少飞</ax21:name><ax21:num>1001</ax21:num><ax21:sex>男</ax21:sex></ns:return></ns:QueryPersonByNumResponse></soapenv:Body></soapenv:Envelope>
利用axis2生成客户端代码
编写axis测试类
package yang.service.person.clienttest;
import java.rmi.RemoteException;
import yang.service.person.axiscode.PersonServiceStub;
import yang.service.person.axiscode.QueryPersonByNum;
import yang.service.person.axiscode.QueryPersonByNumResponse;
import yang.service.person.axiscode.Queryall;
import yang.service.person.axiscode.QueryallResponse;
public class PersonTest {
public static void main(String[] args) throws RemoteException {
// TODO Auto-generated method stub
PersonServiceStub personstub = new PersonServiceStub();
Queryall query = new Queryall();
query.setQuery("*");
QueryallResponse resonpse = personstub.queryall(query);
System.out.println(resonpse.get_return());
QueryPersonByNum query4 = new QueryPersonByNum();
query4.setNum(1001);
QueryPersonByNumResponse resonpse4 = personstub.queryPersonByNum(query4);
System.out.println(resonpse4.get_return());
}
}