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 LinkedList<String> addXml = new LinkedList<String>();
27 public static XmlXStreamUtil Build(){
28 return new XmlXStreamUtil();
29 }
30
31 public XmlXStreamUtil xmlVersion(){
32 version = "<?xml version=\"1.0\" encoding=\"utf-8\"?>";
33 return this;
34 }
35
36 public XmlXStreamUtil xmlVersion(String version,String encoding){
37 version = "<?xml version=\""+version+"\" encoding=\""+encoding+"\"?>";
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</"+v+">");
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<String, Class> 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<String, Class> m = (Map.Entry<String, Class>) 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<String, Class> 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<String, Class> m = (Map.Entry<String, Class>) 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<String, Class> clazzMap) {
130 XStream xstream = new XStream(
131 new XppDriver(new XmlFriendlyReplacer("_-", "_")));
132 for (Iterator it = clazzMap.entrySet().iterator(); it.hasNext();) {
133 Map.Entry<String, Class> m = (Map.Entry<String, Class>) 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<String,Class> 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 }