123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- 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("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>");
- marshaller.marshal(obj, writer);
- return writer.toString();
- } catch (Exception e) {
- throw new RuntimeException(e);
- }
- }
- /**
- * xml 转对象
- *
- * @param xml
- * @param c
- * @return
- */
- public static <T> Object toObject(String xml, Class<T> 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 = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n" +
- "<response>\n" +
- " <flag>success|failure</flag>\n" +
- " <code>响应码</code>\n" +
- " <message>响应信息</message>\n" +
- " <items>\n" +
- " <item>\n" +
- " <warehouseCode>仓库编码, string (50)</warehouseCode>\n" +
- " <itemCode>商品编码, string (50) , 必填</itemCode>\n" +
- " <itemId>仓储系统商品ID, string (50),条件必填</itemId>\n" +
- " <inventoryType>库存类型,string (50) , ZP=正品, CC=残次,JS=机损, XS= 箱损, ZT=在途库存</inventoryType>\n" +
- " <imperfectGrade>残品等级,string (50) ,AG=一级残,BG=二级残,CG=三级残 ,退货仓使用</imperfectGrade>\n" +
- " <quantity>1</quantity>\n" +
- " <lockQuantity>1</lockQuantity>\n" +
- " <batchCode>批次编码, string (50)</batchCode>\n" +
- " <productDate>商品生产日期 YYYY-MM-DD,条件必填</productDate>\n" +
- " <expireDate>商品过期日期YYYY-MM-DD,条件必填</expireDate>\n" +
- " <produceCode>生产批号, string (50)</produceCode>\n" +
- " <extendProps>扩展属性 \n" +
- " \n" +
- " <key1>value1</key1>\n" +
- " <key2>value2</key2>\n" +
- " </extendProps>\n" +
- " </item>\n" +
- " </items>\n" +
- "</response>";
- WareQueryStockResponseDTO o = (WareQueryStockResponseDTO) toObject(response, WareQueryStockResponseDTO.class);
- System.out.println(o);
- }
- }
|