随着云计算的发展web service的应用也越来越广泛,随之而来的面向服务的架构(SOA)也是深入人心,下面就介绍一个基于CXF框架开发的访问快递服务的应用:
WSDL:http://web.36wu.com/ExpressService.asmx?WSDL
关于CXF框架的配置不再赘述,读者自行度娘,下面贴上详细代码,附带注释:
package client;
import java.util.ArrayList;
import java.util.List;
import com._36wu.ArrayOfExpressDetail;
import com._36wu.ArrayOfExpressType;
import com._36wu.ExpressDetail;
import com._36wu.ExpressService;
import com._36wu.ExpressServiceSoap;
import com._36wu.ExpressType;
import com._36wu.ResultOfListOfExpressDetail;
import com._36wu.ResultOfListOfExpressType;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.demos.dto.Express;
/**
*
* @author MRChai
*
*/
public class Test {
//存储所有快递商的集合
static List<Express> exps = new ArrayList<Express>();
//soap服务对象
static ExpressServiceSoap ess;
//开发者验证号(个人)
//有效期:24小时
//申请时间:2014-12-03
//申请地址:http://www.36wu.com/Apply
public static final String AUTHKEY = "42ceb3d44a54470c9348180972dd9e7e";
static{
//创建服务对象(远程提供)
ExpressService service = new ExpressService();
//获取SOAP服务消息对象
ess = service.getExpressServiceSoap();
ResultOfListOfExpressType rooet = ess.getExpressCom(AUTHKEY);
//获得数据(包含快递商详细信息)
ArrayOfExpressType aot = rooet.getData();
//获取所有快递商列表
List<ExpressType> list = aot.getExpressType();
for (ExpressType et : list) {
String com = et.getCom();//快递商服务代号
String name = et.getName();//快递上名称
exps.add(new Express(com, name));//将快递商对象添加到集合中
}
}
/**
* 获取所有快递商信息,以json返回
* @return
*/
public static String getExpsOfJson(){
ResultOfListOfExpressType rooet = ess.getExpressCom(AUTHKEY);
rooet.getData();
Gson gson = new GsonBuilder()
.setPrettyPrinting()
.create();
return gson.toJson(rooet);
}
/**
* 根据快递公司快递商名和快递单号查询快递信息
* @param name 快递商名称
* @param postid 快递单号
*/
public static void getExpressInfoByCom(String name,String postid){
String com = "";
for (Express e : exps) {
if(e.getName().equals(name)){
com = e.getCom();
break;
}
}
System.out.println("您输入的快递商名称:"+name+",快递商服务代码:"+com);
ResultOfListOfExpressDetail gei = ess.getGeneralExpressInfo(postid, com, AUTHKEY);
//获取快递数据
ArrayOfExpressDetail aed = gei.getData();
//获取快递详情
List<ExpressDetail> eds = aed.getExpressDetail();
for (ExpressDetail ed : eds) {
System.out.println(ed.getAcceptTime()+":"+ed.getRemark());
}
}
/**
* 根据快递公司快递商名和快递单号查询快递信息以json格式返回
* @param name 快递商名称
* @return 包含快递实时信息的json格式字符串
*/
public static String getExpressInfoByComofJson(String name,String postid){
String com = "";
//根据快递商名获取服务代号
for (Express e : exps) {
if(e.getName().equals(name)){
com = e.getCom();
break;
}
}
System.out.println("您输入的快递商名称:"+name+",快递商服务代码:"+com);
ResultOfListOfExpressDetail gei = ess.getGeneralExpressInfo(postid, com, AUTHKEY);
Gson gson = new GsonBuilder()
.setPrettyPrinting()
.create();
return gson.toJson(gei);
}
public static void main(String[] args) {
getExpressInfoByCom("圆通速递", "100113106641");
}
}
另外单独封装了快递商对象Express.java:
package com.demos.dto;
/**
*
* @author MRChai
*
*/
public class Express {
private String com; //服务商代码
private String name; //快递名称
public Express() {
}
public Express(String com, String name) {
super();
this.com = com;
this.name = name;
}
public String getCom() {
return com;
}
public void setCom(String com) {
this.com = com;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
运行效果图:
另附json格式显示方式:
String json = getExpressInfoByComofJson("圆通速递", "100113106641");
System.out.println(json);
结果:
您输入的快递商名称:圆通速递,快递商服务代码:yto
{
"status": 200,
"message": "OK",
"data": {
"expressDetail": [
{
"acceptTime": "2014/11/26 19:18:45",
"remark": "湖北省武汉市汉口古田公司 已收件"
},
{
"acceptTime": "2014/11/26 20:53:11",
"remark": "湖北省武汉市汉口古田公司 已发出"
},
{
"acceptTime": "2014/11/26 21:43:48",
"remark": "湖北省武汉市武昌区公司 已收入"
},
{
"acceptTime": "2014/11/27 1:04:56",
"remark": "武汉转运中心公司 已收入"
},
{
"acceptTime": "2014/11/27 1:15:55",
"remark": "武汉转运中心公司 已发出"
},
{
"acceptTime": "2014/11/27 5:17:34",
"remark": "湖北省武汉市武昌区公司 已发出"
},
{
"acceptTime": "2014/12/1 18:21:29",
"remark": "湖北省武汉市武昌区软件园站公司 已收入"
},
{
"acceptTime": "2014/12/1 18:21:37",
"remark": "湖北省武汉市武昌区软件园站公司 已发出"
},
{
"acceptTime": "2014/12/1 20:31:54",
"remark": "湖北省武汉市武昌区公司 已收入"
},
{
"acceptTime": "2014/12/1 20:32:45",
"remark": "湖北省武汉市武昌区公司 已发出"
},
{
"acceptTime": "2014/12/2 9:35:14",
"remark": "武汉转运中心公司 已收入"
},
{
"acceptTime": "2014/12/2 9:44:10",
"remark": "武汉转运中心公司 已发出"
},
{
"acceptTime": "2014/12/2 12:41:45",
"remark": "湖北省武汉市汉口古田公司 已收入"
},
{
"acceptTime": "2014/12/2 13:45:28",
"remark": "湖北省武汉市汉口古田公司 已签收 签收人:退回件"
}
]
}
}