瘋狂

          STANDING ON THE SHOULDERS OF GIANTS
          posts - 481, comments - 486, trackbacks - 0, articles - 1
            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          xml-->bean,bean-->xml

          Posted on 2009-03-31 17:25 瘋狂 閱讀(1902) 評(píng)論(0)  編輯  收藏 bean,bean-->xml" trackback:ping="http://www.aygfsteel.com/freeman1984/services/trackbacks/263182.aspx" /> -->

            由于要和c++交互,就采用了簡單的xml數(shù)據(jù)交換格式,根據(jù)需要封裝了從xml到bean,和bean到xml,只供參考,不能測(cè)試。

          package com.dbs.core.util;

          import java.lang.reflect.Field;
          import java.text.SimpleDateFormat;
          import java.util.HashSet;
          import java.util.Iterator;
          import java.util.List;
          import java.util.Set;
          import org.dom4j.Element;
          import org.dom4j.Node;
          import org.springframework.context.ApplicationContext;
          import org.springframework.context.support.ClassPathXmlApplicationContext;
          import org.apache.commons.beanutils.PropertyUtils;
          import org.apache.commons.logging.Log;
          import org.apache.commons.logging.LogFactory;
          import com.dbs.qbzb.service.dao.ShiftService;

          public class XmlBeanConvertUtil {

           
           private static final Log log = LogFactory.getLog(XmlBeanConvertUtil.class);
           
           private static  ShiftService shiftService;
           private static  final String domain_package = "com.dbs.qbzb.domain";
           private static  final String domain_package_dot = "com.dbs.qbzb.domain.";
           
           static {
            log.debug("開始初始化shiftService...");
            ApplicationContext conn = new ClassPathXmlApplicationContext(
              new String[] { "classpath:applicationContext-*.xml",
                "classpath:datasource-context.xml" });
            shiftService = (ShiftService) conn.getBean("shiftService");//來自dao層,根據(jù)需要所加,設(shè)計(jì)中應(yīng)該去掉,已達(dá)到正真的util
           }
           
           /*
            * 用于 genenateXml()方法 從對(duì)象中得到值,以生成xml
            */
           public static String getFieldValue(Object objValue, String name) {
            StringBuffer xml = new StringBuffer();
            if (objValue instanceof java.util.Set) {
             xml.append("<" + name + ">");
             Set list = (Set) objValue;
             if (list == null || list.size() == 0) { // 如果是集合就遞歸
             } else {
              for (Iterator iterator = list.iterator(); iterator.hasNext();) {
               Object object = (Object) iterator.next();
               xml.append(generateXML(object));
              }
             }
             xml.append("</" + name + ">");
            }
            
            else if(objValue!=null&&objValue.getClass().getPackage().getName().equals(domain_package)){
             xml.append(generateXML(objValue));
            }if(objValue==null){
             xml.append("<" + name + ">");
             xml.append("</" + name + ">");
            }
            else if (objValue instanceof java.util.Date) { // 處理時(shí)間類型
             xml.append("<" + name + ">");
             java.util.Date valueDate = (java.util.Date) objValue;
             SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMdd");
             xml.append(formatter.format(valueDate));
             xml.append("</" + name + ">");
            } else if (objValue instanceof String) {
             xml.append("<" + name + ">");
             xml.append(objValue);
             xml.append("</" + name + ">");
            } else if (objValue instanceof Integer) {
             xml.append("<" + name + ">");
             xml.append(String.valueOf(objValue));
             xml.append("</" + name + ">");
            }
            
            return xml.toString();
           }

           /**
            * 生成xml
            */
           public static String generateXML(Object object) {
            Class cls_class = object.getClass();
            String cls_str = cls_class.toString();
            String objname = cls_str.substring(cls_str.lastIndexOf(".") + 1,
              cls_str.length());// 得到類名稱,包含前綴
            StringBuffer xml = new StringBuffer();
            xml.append("<" + objname + ">");
            Field[] fields = cls_class.getDeclaredFields(); // 得到成員屬性名稱,不包含前綴
            String name = "";
            try {
             for (int i = 0; i < fields.length; i++) {
              name = fields[i].getName();
              if (name.equals("serialVersionUID")) { // 如果是序列號(hào)就去掉
               continue;
              }
              Object objValue = PropertyUtils.getProperty(object, name); // 得到屬性值
              xml.append(getFieldValue(objValue, name));
             }

            } catch (Exception e) {
             log.error("在"+object+"中沒有找到屬性名為"+name+"的方法...", e);
            }
            xml.append("</" + objname + ">");
            return xml.toString();
           }

           /*
            * 生成bean
            */
           public static Object generateBean(Element strXML) {
            String name = "";
            String type = "";
            String classname = "";
            Object object = null;
            try {
             classname = domain_package_dot + strXML.getName();
             object = Class.forName(classname).newInstance();
             List<Element> e_array = strXML.elements();
             for (Iterator iterator = e_array.iterator(); iterator.hasNext();) {
              {
               Element element = (Element) iterator.next();
               name = element.getName();
               log.debug("查詢到方法節(jié)點(diǎn)名"+name);
               type = PropertyUtils.getPropertyType(object, name.toLowerCase())
                 .getName();
               object = newObjectByType(object, type, name, element);
              }
             }
            } catch (Exception e) {
             log.error(classname+"不存在或者在"+classname+"中沒有找到屬性名:"+name.toLowerCase(), e);
            }
            return object;
           }

           /**
            * 根據(jù)參數(shù)給類賦值
            * @param object
            * @param type
            * @param field_name
            * @param element
            * @return
            */
           private static Object newObjectByType(Object object, String type,
             String field_name, Element element) {
            try {
             if (type.endsWith("java.lang.String")) {      //處理String類型

              PropertyUtils
                .setProperty(object, field_name, element.getText());
             } else if (type.endsWith("java.lang.Integer")) {   //處理integer
              System.out.println(type.endsWith("java.lang.Integer"));
              PropertyUtils.setProperty(object, field_name, Integer
                .parseInt(element.getText()));
             } else if (type.endsWith("java.util.Set")) {
              Set set = new HashSet();//處理set
              List<Element> e_list = element.elements();
              for (Iterator iterator = e_list.iterator(); iterator.hasNext();) {
               Element object2 = (Element) iterator.next();
               generateBean(object2);
               set.add(generateBean(object2));
               PropertyUtils.setProperty(object, field_name, set);
              }
             }else if(type.startsWith(domain_package)){
              if(getBeanById(element)!=null){
              Class cls = Class.forName(domain_package_dot+element.getName());
              PropertyUtils.setProperty(object, field_name.toLowerCase(), cls.cast(getBeanById(element)));
              }
             }
            } catch (Exception e) {
             log.error(domain_package_dot+element.getName()+"類不存在", e);
            }
            return object;
           }

           private static Object getBeanById(Element e) throws Exception {
            Object object = null;
            Node node = e.selectSingleNode("http://id");
            log.debug("沒有找到屬性"+e.getName()+"的id");
            if(node!=null){
             Integer id = Integer.parseInt(node.getText());
             object =  shiftService.getObjectById(Class.forName(domain_package_dot+e.getName()),id);
            }
            return object;
           }

           /**
            * 生成最終xml,加上頭
            * @param args
            */
           public static String beanToXml(Object object){
            String xml = "<?xml version='1.0' encoding='UTF-8'?>"
             + generateXML(object);
            log.debug("生成最終xml:"+xml);
            return xml;
           }
           
          }


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 郓城县| 即墨市| 个旧市| 巩留县| 墨竹工卡县| 视频| 湟中县| 秦皇岛市| 营山县| 景洪市| 志丹县| 荔波县| 原平市| 喀喇沁旗| 芮城县| 军事| 石河子市| 凯里市| 临沭县| 军事| 宜宾县| 如东县| 九龙城区| 石渠县| 永丰县| 称多县| 牙克石市| 淳化县| 闵行区| 桂东县| 斗六市| 奉节县| 静海县| 德化县| 天全县| 米林县| 错那县| 黔西县| 咸阳市| 陆良县| 阳东县|