基于CXF框架访问远程webService服务之获取快递信息

随着云计算的发展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": "湖北省武汉市汉口古田公司 已签收 签收人:退回件"
      }
    ]
  }
}
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值