JAXB 专题二(BSP接口实战)
BSP下单接口
1、xml格式如下
- <?xml version="1.0" encoding="utf-8"?>
- <Request service="OrderService" lang="zh-CN">
- <Head>BSPdevelop</Head>
- <Body>
- <Order j_tel="联系电话" j_province="重庆" j_county="渝中区" j_contact="贺雄云" j_company="company1" j_city="重庆市" j_address="重庆重庆市渝中区测试一下" d_tel="电话" d_province="广东省"
d_county="南山区" d_contact="联系人" d_company="company1" d_city="深圳市" d_address="广东深圳宝安布心一村" pay_method="2" orderid="123456789"
is_gen_bill_no="1" is_docall="1" express_type="2">- <Cargo name="旧手机"/>
- </Order>
- </Body>
- </Request>
2、构造的xml实体类如下
- import java.util.List;
- import javax.xml.bind.annotation.XmlAttribute;
- import javax.xml.bind.annotation.XmlElement;
- import javax.xml.bind.annotation.XmlElementWrapper;
- import javax.xml.bind.annotation.XmlRootElement;
- import javax.xml.bind.annotation.XmlSeeAlso;
- import javax.xml.bind.annotation.XmlType;
- /**
- * @ClassName BSPRequest
- * @Description bsp接口请求元素
- * @author
- * @Date 2018年4月20日 下午4:46:04
- * @version 1.0.0
- * @param <T>
- */
- @XmlRootElement(name="Request")
- //@XmlSeeAlso({OrderServiceBody.class}) //工具类中实例化时如果没有加入泛型对象,也可以在这里利用此注解加入可能用到的所有泛型对象
- @XmlType(propOrder = { "head", "body"}) //指明生成xml的标签顺序,写属性名
- public class BSPRequest<T> {
- private String service; //请求接口服务名
- private String lang; //响应报文语言,中文简体:zh-CN
- private String head; //接入编码:BSPdevelop
- private T body; //body:请求数据XML
- @XmlAttribute(name="service")
- public String getService() {
- return service;
- }
- public void setService(String service) {
- this.service = service;
- }
- @XmlAttribute(name="lang")
- public String getLang() {
- return lang;
- }
- public void setLang(String lang) {
- this.lang = lang;
- }
- @XmlElement(name="Head")
- public String getHead() {
- return head;
- }
- public void setHead(String head) {
- this.head = head;
- }
- @XmlElement(name="Body")
- public T getBody() {
- return body;
- }
- public void setBody(T body) {
- this.body = body;
- }
- }
- import javax.xml.bind.annotation.XmlElement;
- /**
- * @ClassName OrderServiceBody
- * @Description BSP下单接口请求体
- * @author
- * @Date 2018年4月20日 下午5:18:28
- * @version 1.0.0
- */
- public class OrderServiceRequestBody {
- private BSPOrder order;//order:下单接口请求数据
- @XmlElement(name="Order")
- public BSPOrder getOrder() {
- return order;
- }
- public void setOrder(BSPOrder order) {
- this.order = order;
- }
- }
- import javax.xml.bind.annotation.XmlAttribute;
- import javax.xml.bind.annotation.XmlElement;
- /**
- * @ClassName BSPOrder
- * @Description 下单(含筛选)接口 Order元素
- * @author
- * @Date 2018年4月20日 下午4:45:56
- * @version 1.0.0
- */
- public class BSPOrder {
- private String orderId; //客户订单号
- private int isGenBillNo; //1:要求接口返回顺丰运单号
- private String jCompany; //寄件方公司名称
- private String jContact; //寄件方联系人
- private String jTel; //寄件方联系电话
- private String jProvince; //寄件方省
- private String jCity; //寄件方城市
- private String jCounty; //寄件方区/县
- private String jAddress; //寄件方详细地址
- private String dCompany; //到件方公司名称
- private String dContact; //到件方联系人
- private String dTel; //到件方联系电话
- private String dProvince; //到件方所在省份
- private String dCity; //到件方所在城市
- private String dCounty; //到件方所在县/区
- private String dAddress; //到件方详细地址
- private String custid; //顺丰月结卡号
- private int payMethod; //付款方式;1:寄方付 2:收方付 3:第三方付
- private String remark; //备注
- // private int isGenEletricPic; //是否生成电子运单图片,1为是
- private OrderCargo cargo; //order下的cargo元素
- private int isDocall; //是否要求通过是否手持终端;通知顺丰收派员收件;1:要求 ;其它为不要求
- private int expressType; //顺丰默认是1:顺丰特快,2:顺丰特惠;
- @XmlAttribute(name="orderid")
- public String getOrderId() {
- return orderId;
- }
- public void setOrderId(String orderId) {
- this.orderId = orderId;
- }
- @XmlAttribute(name="is_gen_bill_no")
- public int getIsGenBillNo() {
- return isGenBillNo;
- }
- public void setIsGenBillNo(int isGenBillNo) {
- this.isGenBillNo = isGenBillNo;
- }
- @XmlAttribute(name="j_company")
- public String getjCompany() {
- return jCompany;
- }
- public void setjCompany(String jCompany) {
- this.jCompany = jCompany;
- }
- @XmlAttribute(name="j_contact")
- public String getjContact() {
- return jContact;
- }
- public void setjContact(String jContact) {
- this.jContact = jContact;
- }
- @XmlAttribute(name="j_tel")
- public String getjTel() {
- return jTel;
- }
- public void setjTel(String jTel) {
- this.jTel = jTel;
- }
- @XmlAttribute(name="j_address")
- public String getjAddress() {
- return jAddress;
- }
- public void setjAddress(String jAddress) {
- this.jAddress = jAddress;
- }
- @XmlAttribute(name="d_company")
- public String getdCompany() {
- return dCompany;
- }
- public void setdCompany(String dCompany) {
- this.dCompany = dCompany;
- }
- @XmlAttribute(name="d_contact")
- public String getdContact() {
- return dContact;
- }
- public void setdContact(String dContact) {
- this.dContact = dContact;
- }
- @XmlAttribute(name="d_tel")
- public String getdTel() {
- return dTel;
- }
- public void setdTel(String dTel) {
- this.dTel = dTel;
- }
- @XmlAttribute(name="d_province")
- public String getdProvince() {
- return dProvince;
- }
- public void setdProvince(String dProvince) {
- this.dProvince = dProvince;
- }
- @XmlAttribute(name="d_city")
- public String getdCity() {
- return dCity;
- }
- public void setdCity(String dCity) {
- this.dCity = dCity;
- }
- @XmlAttribute(name="d_county")
- public String getdCounty() {
- return dCounty;
- }
- public void setdCounty(String dCounty) {
- this.dCounty = dCounty;
- }
- @XmlAttribute(name="d_address")
- public String getdAddress() {
- return dAddress;
- }
- public void setdAddress(String dAddress) {
- this.dAddress = dAddress;
- }
- @XmlAttribute(name="custid")
- public String getCustid() {
- return custid;
- }
- public void setCustid(String custid) {
- this.custid = custid;
- }
- @XmlAttribute(name="pay_method")
- public int getPayMethod() {
- return payMethod;
- }
- public void setPayMethod(int payMethod) {
- this.payMethod = payMethod;
- }
- @XmlAttribute(name="remark")
- public String getRemark() {
- return remark;
- }
- public void setRemark(String remark) {
- this.remark = remark;
- }
- @XmlElement(name="Cargo",required = true)
- public OrderCargo getCargo() {
- return cargo;
- }
- public void setCargo(OrderCargo cargo) {
- this.cargo = cargo;
- }
- @XmlAttribute(name="j_province")
- public String getjProvince() {
- return jProvince;
- }
- public void setjProvince(String jProvince) {
- this.jProvince = jProvince;
- }
- @XmlAttribute(name="j_city")
- public String getjCity() {
- return jCity;
- }
- public void setjCity(String jCity) {
- this.jCity = jCity;
- }
- @XmlAttribute(name="j_county")
- public String getjCounty() {
- return jCounty;
- }
- public void setjCounty(String jCounty) {
- this.jCounty = jCounty;
- }
- @XmlAttribute(name="is_docall")
- public int getIsDocall() {
- return isDocall;
- }
- public void setIsDocall(int isDocall) {
- this.isDocall = isDocall;
- }
- @XmlAttribute(name="express_type")
- public int getExpressType() {
- return expressType;
- }
- public void setExpressType(int expressType) {
- this.expressType = expressType;
- }
- }
- import javax.xml.bind.annotation.XmlAttribute;
- import javax.xml.bind.annotation.XmlElement;
- /**
- * @ClassName OrderCargo
- * @Description 元素<请求>Order/Cargo
- * @author
- * @Date 2018年4月20日 下午4:46:45
- * @version 1.0.0
- */
- public class OrderCargo {
- private String name; //货物名称:旧手机
- @XmlAttribute(name="name")
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- }
3、jaxb的工具类
- import java.io.StringReader;
- import java.io.StringWriter;
- import java.util.regex.Matcher;
- import java.util.regex.Pattern;
- import javax.xml.bind.JAXBContext;
- import javax.xml.bind.Marshaller;
- import javax.xml.bind.Unmarshaller;
- /**
- * @ClassName JaxbXmlUtil
- * @Description Jaxb工具类 xml和java类相互转换
- * @author
- * @Date 2018年4月20日 下午4:45:34
- * @version 1.0.0
- */
- public class JaxbXmlUtil {
- public static final String DEFAULT_ENCODING = "UTF-8";
- /**
- * pojo转换成xml 默认编码UTF-8
- *
- * @param obj 待转化的对象
- * @return xml格式字符串
- * @throws Exception JAXBException
- */
- public static String convertToXml(Object obj) throws Exception {
- return convertToXml(obj, DEFAULT_ENCODING);
- }
- /**
- * pojo转换成xml
- *
- * @param obj 待转化的对象
- * @param encoding 编码
- * @return xml格式字符串
- * @throws Exception JAXBException
- */
- public static String convertToXml(Object obj, String encoding) throws Exception {
- String result = null;
- JAXBContext context = JAXBContext.newInstance(obj.getClass(), OrderServiceRequestBody.class, RouteServiceRequestBody.class);//指定obj中可以传入的泛型对象,这里BSPRequest<T>使用了泛型,所以必须加入具体可能用到的泛型对象
- // JAXBContext context = JAXBContext.newInstance(obj.getClass());
- Marshaller marshaller = context.createMarshaller();
- // 指定是否使用换行和缩排对已编组 XML 数据进行格式化的属性名称。
- marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
- marshaller.setProperty(Marshaller.JAXB_ENCODING, encoding);
- StringWriter writer = new StringWriter();
- marshaller.marshal(obj, writer);
- result = writer.toString();
- return result;
- }
- /**
- * xml转换成JavaBean
- *
- * @param xml xml格式字符串
- * @param t 待转化的对象
- * @return 转化后的对象
- * @throws Exception JAXBException
- */
- @SuppressWarnings("unchecked")
- public static <T> T convertToJavaBean(String xml, Class<T> t) throws Exception {
- T obj = null;
- JAXBContext context = JAXBContext.newInstance(t);
- Unmarshaller unmarshaller = context.createUnmarshaller();
- obj = (T) unmarshaller.unmarshal(new StringReader(xml));
- return obj;
- }
- /**
- * @Description <body> 标签中其余字符去掉 (TODO这里用一句话描述这个方法的作用)
- * @param str
- * @return
- * @throws Exception
- */
- public static String StringFilter(String str)throws Exception {
- //将<Body xsi:type="orderServiceBody" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">替换为<Body>
- String regEx = "<Body(.|\\s)*?>";
- Pattern pattern = Pattern.compile(regEx);
- Matcher matcher = pattern.matcher(str);
- return matcher.replaceAll("<Body>").trim();
- }
- }
测试下单接口如下
- public class XMLTest {
- public static void main(String[] args) {
- try {
- BSPRequest<OrderServiceRequestBody> orderService = new BSPRequest<OrderServiceRequestBody>();
- orderService.setHead("BSPdevelop");
- orderService.setLang("zh-CN");
- orderService.setService("OrderService");
- BSPOrder order = new BSPOrder();
- order.setOrderId("15648154");
- order.setIsGenBillNo(1);
- order.setjProvince("重庆");
- order.setjCity("重庆");
- order.setjCounty("璧山区");
- order.setjAddress("广东省深圳市宝安区布心一村");
- order.setdCompany("公司1");
- order.setdContact("联系人");
- order.setdTel("电话");
- order.setdAddress("地址");
- order.setPayMethod(2);
- order.setjTel("电话");
- OrderCargo cargo = new OrderCargo();
- cargo.setName("旧手机");
- order.setCargo(cargo);
- OrderServiceRequestBody body = new OrderServiceRequestBody();
- body.setOrder(order);
- orderService.setBody(body);
- String xml = JaxbXmlUtil.convertToXml(orderService);
- System.out.println(xml);
- String xmlRequest = JaxbXmlUtil.StringFilter(xml).replace("standalone=\"yes\"", ""); //jaxb默认会生成standalone字符串,如果不想要可以这样替换为空串
- System.out.println(xmlRequest);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
BSP路由查询接口
1、xml格式如下
- <Request service='RouteService' lang='zh-CN'>
- <Head>BSPdevelop</Head>
- <Body>
- <RouteRequest
- tracking_type='1'
- method_type='1'
- tracking_number='444003077898'/>
- </Body>
- </Request>
2、构造的xml实体类如下(请求类和下单一样,只不过具体的请求体不一样)
- import javax.xml.bind.annotation.XmlElement;
- /**
- * @ClassName RouteServiceBody
- * @Description 路由查询接口请求体
- * @author
- * @Date 2018年4月24日 上午10:46:32
- * @version 1.0.0
- */
- public class RouteServiceRequestBody {
- private BSPRouteRequest routeRequest; //RouteRequest元素
- @XmlElement(name="RouteRequest")
- public BSPRouteRequest getRouteRequest() {
- return routeRequest;
- }
- public void setRouteRequest(BSPRouteRequest routeRequest) {
- this.routeRequest = routeRequest;
- }
- }
- import javax.xml.bind.annotation.XmlAttribute;
- /**
- * @ClassName BSPRouteRequest
- * @Description 路由查询接口RouteRequest元素
- * @author
- * @Date 2018年4月24日 上午10:48:57
- * @version 1.0.0
- */
- public class BSPRouteRequest {
- private int trackingType; //查询号类别,1:顺丰运单号查询;2:客户订单号查询
- private String trackingNumber; //查询号
- @XmlAttribute(name="tracking_type")
- public int getTrackingType() {
- return trackingType;
- }
- public void setTrackingType(int trackingType) {
- this.trackingType = trackingType;
- }
- @XmlAttribute(name="tracking_number")
- public String getTrackingNumber() {
- return trackingNumber;
- }
- public void setTrackingNumber(String trackingNumber) {
- this.trackingNumber = trackingNumber;
- }
- }
3、测试路由查询接口(jaxb工具类和前面一样)
- public class XMLTest {
- public static void main(String[] args) {
- try {
- BSPRequest<RouteServiceRequestBody> routeService = new BSPRequest<RouteServiceRequestBody>();
- routeService.setHead("BSPdevelop");
- routeService.setLang("zh-CN");
- routeService.setService("RouteService");
- RouteServiceRequestBody body = new RouteServiceRequestBody();
- BSPRouteRequest routeRequest = new BSPRouteRequest();
- routeRequest.setTrackingType(2);
- routeRequest.setTrackingNumber("哈哈");
- body.setRouteRequest(routeRequest);
- routeService.setBody(body);
- String xml = JaxbXmlUtil.convertToXml(routeService);
- System.out.println(xml);
- String xmlRequest = JaxbXmlUtil.StringFilter(xml).replace("standalone=\"yes\"", "");
- System.out.println(xmlRequest);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
这两个都是jaxb将java对象转换为xml的例子,下面讲一个xml转换为java对象的例子。
BSP路由查询接口的响应体XML转换为java对象
1、xml格式如下
- <?xml version="1.0" encoding="utf-8"?>
- <Response service="RouteService">
- <Head>OK</Head>
- <Body>
- <RouteResponse mailno="444003077899">
- <Route accept_time="2015-01-04 10:11:26" accept_address="深圳" remark="已收件" opcode="50"/>
- <Route accept_time="2015-01-05 17:41:50" remark="此件签单返还的单号为 123638813181" opcode="922"/>
- </RouteResponse>
- </Body>
- </Response>
2、构造的xml实体类如下
- import javax.xml.bind.annotation.XmlAttribute;
- import javax.xml.bind.annotation.XmlElement;
- import javax.xml.bind.annotation.XmlRootElement;
- import javax.xml.bind.annotation.XmlSeeAlso;
- import javax.xml.bind.annotation.XmlType;
- /**
- * @ClassName BSPResponse
- * @Description bsp响应接口
- * @author
- * @Date 2018年4月24日 上午11:19:14
- * @version 1.0.0
- */
- @XmlRootElement(name="Response")
- public class BSPResponse {
- private String service; //响应接口服务名
- private String head; //OK:交易成功,只返回Body元素;ERR:交易失败,只返回Error元素; Body元素和Error元素不能同时存在
- private BSPError error; //失败时的error元素
- private BSPResponseBody body; //响应体
- @XmlAttribute(name="service")
- public String getService() {
- return service;
- }
- public void setService(String service) {
- this.service = service;
- }
- @XmlElement(name="Head") //例如<Head>OK</Head>这样的用XmlElement注释,所以此注释是填充标签之间的内容;而XmlAttribute是填充开始标签中的属性值
- public String getHead() {
- return head;
- }
- public void setHead(String head) {
- this.head = head;
- }
- @XmlElement(name="ERROR")
- public BSPError getError() {
- return error;
- }
- public void setError(BSPError error) {
- this.error = error;
- }
- @XmlElement(name="Body")
- public BSPResponseBody getBody() {
- return body;
- }
- public void setBody(BSPResponseBody body) {
- this.body = body;
- }
- @Override
- public String toString() {
- return "BSPResponse [service=" + service + ", head=" + head + ", error=" + error + ", body=" + body + "]";
- }
- }
- import javax.xml.bind.annotation.XmlAttribute;
- import javax.xml.bind.annotation.XmlValue;
- /**
- * @ClassName BSPError
- * @Description 响应Error元素
- * @author
- * @Date 2018年4月24日 上午11:43:46
- * @version 1.0.0
- */
- public class BSPError {
- private int code; //错误代码
- private String message; //错误详细信息
- @XmlAttribute(name="code")
- public int getCode() {
- return code;
- }
- public void setCode(int code) {
- this.code = code;
- }
- @XmlValue //<ERROR code="4001">系统发生数据错误或运行时异常</ERROR>像这样,既有属性值,又有标签内容怎么办呢?就用到XmlValue注释,此注释就是添加内容,不会增加子标签;
- public String getMessage() {
- return message;
- }
- public void setMessage(String message) {
- this.message = message;
- }
- @Override
- public String toString() {
- return "BSPError [code=" + code + ", message=" + message + "]";
- }
- }
- import javax.xml.bind.annotation.XmlElement;
- /**
- * @ClassName BSPResponseBody
- * @Description BSP响应体(这里用一句话描述这个类的作用)
- * @author 贺雄云
- * @Date 2018年4月25日 上午11:41:04
- * @version 1.0.0
- */
- public class BSPResponseBody {
- private BSPOrderResponse orderResponse; //下单接口响应体
- private BSPRouteResponse routeResponse; //路由查询接口响应体内容
- @XmlElement(name="OrderResponse")
- public BSPOrderResponse getOrderResponse() {
- return orderResponse;
- }
- public void setOrderResponse(BSPOrderResponse orderResponse) {
- this.orderResponse = orderResponse;
- }
- @XmlElement(name="RouteResponse")
- public BSPRouteResponse getRouteResponse() {
- return routeResponse;
- }
- public void setRouteResponse(BSPRouteResponse routeResponse) {
- this.routeResponse = routeResponse;
- }
- }
注意:我们前面请求接口例子中,请求接口对象是可以用泛型的,可是我网上找了发现xml转换为javabean时用不了泛型,所以我就在响应体BSPResponseBody中写了多个响应体对象,这里有下单和路由查询两个响应体对象,这样我也不用重复写多个响应接口BSPResponse ,一个响应接口对象中有一个BSPResponseBody响应体对象,响应体对象中有多个不同的响应对象,即使要转换的xml中没有此对象也没关系,不过是转换后的java对象中对应的该对象为空而已,不会影响业务代码。
- import java.util.List;
- import javax.xml.bind.annotation.XmlAttribute;
- import javax.xml.bind.annotation.XmlElement;
- /**
- * @ClassName BSPRouteResponse
- * @Description 路由查询接口响应元素RouteResponse
- * @author
- * @Date 2018年4月25日 上午10:37:46
- * @version 1.0.0
- */
- public class BSPRouteResponse {
- private String mailNo; //顺丰运单号
- private String orderId; //客户订单号,按客户订单号查询时为必填。按顺丰运单号查询时为空。
- private List<RouteResponseRoute> routeResponseRouteList; //子元素 RouteResponse/Route,多个
- @XmlAttribute(name="mailno")
- public String getMailNo() {
- return mailNo;
- }
- public void setMailNo(String mailNo) {
- this.mailNo = mailNo;
- }
- @XmlAttribute(name="orderid")
- public String getOrderId() {
- return orderId;
- }
- public void setOrderId(String orderId) {
- this.orderId = orderId;
- }
- @XmlElement(name="Route")
- public List<RouteResponseRoute> getRouteResponseRouteList() {
- return routeResponseRouteList;
- }
- public void setRouteResponseRouteList(List<RouteResponseRoute> routeResponseRouteList) {
- this.routeResponseRouteList = routeResponseRouteList;
- }
- @Override
- public String toString() {
- return "BSPRouteResponse [mailNo=" + mailNo + ", orderId=" + orderId + ", routeResponseRouteList="
- + routeResponseRouteList + "]";
- }
- }
- import java.util.Date;
- import javax.xml.bind.annotation.XmlAttribute;
- import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
- /**
- * @ClassName RouteResponseRoute
- * @Description 路由查询接口 响应元素 RouteResponse/Route
- * @author
- * @Date 2018年4月25日 上午10:50:27
- * @version 1.0.0
- */
- public class RouteResponseRoute implements Comparable<RouteResponseRoute> {
- private Date acceptTime; //路由节点发生的时间,格式:YYYY-MM-DD HH24:MM:SS,示例:2012-7-30 09:30:00。
- private String acceptAddress; //路由节点发生的地点
- private String remark; //路由节点具体描述
- private String opcode; //路由节点操作码
- @XmlAttribute(name="accept_time")
- @XmlJavaTypeAdapter(JaxbDateSerializer.class) //日期格式的转换,定义了一个JaxbDateSerializer转换类,使用此注解就可以了
- public Date getAcceptTime() {
- return acceptTime;
- }
- public void setAcceptTime(Date acceptTime) {
- this.acceptTime = acceptTime;
- }
- @XmlAttribute(name="accept_address")
- public String getAcceptAddress() {
- return acceptAddress;
- }
- public void setAcceptAddress(String acceptAddress) {
- this.acceptAddress = acceptAddress;
- }
- @XmlAttribute(name="remark")
- public String getRemark() {
- return remark;
- }
- public void setRemark(String remark) {
- this.remark = remark;
- }
- @XmlAttribute(name="opcode")
- public String getOpcode() {
- return opcode;
- }
- public void setOpcode(String opcode) {
- this.opcode = opcode;
- }
- @Override
- public String toString() {
- return "RouteResponseRoute [acceptTime=" + acceptTime + ", acceptAddress=" + acceptAddress + ", remark="
- + remark + ", opcode=" + opcode + "]";
- }
- @Override
- public int compareTo(RouteResponseRoute o) {
- long l = this.getAcceptTime().getTime() - o.getAcceptTime().getTime();
- if (l > 0) {
- return -1;
- }else if (l == 0) {
- return 0;
- }else {
- return 1;
- }
- }
- }
- import java.text.SimpleDateFormat;
- import java.util.Date;
- import javax.xml.bind.annotation.adapters.XmlAdapter;
- //日期转化的类
- public class JaxbDateSerializer extends XmlAdapter<String, Date> {
- private SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
- @Override
- public Date unmarshal(String date) throws Exception {
- return dateFormat.parse(date);
- }
- @Override
- public String marshal(Date date) throws Exception {
- return dateFormat.format(date);
- }
- }
3、测试xml转换为java对象(jaxb工具类和前面一样)
- public class XMLTest {
- public static void main(String[] args) {
- try {
- BSPResponse response = JaxbXmlUtil.convertToJavaBean("<Response service='RouteService'><Head>OK</Head><Body><RouteResponse mailno='444003077899'><Route accept_time='2015-01-04 10:11:26' accept_address='深圳' remark='已收件' opcode='50'/><Route accept_time='2015-01-05 17:41:50' remark='此件签单返还的单号为 123638813181' opcode='922'/></RouteResponse></Body></Response>", BSPResponse.class);
- System.out.println("head:" + response.getHead());
- System.out.println("service:" + response.getService());
- System.out.println("error:" + response.getError());
- System.out.println("osrBody:" + response.getBody().getOrderResponse());
- System.out.println("rsrBody:" + response.getBody().getRouteResponse());
- System.out.println("RouteResponse/route:" + response.getBody().getRouteResponse().getRouteResponseRouteList());
- Date d1 = response.getBody().getRouteResponse().getRouteResponseRouteList().get(0).getAcceptTime();
- SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
- String str1 = sdf.format(d1);
- System.out.println(str1);
- Date d2 = response.getBody().getRouteResponse().getRouteResponseRouteList().get(1).getAcceptTime();
- String str2 = sdf.format(d2);
- System.out.println(str2);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
后续用到更复杂jaxb操作的再来补上....
JAXB 专题二(BSP接口实战)的更多相关文章
- 基于 abp vNext 和 .NET Core 开发博客项目 - 博客接口实战篇(二)
系列文章 基于 abp vNext 和 .NET Core 开发博客项目 - 使用 abp cli 搭建项目 基于 abp vNext 和 .NET Core 开发博客项目 - 给项目瘦身,让它跑起来 ...
- 性能测试专题:Locust工具实战之“蝗虫”降世
阅读全文需5分钟. 1. 前言 在上一篇文章中,我们已经为大家介绍了什么是Locust,具体可参照:性能专题:Locust工具实战之开篇哲学三问,简单来说,Locust 是基于 Python 语言下的 ...
- Postman系列三:Postman中post接口实战(上传文件、json请求)
一:接口测试过程中GET请求与POST请求的主要区别 从开发角度我们看get与post的主要区别是:1.Get是用来从服务器上获得数据,而Post是用来向服务器上传递数据:2.Get安全性比Post低 ...
- 基于 abp vNext 和 .NET Core 开发博客项目 - 博客接口实战篇(三)
系列文章 基于 abp vNext 和 .NET Core 开发博客项目 - 使用 abp cli 搭建项目 基于 abp vNext 和 .NET Core 开发博客项目 - 给项目瘦身,让它跑起来 ...
- 基于 abp vNext 和 .NET Core 开发博客项目 - 博客接口实战篇(四)
系列文章 基于 abp vNext 和 .NET Core 开发博客项目 - 使用 abp cli 搭建项目 基于 abp vNext 和 .NET Core 开发博客项目 - 给项目瘦身,让它跑起来 ...
- 基于 abp vNext 和 .NET Core 开发博客项目 - 博客接口实战篇(五)
系列文章 基于 abp vNext 和 .NET Core 开发博客项目 - 使用 abp cli 搭建项目 基于 abp vNext 和 .NET Core 开发博客项目 - 给项目瘦身,让它跑起来 ...
- 【算法系列学习三】[kuangbin带你飞]专题二 搜索进阶 之 A-Eight 反向bfs打表和康拓展开
[kuangbin带你飞]专题二 搜索进阶 之 A-Eight 这是一道经典的八数码问题.首先,简单介绍一下八数码问题: 八数码问题也称为九宫问题.在3×3的棋盘,摆有八个棋子,每个棋子上标有1至8的 ...
- 「kuangbin带你飞」专题二十 斜率DP
layout: post title: 「kuangbin带你飞」专题二十 斜率DP author: "luowentaoaa" catalog: true tags: mathj ...
- 「kuangbin带你飞」专题二十二 区间DP
layout: post title: 「kuangbin带你飞」专题二十二 区间DP author: "luowentaoaa" catalog: true tags: - ku ...
随机推荐
- 【JAVA】IOS内购二次验证及掉单问题解决
这个估计是我踩过的最大的坑,当时做微信支付的时候也没这么坑爹,当然他俩也半斤八两... 苹果官方明确表示:验证支付时,可能会有一定的延迟.第一次处理的时间就专注的解决这个问题了,忽略了掉单的问题(稍后 ...
- Excel 读写操作
读 import xlrd from xlrd.book import Book from xlrd.sheet import Sheet from xlrd.sheet import Cell wo ...
- AAC解码算法原理详解
”
- get传输时,会将加号+ 转换为空格
解决办法: 前端: 替换加号为 ‘%2B’, 后端: 直接接收即可.
- pod上传私有spec文件库
一.验证 function podlint() { pod lib lint $1.podspec --use-libraries --allow-warnings --verbose --sourc ...
- 重温CLR(八 ) 泛型
熟悉面向对象编程的开发人员都深谙面向对象的好处,其中一个好处是代码重用,它极大提高了开发效率.也就是说,可以派生出一个类,让他继承基类的所有能力.派生类只需要重写虚方法,或添加一些新方法,就可定制派生 ...
- SQLserver2008使用表达式递归查询
--由父项递归下级 with cte(id,parentid,text) as ( --父项 select id,parentid,text from treeview where parentid ...
- 8 函数类型——《Swift3.0从入门到出家
Swift语言中每一个函数都有它特定的数据类型,称其为函数类型 函数类型和基本数据类型一样,可以定义变量或者常量,可以定义函数形参,也可以做为函数的返回值类型 函数类型的格式为:参数列表的数据类型—& ...
- mysql中OPTIMIZE TABLE的作用及使用
来看看手册中关于 OPTIMIZE 的描述: OPTIMIZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tbl_name [, tbl_name] ... 如果您已经删除 ...
- 为IIS Host ASP.NET Web Api添加Owin Middleware
将OWIN App部署在IIS上 要想将Owin App部署在IIS上,只添加Package:Microsoft.OWIN.Host.SystemWeb包即可.它提供了所有Owin配置,Middlew ...