- 浏览: 38683 次
- 性别:
- 来自: 北京
文章分类
由于要和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;
}
}
发表评论
-
Tomcat解决URL传中文的方法
2007-09-28 19:03 891在TOMCAT-HOME/conf/server.xm ... -
介绍两个jsp上传组件commons-fileupload和SmartUpload(部分来自网页)
2007-09-28 21:39 1105第1个上传组件commons-fileupload ==== ... -
仍一个能增减行的javascript
2007-10-08 18:52 742<html><head> <s ... -
jFreeChart(动态web应用)
2007-10-09 14:12 763JFreeChart 1.0.2的动态应用,根据数据库中的 ... -
jFreeChart初探(静态应用)
2007-10-09 14:17 589初学JFreeChart,整理一个例子:(部分来自网页) ... -
初探tomcat连接池
2007-10-11 18:30 551相关工具: tomcat版本5.5 ,mysql,drp(数据 ... -
初探struts中的(Converter)的一个例子
2007-10-18 19:09 584Struts中的Converter可以将一些特定对象转换成字符 ... -
other
2007-10-19 18:23 647最近正在抽时间研究jive的源代码,如果有谁想 ... -
struts(il8n)实现国际化的一个例子
2007-10-19 20:45 833struts利用在session中放一个local对象来 ... -
struts中自定义taglib函数例子
2007-10-21 12:43 645首先建立自己的函数:package com.struts; ... -
一个从另一个打开页面返回值的javascript例子
2007-11-16 14:52 776今天写项目的时候用到了需要从另一个打开页面取值的j ... -
struts中利用ExceptionHandler处理异常
2007-11-22 13:33 660在Struts1.X的版本中加入了对异常的处理 ... -
DWR学习及应用
2007-11-25 20:31 645DWR是一个开源的类库,可以帮助开发人员开发包含AJAX技术 ... -
java群
2007-12-03 20:25 63刚健了一个java群,用于大家互相探讨java,共同促进学习, ... -
ibatis学习(三)---ibatis与spring的整合
2007-12-07 18:26 2000Spring通过DAO模式,提供了对iBATIS的良好支持 ... -
ibatis学习(二)--ibatis使用介绍
2007-12-07 18:27 716SqlMapClient对象 这个对象是iBatis操作 ... -
ibatis学习(一)--ibatis介绍以及用例
2007-12-07 18:31 648介绍 iBATIS是以SQL为中 ... -
dwr实现级联菜单
2007-12-08 10:39 790Dwr的介绍请见:http://www.blogjava. ... -
JSF学习及应用一-(安装配置)
2007-12-11 09:38 733JSF(JavaServer Faces) JSF是JA ... -
JSF学习及应用二-(用例)
2007-12-11 09:41 567实例1 1、 创建一个JSP 2、 在相同的路径下,用. ...
相关推荐
<session>元素用于描述EJB组件的会话Bean信息,该元素包含了多个子元素,如<DESCRIPTION>、<display-name>、<small-icon>、<large-icon>等。 <DESCRIPTION>元素用于描述EJB组件的概要信息,例如EJB组件的名称、版本...
验证框架--> bean-validation.xml (实体验证)、SaveAction-validation.xml (保存验证)、UpdateAction-validation.xml (修改验证) 日志管理配置 --> log4j.xml 国际化配置-->globalMessages_zh.properties(中文) ...
标题"xml-bean apache"指的是Apache XML Beans项目,这是一款强大的Java库,用于处理XML文档,特别是基于XML Schema的文档。通过XML Beans,开发人员可以利用Java类来直接操作XML数据,这些类是根据XML Schema自动...
验证框架--> bean-validation.xml (实体验证)、SaveAction-validation.xml (保存验证)、UpdateAction-validation.xml (修改验证) 日志管理配置 --> log4j.xml 国际化配置-->globalMessages_zh.properties(中文)...
验证框架--> bean-validation.xml (实体验证)、SaveAction-validation.xml (保存验证)、UpdateAction-validation.xml (修改验证) 日志管理配置 --> log4j.xml 国际化配置->globalMessages_zh.properties(中文) ...
-- 属性注入 --> <property name="name" value="Example"/> </bean> ``` 其中,`id`属性是Bean的唯一标识,`class`属性指定Bean对应的Java类。 5. **依赖注入**: Spring的核心特性之一是依赖注入。上述示例中...
VO --> bean.java及 bean.hbm.xml配置文件 Service --> Service接口定义类 DAO --> DAO接口定义类 DAOImpl --> DAO接口Implements实现类 程序配置 --> web.xml 验证框架--> bean-validation.xml (实体验证)、...
* 简化配置:使用<context:component-scan/>标签可以自动检测和加载 Bean,无需手动配置 XML 文件。 * 提高开发效率:使用<context:component-scan/>标签可以减少代码量和提高开发效率。 * 增强灵活性:使用...
-- 解决PUT请求无法提交表单数据的问题 --> <filter> <filter-name>HttpMethodFilter</filter-name> <filter-class>org.springframework.web.filter.HttpPutFormContentFilter</filter-class> </filter> ...
--> </managed-bean> ``` 每个Managed-bean都对应一个特定的功能或控件,并可以通过属性来定制其行为。在实际开发中,你可能需要根据需求添加更多的Managed-bean和自定义属性,以实现更丰富的功能。 通过以上步骤...
<param-value>/WEB-INF/spring/*.bean.xml</param-value> </context-param> <listener> <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class> </listener> ...
--刷新缓存时间--> <param-name>time</param-name> <param-value>10</param-value> </init-param> <init-param> <!--缓存存储位置--> <param-name>scope</param-name> <param-value>application</param-value...
-- 定义Form Bean --> </form-beans> <global-exceptions> <!-- 全局异常处理 --> </global-exceptions> <action-mappings> <!-- 定义Action --> ...
-- 在struts.xml中集成Spring --> <plugins> <plug-in className="org.apache.struts2.spring.StrutsSpringPlugin"> <!-- 配置Spring上下文 --> <set-property property="configurationClass" value="org.spring...
2. **<form-beans>**:配置 ActionForm 对象,每个 `<form-bean>` 元素表示一个 ActionForm 类实例,例如: ```xml <form-beans> <form-bean name="myForm" type="com.example.MyForm"/> </form-beans> ``` 3. ...
-- 表单Bean定义 --> <form-beans> <form-bean name="..." type="..."> ... </form-bean> ... </form-beans> <!-- Action映射 --> <action-mappings> <action path="..." type="..." name="..."> ...