`
jsupport
  • 浏览: 38703 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

xml-->bean,bean-->xml

阅读更多

  由于要和c++交互,就采用了简单的xml数据交换格式,根据需要封装了从xml到bean,和bean到xml,只供参考,不能测试。

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层,根据需要所加,设计中应该去掉,已达到正真的util
 }
 
 /*
  * 用于 genenateXml()方法 从对象中得到值,以生成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) { // 处理时间类型
   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")) { // 如果是序列号就去掉
     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("查询到方法节点名"+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;
 }

 /**
  * 根据参数给类赋值
  * @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("//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;
 }
 
}

分享到:
评论

相关推荐

    EJB中ejb-jar——xml文件说明.pdf

    &lt;session&gt;元素用于描述EJB组件的会话Bean信息,该元素包含了多个子元素,如&lt;DESCRIPTION&gt;、&lt;display-name&gt;、&lt;small-icon&gt;、&lt;large-icon&gt;等。 &lt;DESCRIPTION&gt;元素用于描述EJB组件的概要信息,例如EJB组件的名称、版本...

    SSH代码生成工具 SSH代码生成器

    验证框架--&gt; bean-validation.xml (实体验证)、SaveAction-validation.xml (保存验证)、UpdateAction-validation.xml (修改验证) 日志管理配置 --&gt; log4j.xml 国际化配置--&gt;globalMessages_zh.properties(中文) ...

    xml-bean apache

    标题"xml-bean apache"指的是Apache XML Beans项目,这是一款强大的Java库,用于处理XML文档,特别是基于XML Schema的文档。通过XML Beans,开发人员可以利用Java类来直接操作XML数据,这些类是根据XML Schema自动...

    AutoCode代码生成器(SSH版)

    验证框架--&gt; bean-validation.xml (实体验证)、SaveAction-validation.xml (保存验证)、UpdateAction-validation.xml (修改验证) 日志管理配置 --&gt; log4j.xml 国际化配置--&gt;globalMessages_zh.properties(中文)...

    ssh代码生成器轻松、快捷

    验证框架--&gt; bean-validation.xml (实体验证)、SaveAction-validation.xml (保存验证)、UpdateAction-validation.xml (修改验证) 日志管理配置 --&gt; log4j.xml 国际化配置-&gt;globalMessages_zh.properties(中文) ...

    spring bean XML配置入门

    -- 属性注入 --&gt; &lt;property name="name" value="Example"/&gt; &lt;/bean&gt; ``` 其中,`id`属性是Bean的唯一标识,`class`属性指定Bean对应的Java类。 5. **依赖注入**: Spring的核心特性之一是依赖注入。上述示例中...

    AutoCode代码生成器【SSH版】

    VO --&gt; bean.java及 bean.hbm.xml配置文件 Service --&gt; Service接口定义类 DAO --&gt; DAO接口定义类 DAOImpl --&gt; DAO接口Implements实现类 程序配置 --&gt; web.xml 验证框架--&gt; bean-validation.xml (实体验证)、...

    spring组件扫描contextcomponent-scan使用详解.pdf

    * 简化配置:使用&lt;context:component-scan/&gt;标签可以自动检测和加载 Bean,无需手动配置 XML 文件。 * 提高开发效率:使用&lt;context:component-scan/&gt;标签可以减少代码量和提高开发效率。 * 增强灵活性:使用...

    框架ssm整合

    -- 解决PUT请求无法提交表单数据的问题 --&gt; &lt;filter&gt; &lt;filter-name&gt;HttpMethodFilter&lt;/filter-name&gt; &lt;filter-class&gt;org.springframework.web.filter.HttpPutFormContentFilter&lt;/filter-class&gt; &lt;/filter&gt; ...

    Java ADF开发入门-简单ArcGIS Server Web ADF应用

    --&gt; &lt;/managed-bean&gt; ``` 每个Managed-bean都对应一个特定的功能或控件,并可以通过属性来定制其行为。在实际开发中,你可能需要根据需求添加更多的Managed-bean和自定义属性,以实现更丰富的功能。 通过以上步骤...

    spring和hibernate整合

    &lt;param-value&gt;/WEB-INF/spring/*.bean.xml&lt;/param-value&gt; &lt;/context-param&gt; &lt;listener&gt; &lt;listener-class&gt; org.springframework.web.context.ContextLoaderListener &lt;/listener-class&gt; &lt;/listener&gt; ...

    ssm整合文档。看着文档自己操作,很简单

    --刷新缓存时间--&gt; &lt;param-name&gt;time&lt;/param-name&gt; &lt;param-value&gt;10&lt;/param-value&gt; &lt;/init-param&gt; &lt;init-param&gt; &lt;!--缓存存储位置--&gt; &lt;param-name&gt;scope&lt;/param-name&gt; &lt;param-value&gt;application&lt;/param-value...

    搭建struts1.x环境例子源码

    -- 定义Form Bean --&gt; &lt;/form-beans&gt; &lt;global-exceptions&gt; &lt;!-- 全局异常处理 --&gt; &lt;/global-exceptions&gt; &lt;action-mappings&gt; &lt;!-- 定义Action --&gt; ...

    原创 Struts Spring Hibernate (SSH) 整合实例

    -- 在struts.xml中集成Spring --&gt; &lt;plugins&gt; &lt;plug-in className="org.apache.struts2.spring.StrutsSpringPlugin"&gt; &lt;!-- 配置Spring上下文 --&gt; &lt;set-property property="configurationClass" value="org.spring...

    struts1[1].2配置详细.doc

    2. **&lt;form-beans&gt;**:配置 ActionForm 对象,每个 `&lt;form-bean&gt;` 元素表示一个 ActionForm 类实例,例如: ```xml &lt;form-beans&gt; &lt;form-bean name="myForm" type="com.example.MyForm"/&gt; &lt;/form-beans&gt; ``` 3. ...

    struts-config.xml

    -- 表单Bean定义 --&gt; &lt;form-beans&gt; &lt;form-bean name="..." type="..."&gt; ... &lt;/form-bean&gt; ... &lt;/form-beans&gt; &lt;!-- Action映射 --&gt; &lt;action-mappings&gt; &lt;action path="..." type="..." name="..."&gt; ...

Global site tag (gtag.js) - Google Analytics