import java.io.StringReader;
import java.io.StringWriter;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class XmlUtil {
private static final Logger logger = LoggerFactory.getLogger(XmlUtil.class);
/**
* java对象转换为xml文件
*
* @param xmlPath xml文件路径
* @param clazz java对象.Class
* @return xml文件的String
* @throws JAXBException
*/
public static String beanToXml(Object obj, Class> clazz) throws JAXBException {
JAXBContext context = JAXBContext.newInstance(clazz);
Marshaller marshaller = context.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, false);
marshaller.setProperty(Marshaller.JAXB_ENCODING, "UTF-8");
StringWriter writer = new StringWriter();
marshaller.marshal(obj, writer);
return writer.toString();
}
/**
* xml文件配置转换为对象
*
* @param xmlPath xml文件路径
* @param clazz java对象.Class
* @return java对象
* @throws JAXBException
*/
@SuppressWarnings("unchecked")
public static T xmlToBean(String xmlPath, Class clazz) throws Exception {
logger.info("xmlToBean xmlPath {} clazz {}", xmlPath, clazz);
JAXBContext context = JAXBContext.newInstance(clazz);
Unmarshaller unmarshaller = context.createUnmarshaller();
return (T) unmarshaller.unmarshal(new StringReader(xmlPath));
}
/**
* xml转换成JavaBean
*
* @param xml
* @param clazz
* @return
*/
@SuppressWarnings("unchecked")
public static T convertToJavaBean(String xml, Class clazz) {
logger.info("convertToJavaBean xml {} clazz {}", xml, clazz);
T t = null;
try {
JAXBContext context = JAXBContext.newInstance(clazz);
Unmarshaller unmarshaller = context.createUnmarshaller();
t = (T) unmarshaller.unmarshal(new StringReader(xml));
} catch (Exception e) {
logger.error("convertToJavaBean exception {}", e.getMessage());
}
return t;
}
/**
* JavaBean转换成xml
* 默认编码UTF-8
*
* @param obj
* @param writer
* @return
*/
public static String convertToXml(Object obj) {
return convertToXml(obj, "UTF-8");
}
/**
* JavaBean转换成xml
*
* @param obj
* @param encoding
* @return
*/
public static String convertToXml(Object obj, String encoding) {
String result = null;
try {
JAXBContext context = JAXBContext.newInstance(obj.getClass());
StringWriter writer = new StringWriter();
writer.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
Marshaller marshaller = context.createMarshaller();
// marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); // 格式化输出
marshaller.setProperty(Marshaller.JAXB_ENCODING, encoding);
marshaller.setProperty(Marshaller.JAXB_FRAGMENT, true); // 去掉默认的报文头
marshaller.marshal(obj, writer);
result = writer.toString();
} catch (Exception e) {
logger.error("convertToXml exception {}", e.getMessage());
}
return result;
}
/**
* JavaBean转换成xml去除xml声明部分
*
* @param obj
* @param encoding
* @return
*/
public static String convertToXmlIgnoreXmlHead(Object obj, String encoding) {
String result = null;
try {
JAXBContext context = JAXBContext.newInstance(obj.getClass());
Marshaller marshaller = context.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.setProperty(Marshaller.JAXB_ENCODING, encoding);
marshaller.setProperty(Marshaller.JAXB_FRAGMENT, true);
StringWriter writer = new StringWriter();
marshaller.marshal(obj, writer);
result = writer.toString();
} catch (Exception e) {
logger.error(" convertToXmlIgnoreXmlHead exception {}", e.getMessage());
}
return result;
}
public static void main(String[] args) {
String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?> " +
" " +
" " +
" 30530001 " +
" 18 " +
" EBS000 " +
" 17 " +
" EBS000 " +
" EBS0000120200515162046875010801520 " +
" EBS0000120200515162046875010801520 " +
" " +
" 20200515 " +
" 515162046 " +
" " +
" " +
" " +
" " +
" 0 " +
" " +
" " +
" EBANK2 " +
" 10100 " +
" " +
" " +
" " +
" 1 " +
" " +
"
" +" 600000000025 " +
" Y001 " +
" " +
"";
Services services = XmlUtil.convertToJavaBean(xml, Services.class);
// System.out.println(services);
System.out.println(convertToXml(services));
}
}
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name = "service")
@XmlAccessorType(XmlAccessType.FIELD)
public class Services {
@XmlElement(name = "SYS_HEAD")
private SysHead sysHead;
@XmlElement(name = "APP_HEAD")
private AppHead appHead;
@XmlElement(name = "BODY")
private Body body;
public SysHead getSysHead() {
return sysHead;
}
public void setSysHead(SysHead sysHead) {
this.sysHead = sysHead;
}
public AppHead getAppHead() {
return appHead;
}
public void setAppHead(AppHead appHead) {
this.appHead = appHead;
}
public Body getBody() {
return body;
}
public void setBody(Body body) {
this.body = body;
}
@Override
public String toString() {
return "Services{" +
"sysHead=" + sysHead +
", appHead=" + appHead +
", body=" + body +
'}';
}
}
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
@XmlAccessorType(XmlAccessType.FIELD)
public class SysHead {
@XmlElement(name = "SvcCd")
private String svcCd;
@XmlElement(name = "CnsmSysSeqNo")
private String cnsmSysSeqNo;
public String getSvcCd() {
return svcCd;
}
public void setSvcCd(String svcCd) {
this.svcCd = svcCd;
}
public String getCnsmSysSeqNo() {
return cnsmSysSeqNo;
}
public void setCnsmSysSeqNo(String cnsmSysSeqNo) {
this.cnsmSysSeqNo = cnsmSysSeqNo;
}
@Override
public String toString() {
return "SysHead{" +
"svcCd='" + svcCd + '\'' +
", cnsmSysSeqNo='" + cnsmSysSeqNo + '\'' +
'}';
}
}