JAXB 专题二(BSP接口实战)

BSP下单接口

1、xml格式如下

1<?xml version="1.0" encoding="utf-8"?> 2 3<Request service="OrderService" lang="zh-CN"> 4 <Head>BSPdevelop</Head> 5 <Body> 6 <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"> 7 <Cargo name="旧手机"/> 8 </Order> 9 </Body> 10</Request>

2、构造的xml实体类如下

1import java.util.List; 2 3import javax.xml.bind.annotation.XmlAttribute; 4import javax.xml.bind.annotation.XmlElement; 5import javax.xml.bind.annotation.XmlElementWrapper; 6import javax.xml.bind.annotation.XmlRootElement; 7import javax.xml.bind.annotation.XmlSeeAlso; 8import javax.xml.bind.annotation.XmlType; 9 10/** 11 * @ClassName BSPRequest 12 * @Description bsp接口请求元素 13 * @author 14 * @Date 2018年4月20日 下午4:46:04 15 * @version 1.0.0 16 * @param <T> 17 */ 18@XmlRootElement(name="Request") 19//@XmlSeeAlso({OrderServiceBody.class}) //工具类中实例化时如果没有加入泛型对象,也可以在这里利用此注解加入可能用到的所有泛型对象 20@XmlType(propOrder = { "head", "body"}) //指明生成xml的标签顺序,写属性名 21public class BSPRequest<T> { 22 23 private String service; //请求接口服务名 24 private String lang; //响应报文语言,中文简体:zh-CN 25 private String head; //接入编码:BSPdevelop 26 private T body; //body:请求数据XML 27 28 @XmlAttribute(name="service") 29 public String getService() { 30 return service; 31 } 32 33 public void setService(String service) { 34 this.service = service; 35 } 36 37 @XmlAttribute(name="lang") 38 public String getLang() { 39 return lang; 40 } 41 42 public void setLang(String lang) { 43 this.lang = lang; 44 } 45 46 @XmlElement(name="Head") 47 public String getHead() { 48 return head; 49 } 50 51 public void setHead(String head) { 52 this.head = head; 53 } 54 55 @XmlElement(name="Body") 56 public T getBody() { 57 return body; 58 } 59 60 public void setBody(T body) { 61 this.body = body; 62 } 63 64} 65 66import javax.xml.bind.annotation.XmlElement; 67 68 69/** 70 * @ClassName OrderServiceBody 71 * @Description BSP下单接口请求体 72 * @author 73 * @Date 2018年4月20日 下午5:18:28 74 * @version 1.0.0 75 */ 76public class OrderServiceRequestBody { 77 private BSPOrder order;//order:下单接口请求数据 78 79 @XmlElement(name="Order") 80 public BSPOrder getOrder() { 81 return order; 82 } 83 84 public void setOrder(BSPOrder order) { 85 this.order = order; 86 } 87 88} 89 90import javax.xml.bind.annotation.XmlAttribute; 91import javax.xml.bind.annotation.XmlElement; 92 93/** 94 * @ClassName BSPOrder 95 * @Description 下单(含筛选)接口 Order元素 96 * @author 97 * @Date 2018年4月20日 下午4:45:56 98 * @version 1.0.0 99 */ 100public class BSPOrder { 101 private String orderId; //客户订单号 102 private int isGenBillNo; //1:要求接口返回顺丰运单号 103 private String jCompany; //寄件方公司名称 104 private String jContact; //寄件方联系人 105 private String jTel; //寄件方联系电话 106 private String jProvince; //寄件方省 107 private String jCity; //寄件方城市 108 private String jCounty; //寄件方区/县 109 private String jAddress; //寄件方详细地址 110 private String dCompany; //到件方公司名称 111 private String dContact; //到件方联系人 112 private String dTel; //到件方联系电话 113 private String dProvince; //到件方所在省份 114 private String dCity; //到件方所在城市 115 private String dCounty; //到件方所在县/区 116 private String dAddress; //到件方详细地址 117 private String custid; //顺丰月结卡号 118 private int payMethod; //付款方式;1:寄方付 2:收方付 3:第三方付 119 private String remark; //备注 120// private int isGenEletricPic; //是否生成电子运单图片,1为是 121 private OrderCargo cargo; //order下的cargo元素 122 private int isDocall; //是否要求通过是否手持终端;通知顺丰收派员收件;1:要求 ;其它为不要求 123 private int expressType; //顺丰默认是1:顺丰特快,2:顺丰特惠; 124 125 @XmlAttribute(name="orderid") 126 public String getOrderId() { 127 return orderId; 128 } 129 130 public void setOrderId(String orderId) { 131 this.orderId = orderId; 132 } 133 134 @XmlAttribute(name="is_gen_bill_no") 135 public int getIsGenBillNo() { 136 return isGenBillNo; 137 } 138 139 public void setIsGenBillNo(int isGenBillNo) { 140 this.isGenBillNo = isGenBillNo; 141 } 142 143 @XmlAttribute(name="j_company") 144 public String getjCompany() { 145 return jCompany; 146 } 147 148 public void setjCompany(String jCompany) { 149 this.jCompany = jCompany; 150 } 151 152 @XmlAttribute(name="j_contact") 153 public String getjContact() { 154 return jContact; 155 } 156 157 public void setjContact(String jContact) { 158 this.jContact = jContact; 159 } 160 161 @XmlAttribute(name="j_tel") 162 public String getjTel() { 163 return jTel; 164 } 165 166 public void setjTel(String jTel) { 167 this.jTel = jTel; 168 } 169 170 @XmlAttribute(name="j_address") 171 public String getjAddress() { 172 return jAddress; 173 } 174 175 public void setjAddress(String jAddress) { 176 this.jAddress = jAddress; 177 } 178 179 @XmlAttribute(name="d_company") 180 public String getdCompany() { 181 return dCompany; 182 } 183 184 public void setdCompany(String dCompany) { 185 this.dCompany = dCompany; 186 } 187 188 @XmlAttribute(name="d_contact") 189 public String getdContact() { 190 return dContact; 191 } 192 193 public void setdContact(String dContact) { 194 this.dContact = dContact; 195 } 196 197 @XmlAttribute(name="d_tel") 198 public String getdTel() { 199 return dTel; 200 } 201 202 public void setdTel(String dTel) { 203 this.dTel = dTel; 204 } 205 206 @XmlAttribute(name="d_province") 207 public String getdProvince() { 208 return dProvince; 209 } 210 211 public void setdProvince(String dProvince) { 212 this.dProvince = dProvince; 213 } 214 215 @XmlAttribute(name="d_city") 216 public String getdCity() { 217 return dCity; 218 } 219 220 public void setdCity(String dCity) { 221 this.dCity = dCity; 222 } 223 224 @XmlAttribute(name="d_county") 225 public String getdCounty() { 226 return dCounty; 227 } 228 229 public void setdCounty(String dCounty) { 230 this.dCounty = dCounty; 231 } 232 233 @XmlAttribute(name="d_address") 234 public String getdAddress() { 235 return dAddress; 236 } 237 238 public void setdAddress(String dAddress) { 239 this.dAddress = dAddress; 240 } 241 242 @XmlAttribute(name="custid") 243 public String getCustid() { 244 return custid; 245 } 246 247 public void setCustid(String custid) { 248 this.custid = custid; 249 } 250 251 @XmlAttribute(name="pay_method") 252 public int getPayMethod() { 253 return payMethod; 254 } 255 256 public void setPayMethod(int payMethod) { 257 this.payMethod = payMethod; 258 } 259 260 @XmlAttribute(name="remark") 261 public String getRemark() { 262 return remark; 263 } 264 265 public void setRemark(String remark) { 266 this.remark = remark; 267 } 268 269 @XmlElement(name="Cargo",required = true) 270 public OrderCargo getCargo() { 271 return cargo; 272 } 273 274 public void setCargo(OrderCargo cargo) { 275 this.cargo = cargo; 276 } 277 278 @XmlAttribute(name="j_province") 279 public String getjProvince() { 280 return jProvince; 281 } 282 283 284 public void setjProvince(String jProvince) { 285 this.jProvince = jProvince; 286 } 287 288 @XmlAttribute(name="j_city") 289 public String getjCity() { 290 return jCity; 291 } 292 293 294 public void setjCity(String jCity) { 295 this.jCity = jCity; 296 } 297 298 @XmlAttribute(name="j_county") 299 public String getjCounty() { 300 return jCounty; 301 } 302 303 304 public void setjCounty(String jCounty) { 305 this.jCounty = jCounty; 306 } 307 308 @XmlAttribute(name="is_docall") 309 public int getIsDocall() { 310 return isDocall; 311 } 312 313 public void setIsDocall(int isDocall) { 314 this.isDocall = isDocall; 315 } 316 317 @XmlAttribute(name="express_type") 318 public int getExpressType() { 319 return expressType; 320 } 321 322 public void setExpressType(int expressType) { 323 this.expressType = expressType; 324 } 325 326 327} 328 329import javax.xml.bind.annotation.XmlAttribute; 330import javax.xml.bind.annotation.XmlElement; 331 332 333/** 334 * @ClassName OrderCargo 335 * @Description 元素<请求>Order/Cargo 336 * @author 337 * @Date 2018年4月20日 下午4:46:45 338 * @version 1.0.0 339 */ 340public class OrderCargo { 341 private String name; //货物名称:旧手机 342 343 344 @XmlAttribute(name="name") 345 public String getName() { 346 return name; 347 } 348 349 public void setName(String name) { 350 this.name = name; 351 } 352}

