1.定义basexml,放置response属性:java
使用注解app
@XmlAttribute
package com.zlg.test.xml; import javax.xml.bind.annotation.XmlAttribute; public class BaseXml { public static final String ERROR = "1"; public static final String SUCCESS = "0"; private String msgId; private String msg; private String sign; @XmlAttribute public String getMsgId() { return this.msgId; } public void setMsgId(String msgId) { this.msgId = msgId; } @XmlAttribute public String getMsg() { return this.msg; } public void setMsg(String msg) { this.msg = msg; } @XmlAttribute public String getSign() { return this.sign; } public void setSign(String sign) { this.sign = sign; } }
2.定义responsexml工具
使用注解,并命别名Response,以此咱们的类能够根据业务须要命名,对外提供统一的出口Response测试
@XmlRootElement(name = "Response")
package com.zlg.test.xml; import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement(name = "Response") public class ResponseXml extends BaseXml { private static final long serialVersionUID = 5594125247507960652L; private String code; private String description; private OrderResponseXml orderResponse; public String getCode() { return this.code; } public void setCode(String code) { this.code = code; } public String getDescription() { return this.description; } public void setDescription(String description) { this.description = description; } public OrderResponseXml getOrderResponse() { return this.orderResponse; } public void setOrderResponse(OrderResponseXml orderResponse) { this.orderResponse = orderResponse; } }
3.其余层级xml定义ui
OrderResponseXmlthis
package com.zlg.test.xml; import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement(name = "orderResponse") public class OrderResponseXml { private OrderXml order; public OrderXml getOrder() { return this.order; } public void setOrder(OrderXml order) { this.order = order; } }
OrderXmlspa
对于list元素须要添加以下注解,避免生成和读取时缺失list中节点内容code
@XmlElementWrapper(name="ticketOrders") @XmlElement(name="ticketOrder")
package com.zlg.test.xml; import java.util.List; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlElementWrapper; import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement(name = "order") public class OrderXml { private static final long serialVersionUID = 7931221549662303872L; private String orderId; private String partnerId; private List<TicketOrderXml> ticketOrders; @XmlElement public String getOrderId() { return orderId; } public void setOrderId(String orderId) { this.orderId = orderId; } public String getPartnerId() { return partnerId; } public void setPartnerId(String partnerId) { this.partnerId = partnerId; } public List<TicketOrderXml> getTicketOrders() { return ticketOrders; } @XmlElementWrapper(name="ticketOrders") @XmlElement(name="ticketOrder") public void setTicketOrders(List<TicketOrderXml> ticketOrders) { this.ticketOrders = ticketOrders; } }
TicketOrderXmlxml
package com.zlg.test.xml; import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement(name = "ticketOrder") public class TicketOrderXml { private String totalPrice; private String goodsName; public String getTotalPrice() { return totalPrice; } public void setTotalPrice(String totalPrice) { this.totalPrice = totalPrice; } public String getGoodsName() { return goodsName; } public void setGoodsName(String goodsName) { this.goodsName = goodsName; } }
备注:全部类,均须要使用注解@XmlRootElement(name = "ticketOrder") 能够命别名blog
4.转化工具类
package com.zlg.test.xml; import java.io.ByteArrayInputStream; import java.io.InputStream; import java.io.StringWriter; import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; /** * bean<->xml互转工具类 * @author zlg * @date 2017年6月20日 * modify history */ public class XmlHelper { public static <T extends BaseXml> T toObj(Class<T> clazz, String xml) { try { JAXBContext context = JAXBContext .newInstance(new Class[] { clazz }); InputStream buf = new ByteArrayInputStream(xml.getBytes("UTF-8")); return (T) context.createUnmarshaller().unmarshal(buf); } catch (Exception e) { e.printStackTrace(); } return null; } public static <T extends BaseXml> String toXml(T obj) { try { StringWriter write = new StringWriter(); JAXBContext context = JAXBContext.newInstance(new Class[] { obj .getClass() }); context.createMarshaller().marshal(obj, write); return write.getBuffer().toString(); } catch (JAXBException e) { e.printStackTrace(); } return ""; } }
5.测试类
package com.zlg.test.xml; /** * 测试 * @author zlg * @date 2017年6月20日 * modify history */ public class XmlTest { public static void main(String[] args) { StringBuilder sb = new StringBuilder(); sb.append("<Response sign='1234567'>"); sb.append("<code>1000</code>"); sb.append("<description>测试</description>"); sb.append("<orderResponse>"); sb.append("<order>"); sb.append("<orderId>330182198804273139</orderId>"); sb.append("<partnerId>12345</partnerId>"); sb.append("<ticketOrders>"); for (int i = 0; i <= 1; i++) { sb.append("<ticketOrder>"); sb.append("<totalPrice>100</totalPrice>"); sb.append("<goodsName>测试票</goodsName>"); sb.append("</ticketOrder>"); } sb.append("</ticketOrders>"); sb.append("</order>"); sb.append("</orderResponse>"); sb.append("</Response>"); System.out.println("原始字符串:" + sb.toString()); ResponseXml respone = (ResponseXml) XmlHelper.toObj(ResponseXml.class, sb.toString()); System.out.println("获取节点值:" + respone.getOrderResponse().getOrder().getOrderId()); System.out.println("获取属性:" + respone.getSign()); System.out.println("转换字符串:" + XmlHelper.toXml(respone)); } }