⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xmlunserializer.java

📁 利用AJAX控制上传文件进度,并生成进度条! 同时增加了新的实现方法,详细信息还请使用者自己体会
💻 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 + -