3、jaxb的工具类

1import java.io.StringReader; 2import java.io.StringWriter; 3import java.util.regex.Matcher; 4import java.util.regex.Pattern; 5 6import javax.xml.bind.JAXBContext; 7import javax.xml.bind.Marshaller; 8import javax.xml.bind.Unmarshaller; 9/** 10 * @ClassName JaxbXmlUtil 11 * @Description Jaxb工具类 xml和java类相互转换 12 * @author 13 * @Date 2018年4月20日 下午4:45:34 14 * @version 1.0.0 15 */ 16public class JaxbXmlUtil { 17 18 public static final String DEFAULT_ENCODING = "UTF-8"; 19 20 /** 21 * pojo转换成xml 默认编码UTF-8 22 * 23 * @param obj 待转化的对象 24 * @return xml格式字符串 25 * @throws Exception JAXBException 26 */ 27 public static String convertToXml(Object obj) throws Exception { 28 return convertToXml(obj, DEFAULT_ENCODING); 29 } 30 31 /** 32 * pojo转换成xml 33 * 34 * @param obj 待转化的对象 35 * @param encoding 编码 36 * @return xml格式字符串 37 * @throws Exception JAXBException 38 */ 39 public static String convertToXml(Object obj, String encoding) throws Exception { 40 String result = null; 41 JAXBContext context = JAXBContext.newInstance(obj.getClass(), OrderServiceRequestBody.class, RouteServiceRequestBody.class);//指定obj中可以传入的泛型对象,这里BSPRequest<T>使用了泛型,所以必须加入具体可能用到的泛型对象 42// JAXBContext context = JAXBContext.newInstance(obj.getClass()); 43 Marshaller marshaller = context.createMarshaller(); 44 // 指定是否使用换行和缩排对已编组 XML 数据进行格式化的属性名称。 45 marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); 46 marshaller.setProperty(Marshaller.JAXB_ENCODING, encoding); 47 48 StringWriter writer = new StringWriter(); 49 marshaller.marshal(obj, writer); 50 result = writer.toString(); 51 52 return result; 53 } 54 55 /** 56 * xml转换成JavaBean 57 * 58 * @param xml xml格式字符串 59 * @param t 待转化的对象 60 * @return 转化后的对象 61 * @throws Exception JAXBException 62 */ 63 @SuppressWarnings("unchecked") 64 public static <T> T convertToJavaBean(String xml, Class<T> t) throws Exception { 65 T obj = null; 66 JAXBContext context = JAXBContext.newInstance(t); 67 Unmarshaller unmarshaller = context.createUnmarshaller(); 68 obj = (T) unmarshaller.unmarshal(new StringReader(xml)); 69 return obj; 70 } 71 72 /** 73 * @Description <body> 标签中其余字符去掉 (TODO这里用一句话描述这个方法的作用) 74 * @param str 75 * @return 76 * @throws Exception 77 */ 78 public static String StringFilter(String str)throws Exception { 79 //将<Body xsi:type="orderServiceBody" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">替换为<Body> 80 String regEx = "<Body(.|\\s)*?>"; 81 Pattern pattern = Pattern.compile(regEx); 82 Matcher matcher = pattern.matcher(str); 83 return matcher.replaceAll("<Body>").trim(); 84 } 85}

测试下单接口如下

1public class XMLTest { 2 public static void main(String[] args) { 3 try { 4 BSPRequest<OrderServiceRequestBody> orderService = new BSPRequest<OrderServiceRequestBody>(); 5 orderService.setHead("BSPdevelop"); 6 orderService.setLang("zh-CN"); 7 orderService.setService("OrderService"); 8 9 BSPOrder order = new BSPOrder(); 10 order.setOrderId("15648154"); 11 order.setIsGenBillNo(1); 12 order.setjProvince("重庆"); 13 order.setjCity("重庆"); 14 order.setjCounty("璧山区"); 15 order.setjAddress("广东省深圳市宝安区布心一村"); 16 order.setdCompany("公司1"); 17 order.setdContact("联系人"); 18 order.setdTel("电话"); 19 order.setdAddress("地址"); 20 order.setPayMethod(2); 21 22 order.setjTel("电话"); 23 24 OrderCargo cargo = new OrderCargo(); 25 cargo.setName("旧手机"); 26 order.setCargo(cargo); 27 28 OrderServiceRequestBody body = new OrderServiceRequestBody(); 29 body.setOrder(order); 30 orderService.setBody(body); 31 32 String xml = JaxbXmlUtil.convertToXml(orderService); 33 System.out.println(xml); 34 String xmlRequest = JaxbXmlUtil.StringFilter(xml).replace("standalone=\"yes\"", ""); //jaxb默认会生成standalone字符串,如果不想要可以这样替换为空串 35 System.out.println(xmlRequest); 36 37 } catch (Exception e) { 38 e.printStackTrace(); 39 } 40 41 } 42}

BSP路由查询接口

1、xml格式如下

1<Request service='RouteService' lang='zh-CN'> 2<Head>BSPdevelop</Head> 3<Body> 4<RouteRequest 5tracking_type='1' 6method_type='1' 7tracking_number='444003077898'/> 8</Body> 9</Request>

2、构造的xml实体类如下(请求类和下单一样,只不过具体的请求体不一样)

1import javax.xml.bind.annotation.XmlElement; 2/** 3 * @ClassName RouteServiceBody 4 * @Description 路由查询接口请求体 5 * @author 6 * @Date 2018年4月24日 上午10:46:32 7 * @version 1.0.0 8 */ 9public class RouteServiceRequestBody { 10 private BSPRouteRequest routeRequest; //RouteRequest元素 11 12 @XmlElement(name="RouteRequest") 13 public BSPRouteRequest getRouteRequest() { 14 return routeRequest; 15 } 16 17 public void setRouteRequest(BSPRouteRequest routeRequest) { 18 this.routeRequest = routeRequest; 19 } 20 21 22} 23 24import javax.xml.bind.annotation.XmlAttribute; 25 26/** 27 * @ClassName BSPRouteRequest 28 * @Description 路由查询接口RouteRequest元素 29 * @author 30 * @Date 2018年4月24日 上午10:48:57 31 * @version 1.0.0 32 */ 33public class BSPRouteRequest { 34 private int trackingType; //查询号类别,1:顺丰运单号查询;2:客户订单号查询 35 private String trackingNumber; //查询号 36 37 @XmlAttribute(name="tracking_type") 38 public int getTrackingType() { 39 return trackingType; 40 } 41 42 public void setTrackingType(int trackingType) { 43 this.trackingType = trackingType; 44 } 45 46 @XmlAttribute(name="tracking_number") 47 public String getTrackingNumber() { 48 return trackingNumber; 49 } 50 51 public void setTrackingNumber(String trackingNumber) { 52 this.trackingNumber = trackingNumber; 53 } 54 55 56}

3、测试路由查询接口(jaxb工具类和前面一样)

1public class XMLTest { 2 public static void main(String[] args) { 3 try { 4 BSPRequest<RouteServiceRequestBody> routeService = new BSPRequest<RouteServiceRequestBody>(); 5 routeService.setHead("BSPdevelop"); 6 routeService.setLang("zh-CN"); 7 routeService.setService("RouteService"); 8 RouteServiceRequestBody body = new RouteServiceRequestBody(); 9 BSPRouteRequest routeRequest = new BSPRouteRequest(); 10 routeRequest.setTrackingType(2); 11 routeRequest.setTrackingNumber("哈哈"); 12 body.setRouteRequest(routeRequest); 13 routeService.setBody(body); 14 15 String xml = JaxbXmlUtil.convertToXml(routeService); 16 System.out.println(xml); 17 String xmlRequest = JaxbXmlUtil.StringFilter(xml).replace("standalone=\"yes\"", ""); 18 System.out.println(xmlRequest); 19 20 21 } catch (Exception e) { 22 e.printStackTrace(); 23 } 24 25 } 26}

这两个都是jaxb将java对象转换为xml的例子,下面讲一个xml转换为java对象的例子。

BSP路由查询接口的响应体XML转换为java对象

1、xml格式如下

1<?xml version="1.0" encoding="utf-8"?> 2 3<Response service="RouteService"> 4 <Head>OK</Head> 5 <Body> 6 <RouteResponse mailno="444003077899"> 7 <Route accept_time="2015-01-04 10:11:26" accept_address="深圳" remark="已收件" opcode="50"/> 8 <Route accept_time="2015-01-05 17:41:50" remark="此件签单返还的单号为 123638813181" opcode="922"/> 9 </RouteResponse> 10 </Body> 11</Response>

2、构造的xml实体类如下

1import javax.xml.bind.annotation.XmlAttribute; 2import javax.xml.bind.annotation.XmlElement; 3import javax.xml.bind.annotation.XmlRootElement; 4import javax.xml.bind.annotation.XmlSeeAlso; 5import javax.xml.bind.annotation.XmlType; 6 7/** 8 * @ClassName BSPResponse 9 * @Description bsp响应接口 10 * @author 11 * @Date 2018年4月24日 上午11:19:14 12 * @version 1.0.0 13 */ 14@XmlRootElement(name="Response") 15public class BSPResponse { 16 private String service; //响应接口服务名 17 private String head; //OK:交易成功,只返回Body元素;ERR:交易失败,只返回Error元素; Body元素和Error元素不能同时存在 18 private BSPError error; //失败时的error元素 19 private BSPResponseBody body; //响应体 20 21 @XmlAttribute(name="service") 22 public String getService() { 23 return service; 24 } 25 26 public void setService(String service) { 27 this.service = service; 28 } 29 30 @XmlElement(name="Head") //例如<Head>OK</Head>这样的用XmlElement注释,所以此注释是填充标签之间的内容;而XmlAttribute是填充开始标签中的属性值 31 public String getHead() { 32 return head; 33 } 34 35 public void setHead(String head) { 36 this.head = head; 37 } 38 39 @XmlElement(name="ERROR") 40 public BSPError getError() { 41 return error; 42 } 43 44 public void setError(BSPError error) { 45 this.error = error; 46 } 47 48 @XmlElement(name="Body") 49 public BSPResponseBody getBody() { 50 return body; 51 } 52 53 public void setBody(BSPResponseBody body) { 54 this.body = body; 55 } 56 57 @Override 58 public String toString() { 59 return "BSPResponse [service=" + service + ", head=" + head + ", error=" + error + ", body=" + body + "]"; 60 } 61 62} 63 64import javax.xml.bind.annotation.XmlAttribute; 65import javax.xml.bind.annotation.XmlValue; 66 67 68/** 69 * @ClassName BSPError 70 * @Description 响应Error元素 71 * @author 72 * @Date 2018年4月24日 上午11:43:46 73 * @version 1.0.0 74 */ 75public class BSPError { 76 private int code; //错误代码 77 private String message; //错误详细信息 78 79 @XmlAttribute(name="code") 80 public int getCode() { 81 return code; 82 } 83 84 public void setCode(int code) { 85 this.code = code; 86 } 87 88 @XmlValue //<ERROR code="4001">系统发生数据错误或运行时异常</ERROR>像这样,既有属性值,又有标签内容怎么办呢?就用到XmlValue注释,此注释就是添加内容,不会增加子标签; 89 public String getMessage() { 90 return message; 91 } 92 93 public void setMessage(String message) { 94 this.message = message; 95 } 96 97 @Override 98 public String toString() { 99 return "BSPError [code=" + code + ", message=" + message + "]"; 100 } 101 102 103} 104 105import javax.xml.bind.annotation.XmlElement; 106 107/** 108 * @ClassName BSPResponseBody 109 * @Description BSP响应体(这里用一句话描述这个类的作用) 110 * @author 贺雄云 111 * @Date 2018年4月25日 上午11:41:04 112 * @version 1.0.0 113 */ 114public class BSPResponseBody { 115 private BSPOrderResponse orderResponse; //下单接口响应体 116 private BSPRouteResponse routeResponse; //路由查询接口响应体内容 117 118 @XmlElement(name="OrderResponse") 119 public BSPOrderResponse getOrderResponse() { 120 return orderResponse; 121 } 122 123 public void setOrderResponse(BSPOrderResponse orderResponse) { 124 this.orderResponse = orderResponse; 125 } 126 127 @XmlElement(name="RouteResponse") 128 public BSPRouteResponse getRouteResponse() { 129 return routeResponse; 130 } 131 132 public void setRouteResponse(BSPRouteResponse routeResponse) { 133 this.routeResponse = routeResponse; 134 } 135}

注意:我们前面请求接口例子中,请求接口对象是可以用泛型的,可是我网上找了发现xml转换为javabean时用不了泛型,所以我就在响应体BSPResponseBody中写了多个响应体对象,这里有下单和路由查询两个响应体对象,这样我也不用重复写多个响应接口BSPResponse ,一个响应接口对象中有一个BSPResponseBody响应体对象,响应体对象中有多个不同的响应对象,即使要转换的xml中没有此对象也没关系,不过是转换后的java对象中对应的该对象为空而已,不会影响业务代码。

1import java.util.List; 2 3import javax.xml.bind.annotation.XmlAttribute; 4import javax.xml.bind.annotation.XmlElement; 5 6 7/** 8 * @ClassName BSPRouteResponse 9 * @Description 路由查询接口响应元素RouteResponse 10 * @author 11 * @Date 2018年4月25日 上午10:37:46 12 * @version 1.0.0 13 */ 14public class BSPRouteResponse { 15 private String mailNo; //顺丰运单号 16 private String orderId; //客户订单号,按客户订单号查询时为必填。按顺丰运单号查询时为空。 17 private List<RouteResponseRoute> routeResponseRouteList; //子元素 RouteResponse/Route,多个 18 19 @XmlAttribute(name="mailno") 20 public String getMailNo() { 21 return mailNo; 22 } 23 24 public void setMailNo(String mailNo) { 25 this.mailNo = mailNo; 26 } 27 28 @XmlAttribute(name="orderid") 29 public String getOrderId() { 30 return orderId; 31 } 32 33 public void setOrderId(String orderId) { 34 this.orderId = orderId; 35 } 36 37 @XmlElement(name="Route") 38 public List<RouteResponseRoute> getRouteResponseRouteList() { 39 return routeResponseRouteList; 40 } 41 42 public void setRouteResponseRouteList(List<RouteResponseRoute> routeResponseRouteList) { 43 this.routeResponseRouteList = routeResponseRouteList; 44 } 45 46 @Override 47 public String toString() { 48 return "BSPRouteResponse [mailNo=" + mailNo + ", orderId=" + orderId + ", routeResponseRouteList=" 49 + routeResponseRouteList + "]"; 50 } 51 52} 53 54import java.util.Date; 55 56import javax.xml.bind.annotation.XmlAttribute; 57import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; 58 59 60/** 61 * @ClassName RouteResponseRoute 62 * @Description 路由查询接口 响应元素 RouteResponse/Route 63 * @author 64 * @Date 2018年4月25日 上午10:50:27 65 * @version 1.0.0 66 */ 67public class RouteResponseRoute implements Comparable<RouteResponseRoute> { 68 private Date acceptTime; //路由节点发生的时间,格式:YYYY-MM-DD HH24:MM:SS,示例:2012-7-30 09:30:00。 69 private String acceptAddress; //路由节点发生的地点 70 private String remark; //路由节点具体描述 71 private String opcode; //路由节点操作码 72 73 @XmlAttribute(name="accept_time") 74 @XmlJavaTypeAdapter(JaxbDateSerializer.class) //日期格式的转换,定义了一个JaxbDateSerializer转换类,使用此注解就可以了 75 public Date getAcceptTime() { 76 return acceptTime; 77 } 78 79 public void setAcceptTime(Date acceptTime) { 80 this.acceptTime = acceptTime; 81 } 82 83 @XmlAttribute(name="accept_address") 84 public String getAcceptAddress() { 85 return acceptAddress; 86 } 87 88 public void setAcceptAddress(String acceptAddress) { 89 this.acceptAddress = acceptAddress; 90 } 91 92 @XmlAttribute(name="remark") 93 public String getRemark() { 94 return remark; 95 } 96 97 public void setRemark(String remark) { 98 this.remark = remark; 99 } 100 101 @XmlAttribute(name="opcode") 102 public String getOpcode() { 103 return opcode; 104 } 105 106 public void setOpcode(String opcode) { 107 this.opcode = opcode; 108 } 109 110 @Override 111 public String toString() { 112 return "RouteResponseRoute [acceptTime=" + acceptTime + ", acceptAddress=" + acceptAddress + ", remark=" 113 + remark + ", opcode=" + opcode + "]"; 114 } 115 116 @Override 117 public int compareTo(RouteResponseRoute o) { 118 long l = this.getAcceptTime().getTime() - o.getAcceptTime().getTime(); 119 if (l > 0) { 120 return -1; 121 }else if (l == 0) { 122 return 0; 123 }else { 124 return 1; 125 } 126 } 127 128} 129 130import java.text.SimpleDateFormat; 131import java.util.Date; 132import javax.xml.bind.annotation.adapters.XmlAdapter; 133 134//日期转化的类 135public class JaxbDateSerializer extends XmlAdapter<String, Date> { 136 137 private SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 138 139 @Override 140 public Date unmarshal(String date) throws Exception { 141 return dateFormat.parse(date); 142 } 143 144 @Override 145 public String marshal(Date date) throws Exception { 146 return dateFormat.format(date); 147 } 148 149}

3、测试xml转换为java对象(jaxb工具类和前面一样)

1public class XMLTest { 2 public static void main(String[] args) { 3 try { 4 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); 5 System.out.println("head:" + response.getHead()); 6 System.out.println("service:" + response.getService()); 7 System.out.println("error:" + response.getError()); 8 System.out.println("osrBody:" + response.getBody().getOrderResponse()); 9 System.out.println("rsrBody:" + response.getBody().getRouteResponse()); 10 System.out.println("RouteResponse/route:" + response.getBody().getRouteResponse().getRouteResponseRouteList()); 11 Date d1 = response.getBody().getRouteResponse().getRouteResponseRouteList().get(0).getAcceptTime(); 12 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 13 String str1 = sdf.format(d1); 14 System.out.println(str1); 15 Date d2 = response.getBody().getRouteResponse().getRouteResponseRouteList().get(1).getAcceptTime(); 16 String str2 = sdf.format(d2); 17 System.out.println(str2); 18 19 } catch (Exception e) { 20 e.printStackTrace(); 21 } 22 23 } 24}

后续用到更复杂jaxb操作的再来补上....

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )