先创建要转换的对象
java转xml教程学习
@Setter
@Getter
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name ="Request")
public class Request{
@XmlElement(name = "CompID", required = true)
private String compId;
@XmlElement(name = "CustID", required = true)
private String custId;
//XmlElementWrapper注解为包装的一层
@XmlElementWrapper(name = "Items")
@XmlElement(name = "WithdrawalsRequestItem")
private List<RequestCancelItem> items;
}
@Setter
@Getter
@XmlAccessorType(XmlAccessType.FIELD)
public class RequestCancelItem {
@XmlElement(name = "Cust_OrderCode", required = true)
private String custOrderCode;
@XmlElement(name = "OrderType", required = true)
private String orderType;
}
//xml转换为对象
public static Request xmlToObject(Request request, String xmlStr) {
try{
JAXBContext context = JAXBContext.newInstance(clazz);
// XML 转为对象的接口
Unmarshaller unmarshaller = context.createUnmarshaller();
Reader reader = new StringReader(xmlStr);
Object xmlObject = unmarshaller.unmarshal(reader);
if (null != reader) {
reader.close();
}
return (Request)xmlObject;
}catch (Exception e){
logger.error("XML转对象异常", e);
throw new ServiceException("XML转对象异常");
}
}
//对象转xml
public static String object2XmlStr(Object obj, String xmlHeader, String encoding) {
// 创建输出流
StringWriter sw = new StringWriter();
if (StringUtils.isNotEmpty(xmlHeader)) {
sw.write(xmlHeader);
sw.write(System.lineSeparator());
}
Marshaller marshaller = null;
try {
JAXBContext context = JAXBContext.newInstance(obj.getClass());
marshaller = context.createMarshaller();
// 格式化xml输出的格式
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
marshaller.setProperty(Marshaller.JAXB_ENCODING, StringUtils.isNotEmpty(encoding) ? encoding : DEFAULT_ENCODING);
// 格式化xml输出格式,并去除 <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
marshaller.setProperty(Marshaller.JAXB_FRAGMENT, true);
// 将对象转换成输出流形式的xml
marshaller.marshal(obj, sw);
} catch (JAXBException e) {
logger.error("对象转XML异常", e);
return "";
}
return sw.toString();
}
对象转xml后为
<Request>
<CompID>1100000488</CompID>
<CustID>1300000700</CustID>
<Items>
<WithdrawalsRequestItem>
<custOrderCode>1</custOrderCode>
<OrderType>1100000488</OrderType>
</WithdrawalsRequestItem>
</Items>
</Request>