`
jsupport
  • 浏览: 37216 次
  • 性别: 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;
 }
 
}

分享到:
评论

相关推荐

    利用XMLBean轻轻松松读写XML-入门教程

    利用XMLBean轻轻松松读写XML-入门教程 利用XMLBean轻轻松松读写XML-入门教程 利用XMLBean轻轻松松读写XML-入门教程 利用XMLBean轻轻松松读写XML-入门教程

    毕业设计-基于java+HBase实现的手机数据备份系统(短信、联系人、重要文件).zip

    添加短信Action-----------&gt;AddInfoAction.java 获取短信Action-----------&gt;GetInfoAction.java 同步联系人Action---------&gt;AddContactAction.java 上传文件Action-----------&gt;UploadFileAction.java 下载文件Action...

    xml-bean apache

    xml-bean apache xmlbeans-2.6.0

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

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

    struts配置元素详解

    &lt;form-bean / &gt; &lt;/form-beans&gt; &lt;global-forwards&gt; &lt;forward / &gt; &lt;/global-forwards&gt; &lt;action-mappings&gt; path="" attribute="" type="" name="" scope="" validate="" input="" / &gt; &lt;/action-mappings&gt; ...

    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(中文) ...

    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和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; ...

    EntityBean配置过程.txt

    ------------------EntityBean配置(连接Oracle)------------- 1.One Table 1.1 添加数据源 在: \jboss-4.2.2.GA\docs\examples\jca\oracle-ds.xml,拷贝oracle-ds.xml 到: \jboss-4.2.2.GA\server\all\deploy 配置...

    JSF文件上传

    &lt;managed-bean-scope&gt;request&lt;/managed-bean-scope&gt; &lt;/managed-bean&gt; &lt;/faces-config&gt; MyBean如下: package com.dhc; import java.io.BufferedInputStream; import java.io.FileOutputStream; import java.io....

    springweb3.0MVC注解(附实例)

    -- ①:对web包中的所有类进行扫描,以完成Bean创建和自动依赖注入的功能 --&gt; &lt;context:component-scan base-package="com.baobaotao.web"/&gt; &lt;!-- ②:启动Spring MVC的注解功能,完成请求和注解POJO的映射 --&gt; ...

    SSH开发纪要整合解决四大问题(中文、jar包冲突、延时加载、模块化)文档

    &lt;form-bean name="addForm" type="com.lmf118.struts.form.AddForm" /&gt; &lt;/form-beans&gt; &lt;global-exceptions /&gt; &lt;global-forwards /&gt; &lt;action-mappings &gt; attribute="addForm" input="/add.jsp" --错误时...

    spring3.2+strut2+hibernate4

    -- 此处hibernate 的映射 采用的是.xml 配置同则应设置&lt;value&gt;具体配置文件名(*.hbm.xml)&lt;/value&gt;--&gt; &lt;/list&gt; &lt;/property&gt; &lt;/bean&gt; &lt;!-- 事务配置管理 --&gt; &lt;bean id="transactionManager" class="org....

    xsdsAppServer.rar

    -- 手工配置每次新增xml文件 需要修改mybatisConfig.xml文件 --&gt; &lt;!-- &lt;property name="configLocation" value="classpath:mybatisConfig.xml"&gt;&lt;/property&gt;--&gt; &lt;!-- 自动扫描entity目录, 省掉Configuration....

    spring bean XML配置入门

    spring bean配置 运行环境:eclipse 构建工具:maven 不提供maven构建,maven用来解决jar包的依赖

    xml 转Java bean工具

    xml 转Java bean工具

    xml和java bean互相转换工具包(简单易用)

    xml 与 bean 互相转换 工具类 1、bean类的属性需要遵守BEAN规范,否则 无法 读存BEAN值。 2、bean类的属性如果 是集合 只支持数组以及List、Map、Set。 3、bean类属性(boolean除外)前面两个字母要么全部小写,要么...

Global site tag (gtag.js) - Google Analytics