package com.kmall.admin.haikong.utils; import com.kmall.admin.haikong.dto.WareQueryStockResponseDTO; import javax.xml.bind.JAXBContext; import javax.xml.bind.Marshaller; import javax.xml.bind.Unmarshaller; import java.io.Reader; import java.io.StringReader; import java.io.StringWriter; import java.util.Objects; /** * @author lhm * @createDate 2021-11-12 */ public class XmlUtils { /** * 对象转xml文本 * @param obj 对象 * @param format 是否格式化 * @return xml文本 */ public static String toXml(Object obj, boolean format) throws Exception { try { JAXBContext context = JAXBContext.newInstance(obj.getClass()); Marshaller marshaller = context.createMarshaller(); //编码格式 marshaller.setProperty(Marshaller.JAXB_ENCODING, "UTF-8"); marshaller.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.FALSE); // 是否格式化生成的xml串 if (format) { marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE); } else { marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.FALSE); } // 是否省略xm头声明信息 marshaller.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE); StringWriter writer = new StringWriter(); writer.write(""); marshaller.marshal(obj, writer); return writer.toString(); } catch (Exception e) { throw new RuntimeException(e); } } /** * xml 转对象 * * @param xml * @param c * @return */ public static Object toObject(String xml, Class c) throws Exception { Reader reader = null; try { JAXBContext context = JAXBContext.newInstance(c); // XML 转为对象的接口 Unmarshaller unmarshaller = context.createUnmarshaller(); reader = new StringReader(xml); return unmarshaller.unmarshal(reader); } catch (Exception e) { throw new RuntimeException(e); } finally { if (Objects.nonNull(reader)) { reader.close(); } } } public static void main(String[] args) throws Exception { String response = "\n" + "\n" + " success|failure\n" + " 响应码\n" + " 响应信息\n" + " \n" + " \n" + " 仓库编码, string (50)\n" + " 商品编码, string (50) , 必填\n" + " 仓储系统商品ID, string (50),条件必填\n" + " 库存类型,string (50) , ZP=正品, CC=残次,JS=机损, XS= 箱损, ZT=在途库存\n" + " 残品等级,string (50) ,AG=一级残,BG=二级残,CG=三级残 ,退货仓使用\n" + " 1\n" + " 1\n" + " 批次编码, string (50)\n" + " 商品生产日期 YYYY-MM-DD,条件必填\n" + " 商品过期日期YYYY-MM-DD,条件必填\n" + " 生产批号, string (50)\n" + " 扩展属性 \n" + " \n" + " value1\n" + " value2\n" + " \n" + " \n" + " \n" + ""; WareQueryStockResponseDTO o = (WareQueryStockResponseDTO) toObject(response, WareQueryStockResponseDTO.class); System.out.println(o); } }