1 package com.cmge.utils; 2 3 import java.util.Iterator; 4 5 import com.cmge.org.oa.bean.OADepartment; 6 import com.coast.foundation.utils.StringUtil; 7 import com.thoughtworks.xstream.XStream; 8 import com.thoughtworks.xstream.io.xml.XmlFriendlyReplacer; 9 import com.thoughtworks.xstream.io.xml.XppDriver; 10 11 import java.util.HashMap; 12 import java.util.LinkedList; 13 import java.util.Map; 14 import java.util.Iterator; 15 16 /** 17 * XML与JavaBean相互转换工具类 18 * File: XMLBeanUtils.java 19 21 */
22 23 public class XmlXStreamUtil { 24 private String version = ""; 25 private String xml = ""; 26 private LinkedListaddXml = new LinkedList (); 27 public static XmlXStreamUtil Build(){ 28 return new XmlXStreamUtil(); 29 } 30 31 public XmlXStreamUtil xmlVersion(){ 32 version = " "; 33 return this; 34 } 35 36 public XmlXStreamUtil xmlVersion(String version,String encoding){ 37 version = " "; 38 return this; 39 } 40 41 public XmlXStreamUtil XmlAdd(String v){ 42 addXml.push(v); 43 return this; 44 } 45 46 public String toString(){ 47 StringBuffer sb = new StringBuffer(); 48 49 if(!StringUtil.isNull(version)) 50 sb.append(version); 51 for(int i = 0; i < addXml.size(); i++){ 52 String v = addXml.get(i).toString(); 53 sb.append("<"+v+">").append("\n"); 54 } 55 // 56 sb.append(xml); 57 // 58 for(int i = addXml.size()-1; i >= 0; i--){ 59 String v = addXml.get(i).toString(); 60 sb.append("\n "); 61 } 62 return sb.toString(); 63 } 64 65 66 public XmlXStreamUtil bean2xml(Class cls,String alias,Object bean){ 67 bean2xml(cls,alias,null,bean); 68 return this; 69 } 70 71 public XmlXStreamUtil bean2xml(Class cls,String alias,String attribute,Object bean){ 72 XStream xstream = new XStream( 73 new XppDriver(new XmlFriendlyReplacer("_-", "_"))); 74 xstream.alias(alias, cls); 75 if(!StringUtil.isNull(attribute)){ 76 xstream.useAttributeFor( cls,attribute); 77 xstream.autodetectAnnotations(true); 78 } 79 xml = xstream.toXML(bean); 80 return this; 81 } 82 83 84 /** 85 * 将Bean转换为XML 86 * 87 * @param clazzMap 别名-类名映射Map 88 * @param bean 要转换为xml的bean对象 89 * @return XML字符串 90 */ 91 public XmlXStreamUtil bean2xml(Map clazzMap, Object bean) { 92 XStream xstream = new XStream( 93 new XppDriver(new XmlFriendlyReplacer("_-", "_"))); 94 95 for (Iterator it = clazzMap.entrySet().iterator(); it.hasNext();) { 96 Map.Entry m = (Map.Entry ) it.next(); 97 System.out.println("key="+m.getKey()+",v="+m.getValue()); 98 xstream.alias(m.getKey(), m.getValue()); 99 }100 xml = xstream.toXML(bean); 101 System.out.println("xml=\n");102 return this; 103 } 104 105 /** 106 * 将XML转换为Bean 107 * 108 * @param clazzMap 别名-类名映射Map 109 * @param xml 要转换为bean对象的xml字符串 110 * @return Java Bean对象 111 */ 112 public Object xml2Bean(Map clazzMap, String xml) { 113 XStream xstream = new XStream(114 new XppDriver(new XmlFriendlyReplacer("_-", "_"))); 115 for (Iterator it = clazzMap.entrySet().iterator(); it.hasNext();) { 116 Map.Entry m = (Map.Entry ) it.next(); 117 xstream.alias(m.getKey(), m.getValue()); 118 } 119 Object bean = xstream.fromXML(xml); 120 return bean; 121 } 122 123 /** 124 * 获取XStream对象 125 * 126 * @param clazzMap 别名-类名映射Map 127 * @return XStream对象 128 */ 129 public XStream getXStreamObject(Map clazzMap) { 130 XStream xstream = new XStream(131 new XppDriver(new XmlFriendlyReplacer("_-", "_"))); 132 for (Iterator it = clazzMap.entrySet().iterator(); it.hasNext();) { 133 Map.Entry m = (Map.Entry ) it.next(); 134 xstream.alias(m.getKey(), m.getValue()); 135 } 136 return xstream; 137 } 138 139 140 public static void main(String [] args){141 142 143 OADepartment od = new OADepartment();144 145 od.setFullname("12312");146 od.setCode("123");147 od.setOrg_code("dd");148 od.setCanceled("");149 //XmlUtil.beanToXmlStr(OADepartment.class, "1", "2");150 Map map = new HashMap();151 map.put("org", OADepartment.class);152 String xml = XmlXStreamUtil.Build()153 154 // .bean2xml(map, od)155 .XmlAdd("root")156 .XmlAdd("orglist")157 .XmlAdd("ff")158 .xmlVersion()159 .bean2xml(OADepartment.class, "org","code", od)160 .toString();161 162 System.out.println(xml);163 164 165 System.out.println("\n\n\n\n");166 String xml2 = XmlXStreamUtil.Build()167 168 .bean2xml(OADepartment.class, "org", od)169 .toString();170 System.out.println(xml2);171 }172 }