Java的Bean和xml之间的转换
转换工具类代码:
package com.tencent.sxwx.payment.postOffice.util;
import java.io.StringReader;
import java.io.StringWriter;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
/**
*
* @author 微软
*
*/
public class JaxbXmlUtil {
public static final String DEFAULT_ENCODING = "GBK";
/**
* 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());
Marshaller marshaller = context.createMarshaller();
// 指定是否使用换行和缩排对已编组 XML 数据进行格式化的属性名称。
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.setProperty(Marshaller.JAXB_ENCODING, encoding);
marshaller.setProperty(Marshaller.JAXB_FRAGMENT, true);
StringWriter writer = new StringWriter();
writer.write("<?xml version=\"1.0\" encoding=\"GBK\" ?>\n");
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;
}
}
Message代码:
package com.tencent.sxwx.payment.postOffice.entityInfo;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
/**
* 报文主体
*
* @author guoqing
*
*/
@XmlRootElement(name = "Message")
@XmlAccessorType(XmlAccessType.FIELD)
public class Message {
@XmlElement(name = "MsgHead")
MsgHeadInfo head;
@XmlElement(name = "MsgBody")
MsgBodyInfo body;
public MsgHeadInfo getHead() {
return head;
}
public void setHead(MsgHeadInfo head) {
this.head = head;
}
public MsgBodyInfo getBody() {
return body;
}
public void setBody(MsgBodyInfo body) {
this.body = body;
}
}
MsgHeadInfo代码:
package com.tencent.sxwx.payment.postOffice.entityInfo;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
/**
* 退款信息
*
* @author guoqing
*
*/
@XmlAccessorType(XmlAccessType.FIELD)
public class MsgHeadInfo {
@XmlElement
private String transName = "";
@XmlElement
private String transTime = "";
@XmlElement
private String transSerial = "";
@XmlElement
private String respCode = "";
@XmlElement
private String respMsg = "";
@XmlElement
private String Mac = "";
public String getTransName() {
return transName;
}
public void setTransName(String transName) {
this.transName = transName;
}
public String getTransTime() {
return transTime;
}
public void setTransTime(String transTime) {
this.transTime = transTime;
}
public String getTransSerial() {
return transSerial;
}
public void setTransSerial(String transSerial) {
this.transSerial = transSerial;
}
public String getRespCode() {
return respCode;
}
public void setRespCode(String respCode) {
this.respCode = respCode;
}
public String getRespMsg() {
return respMsg;
}
public void setRespMsg(String respMsg) {
this.respMsg = respMsg;
}
public String getMac() {
return Mac;
}
public void setMac(String mac) {
Mac = mac;
}
}
MsgBodyInfo代码:
package com.tencent.sxwx.payment.postOffice.entityInfo;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlAccessType;
/**
* 支付信息
*
* @author guoqing
*
*/
@XmlAccessorType(XmlAccessType.FIELD)
public class MsgBodyInfo {
@XmlElement
private String bsType="";
@XmlElement
private String merId="";
@XmlElement
private String merName="";
@XmlElement
private String merType="";
@XmlElement
private String platId="";
@XmlElement
private String outTradeNo="";
@XmlElement
private String qrCode="";
@XmlElement
private Integer totalAmount=0;
public String getBsType() {
return bsType;
}
public void setBsType(String bsType) {
this.bsType = bsType;
}
public String getMerId() {
return merId;
}
public void setMerId(String merId) {
this.merId = merId;
}
public String getMerName() {
return merName;
}
public void setMerName(String merName) {
this.merName = merName;
}
public String getMerType() {
return merType;
}
public void setMerType(String merType) {
this.merType = merType;
}
public String getPlatId() {
return platId;
}
public void setPlatId(String platId) {
this.platId = platId;
}
public String getOutTradeNo() {
return outTradeNo;
}
public void setOutTradeNo(String outTradeNo) {
this.outTradeNo = outTradeNo;
}
public String getQrCode() {
return qrCode;
}
public void setQrCode(String qrCode) {
this.qrCode = qrCode;
}
public Integer getTotalAmount() {
return totalAmount;
}
public void setTotalAmount(Integer totalAmount) {
this.totalAmount = totalAmount;
}
}
测试类:
package com.tencent.sxwx.payment.postOffice.test;
import com.alibaba.fastjson.JSONObject;
import com.tencent.sxwx.payment.postOffice.entityInfo.Message;
import com.tencent.sxwx.payment.postOffice.entityInfo.MsgBodyInfo;
import com.tencent.sxwx.payment.postOffice.entityInfo.MsgHeadInfo;
import com.tencent.sxwx.payment.postOffice.util.JaxbXmlUtil;
public class Test {
public static void main(String[] args) throws Exception {
beanToXml();
xmlToBean();
}
public static void beanToXml() throws Exception {
StringBuilder sb = new StringBuilder();
MsgHeadInfo head = new MsgHeadInfo();
MsgBodyInfo body = new MsgBodyInfo();
Message ms = new Message();
ms.setBody(body);
ms.setHead(head);
String message =JaxbXmlUtil.convertToXml(ms);
System.out.println(message);
}
public static void xmlToBean() throws Exception {
String xml = "<Message>\r\n" +
" <MsgHead>\r\n" +
" <transName></transName>\r\n" +
" <transTime></transTime>\r\n" +
" <transSerial></transSerial>\r\n" +
" <respCode></respCode>\r\n" +
" <respMsg></respMsg>\r\n" +
" <Mac></Mac>\r\n" +
" </MsgHead>\r\n" +
" <MsgBody>\r\n" +
" <bsType></bsType>\r\n" +
" <merId></merId>\r\n" +
" <merName></merName>\r\n" +
" <merType></merType>\r\n" +
" <platId></platId>\r\n" +
" <outTradeNo></outTradeNo>\r\n" +
" <qrCode></qrCode>\r\n" +
" <totalAmount>0</totalAmount>\r\n" +
" </MsgBody>\r\n" +
"</Message>\r\n" +
"\r\n" +
"";
Message ms = JaxbXmlUtil.convertToJavaBean(xml, Message.class);
System.out.println(JSONObject.toJSON(ms));
}
}
控制台输出: