📄 xmlunserializer.java
字号:
package com.bjinfotech.practice.ajax;
import java.io.FileWriter;
import java.io.IOException;
import java.io.StringReader;
import java.io.StringWriter;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import org.apache.log4j.Logger;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import com.bjinfotech.util.objecttk.*;
/**
* xml反序列化器:将xml反序列化为bean
* @author cleverpig
*
*/
public class XmlUnSerializer {
/**
* 由xml文档反序列化为bean
* @param beanObj
* @param doc
* @return
*/
protected static Object unSerializeBeanFromXMLDocument(
Object beanObj,
Document doc){
Logger logger=Logger.getLogger(XmlUnSerializer.class);
BeanUtils bu=new BeanUtils();
Field[] fields=beanObj.getClass().getDeclaredFields();
for(int i=0;i<fields.length;i++){
logger.debug("检测"+fields[i].getName()+"字段");
List nodeList=doc.selectNodes("/ajax-request/field[@name='"+fields[i].getName()+"']");
if (Collection.class.isAssignableFrom(fields[i].getType())){
List collectionTypeFieldValue=new ArrayList();
for(int j=0;j<nodeList.size();j++){
Element element=(Element)nodeList.get(j);
collectionTypeFieldValue.add(element.getText());
}
bu.setBeanFieldValue(beanObj, fields[i].getName(), collectionTypeFieldValue);
}
else if (nodeList.size()>1){
logger.warn("元素个数不为一");
}
else if (nodeList.size()==0){
logger.warn("元素个数为0");
}
else{
Element element=(Element)nodeList.get(0);
bu.setBeanFieldValue(beanObj, fields[i].getName(), element.getText());
}
}
return beanObj;
}
/**
* xml反序列化
* @param xmlStr 字符串形式的xml
* @param beanClazz bean类型
* @return
*/
public static Object unSerializeBean(
String xmlStr,
Class beanClazz){
Logger logger=Logger.getLogger(XmlUnSerializer.class);
SAXReader reader=new SAXReader();
Document doc=null;
try {
doc=reader.read(new StringReader(xmlStr));
} catch (DocumentException e1) {
logger.warn("解析Ajax请求,解析文档时发生错误:"+e1.getMessage());
return null;
}
return unSerializeBeanFromXMLDocument(BeanUtils.newObject(beanClazz),doc);
}
/**
* 将bean系列化为UTF-8编码的xml
* @param beanObj
* @param doc xml文档对象
* @return
* @throws IOException
*/
protected static void serializeBeanToXMLDocument(Object beanObj,Element responseEle){
Logger logger=Logger.getLogger(XmlUnSerializer.class);
BeanUtils bu=new BeanUtils();
logger.info("Bean类型:"+beanObj.getClass());
//处理Collection类型的Bean
if (Collection.class.isAssignableFrom(beanObj.getClass())){
logger.info("处理Collection类型的Bean");
List beanList=(List)beanObj;
for(int i=0;i<beanList.size();i++){
//递归调用
serializeBeanToXMLDocument(beanList.get(i),responseEle);
}
}
//处理非Collection类型的Bean
else{
Field[] fields=beanObj.getClass().getDeclaredFields();
for(int i=0;i<fields.length;i++){
logger.debug("检测"+fields[i].getName()+"字段");
Object fieldValue=bu.getBeanFieldValue(beanObj, fields[i].getName());
if (fieldValue!=null){
if (Collection.class.isAssignableFrom(fields[i].getType())){
List listTypeFieldValue=(List)fieldValue;
for(int j=0;j<listTypeFieldValue.size();j++){
Element fieldEle=responseEle.addElement("field");
fieldEle.addAttribute("name", fields[i].getName())
.addAttribute("type",fields[i].getType().getName());
fieldEle.addCDATA(bu.getConvertUtilsBean().convert(listTypeFieldValue.get(j)));
}
}
else {
Element fieldEle=responseEle.addElement("field");
fieldEle.addAttribute("name", fields[i].getName())
.addAttribute("type",fields[i].getType().getName());
fieldEle.addCDATA(bu.getConvertUtilsBean().convert(fieldValue));
}
}
}
}
}
/**
* 将bean系列化为UTF-8编码的xml
* @param beanObj
* @return
* @throws IOException
*/
public static String serializeBean(Object beanObj) throws IOException{
Logger logger=Logger.getLogger(XmlUnSerializer.class);
BeanUtils bu=new BeanUtils();
Document doc=DocumentHelper.createDocument();
Element responseEle=doc.addElement("ajax-response");
//处理非Collection类型的Bean
Field[] fields=beanObj.getClass().getDeclaredFields();
for(int i=0;i<fields.length;i++){
logger.debug("检测"+fields[i].getName()+"字段");
Object fieldValue=bu.getBeanFieldValue(beanObj, fields[i].getName());
if (fieldValue!=null){
if (Collection.class.isAssignableFrom(fields[i].getType())){
List listTypeFieldValue=(List)fieldValue;
logger.debug("Collection类型字段的成员数为"+listTypeFieldValue.size());
for(int j=0;j<listTypeFieldValue.size();j++){
Element fieldEle=responseEle.addElement("field");
fieldEle.addAttribute("name", fields[i].getName())
.addAttribute("type",fields[i].getType().getName());
fieldEle.addCDATA(bu.getConvertUtilsBean().convert(listTypeFieldValue.get(j)));
}
}
else {
Element fieldEle=responseEle.addElement("field");
fieldEle.addAttribute("name", fields[i].getName())
.addAttribute("type",fields[i].getType().getName());
fieldEle.addCDATA(bu.getConvertUtilsBean().convert(fieldValue));
}
}
}
OutputFormat format=OutputFormat.createPrettyPrint();
format.setEncoding("UTF-8");
StringWriter sw=new StringWriter();
XMLWriter xmlwriter=new XMLWriter(sw,format);
xmlwriter.write(doc);
xmlwriter.close();
logger.debug(sw.toString());
return sw.toString();
}
/**
* 将bean列表序列化为UTF-8编码的xml
* @param beanObj
* @return
* @throws IOException
*/
public static String serializeBeanList(Object beanListObj) throws IOException{
Logger logger=Logger.getLogger(XmlUnSerializer.class);
BeanUtils bu=new BeanUtils();
Document doc=DocumentHelper.createDocument();
Element responseEle=doc.addElement("ajax-response");
logger.info("处理Collection类型的Bean");
List beanList=(List)beanListObj;
for(int m=0;m<beanList.size();m++){
Object beanObj=beanList.get(m);
Element fieldListEle=responseEle.addElement("list");
//处理非Collection类型的Bean
Field[] fields=beanObj.getClass().getDeclaredFields();
for(int i=0;i<fields.length;i++){
logger.debug("检测"+fields[i].getName()+"字段");
Object fieldValue=bu.getBeanFieldValue(beanObj, fields[i].getName());
if (fieldValue!=null){
if (Collection.class.isAssignableFrom(fields[i].getType())){
List listTypeFieldValue=(List)fieldValue;
for(int j=0;j<listTypeFieldValue.size();j++){
Element fieldEle=fieldListEle.addElement("list-field");
fieldEle.addAttribute("name", fields[i].getName())
.addAttribute("type",fields[i].getType().getName());
fieldEle.addCDATA(bu.getConvertUtilsBean().convert(listTypeFieldValue.get(j)));
}
}
else {
Element fieldEle=fieldListEle.addElement("list-field");
fieldEle.addAttribute("name", fields[i].getName())
.addAttribute("type",fields[i].getType().getName());
fieldEle.addCDATA(bu.getConvertUtilsBean().convert(fieldValue));
}
}
}
}
OutputFormat format=OutputFormat.createPrettyPrint();
format.setEncoding("UTF-8");
StringWriter sw=new StringWriter();
XMLWriter xmlwriter=new XMLWriter(sw,format);
xmlwriter.write(doc);
xmlwriter.close();
return sw.toString();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -