利用dom4j将实体类转换为对应的xml报文
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                利用dom4j将实体类转换为对应的xml报文
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
                                利用dom4j生成xml報文
目標格式:
<?xml version="1.0" encoding="GBK"?><Packet type="REQUEST" version="1.0"><Head><RequestType>C03</RequestType><UserCode>BOCIJS</UserCode><PassWord>0047CC</PassWord></Head><Body><Policy><QueryCode>PDCXC01BOCIJS1501440376628307332</QueryCode><AgencyCode>08938875X</AgencyCode><AreaFlag>320600</AreaFlag><PolicyNo>3270320153206000019676</PolicyNo><Coverage><CoverageType>114</CoverageType><CoverageCode>2703</CoverageCode><CoverageName>短期人身險</CoverageName><EffectiveDate>201508250000</EffectiveDate><ExpireDate>201608242359</ExpireDate><Premium>200.0</Premium></Coverage><CurrencyCode>CNY</CurrencyCode><TotalPremium>200.0</TotalPremium><PolicyDate>201508240000</PolicyDate><PracticeCertificateCode>00200906320000134701</PracticeCertificateCode><PracticeName>胡亞芬</PracticeName></Policy></Body>
</Packet>
1、首先創建好你要轉換的實體類,然后導入依賴(dom4j依賴)和util文件,util文件如下:
public class XMMLUtil {    public static void entityTransferToXml(Object object, Element root, Class clazz) {        try {            // 創建根節點元素          Element entity = root.addElement(clazz.getSimpleName());            Field[] field = object.getClass().getDeclaredFields(); // 獲取實體類b的所有屬性,返回Field數組            for (int j = 0; j < field.length; j++) { // 遍歷所有有屬性                String name = field[j].getName(); // 獲取屬性的名字                if (!name.equals("serialVersionUID")) {//去除串行化序列屬性                    name = name.substring(0, 1).toUpperCase() + name.substring(1); // 將屬性的首字符大寫,方便構造get,set方法                    Method m = object.getClass().getMethod("get" + name);//    System.out.println("屬性get"+name+"方法返回值類型:" + m.getReturnType());                   Object propertievalue = m.invoke(object);// 獲取屬性值                    if (null != propertievalue) {                        //給類名變小寫,已注釋//name = name.substring(0, 1).toLowerCase() + name.substring(1);                        if (m.getReturnType().toString().contains("java.lang")) {                            		Element propertie = entity.addElement(name);                            propertie.setText(propertievalue.toString());                        } else if (java.util.List.class.equals(m.getReturnType())) {                            		entityTransferToXml((List<Object>) propertievalue, entity, name);                        } else {//Element propertie = entity.addElement(name);         entityTransferToXml(propertievalue, entity, m.getReturnType());                        }                    }                }            }        } catch (Exception e) {            e.printStackTrace();        }    }    public static <T> void entityTransferToXml(List<T> objects, Element root, String name) {//Element entitySet = root.addElement(name);        for (Object object : objects) {            entityTransferToXml(object, root, object.getClass());        }    }
}
這個util文件共有兩個方法(方法名相同,參數不同,方法重載),第一個是對象轉xml,第二個是List轉xml。
2、這時候只需要將要轉換的對象傳過來,創建一個新的document對象,然后調用方法即可,如下所示:
public String generateMessage(P p){    //1.創建document對象,代表整個xml文檔    org.dom4j.Document document = DocumentHelper.createDocument();    //2.創建根節點rss    
org.dom4j.Element Packet =document.addElement("Packet");
System.out.println("---將對象轉換成string類型的xml Start---");XMMLUtil.entityTransferToXml(p.getHead(),Packet,p.getHead().getClass());XMMLUtil.entityTransferToXml(p.getBody(),Packet,p.getBody().getClass());
return document.asXML();
總結
以上是生活随笔為你收集整理的利用dom4j将实体类转换为对应的xml报文的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: Java Random()函数生成指定范
- 下一篇: 使用ajax不刷新页面获取、操作数据
