【反射】利用java反射原理将xml文件中的字段封装成对应的Bean
本例使用的xml解析方式为jdom
...
<ROOT>
<Consignment>
...
</Consignment>
</ROOT>
解析xml文件
InputStream xmlFileStream = new FileInputStream(xmlFile);
SAXBuilder builder = new SAXBuilder(new XMLReaderSAX2Factory(false));
Document document = builder.build(xmlFileStream);
Element root = document.getRootElement();
获得Consignment元素
Element consignElement = root.getChild("Consignment");
遍历元素封装Bean
public static Consignment getConsignment(Element consignElement) throws Exception {
Consignment consignment = null;
try {
List<Element> elements = consignElement.getChildren();
Class<?> consignmentClz = Class.forName("com.entity.po.consignment.Consignment");
consignment = (Consignment) consignmentClz.newInstance();
for(Element ele : elements){
CheckTypeUtil.checkType(consignment, consignmentClz, ele);
}
} catch (Exception e) {
throw e;
}
return consignment;
}
/**
* 解析对象时过滤字段属性类型
* @param sampleDnaGene
* @param sampleDnaGeneClz
* @param element
* @throws NoSuchFieldException
* @throws IllegalAccessException
*/
public static void checkType(Object object, Class<?> objectClz, Element chiledEle)
throws NoSuchFieldException, IllegalAccessException {
Field field = objectClz.getDeclaredField(chiledEle.getName());
field.setAccessible(true);
if("java.lang.Integer".equals(field.getType().getName())
|| "int".equals(field.getType().getName())){
if (!StringUtils.isEmpty(chiledEle.getTextTrim())) {
field.set(object,Integer.parseInt(chiledEle.getTextTrim()));
}
}else if("java.lang.Long".equals(field.getType().getName())
|| "long".equals(field.getType().getName())){
if(!StringUtils.isEmpty(chiledEle.getTextTrim())){
field.set(object,Long.parseLong(chiledEle.getTextTrim()));
}
}else if("java.util.Date".equals(field.getType().getName())){
if (!StringUtils.isEmpty(chiledEle.getTextTrim())) {
field.set(object, DateTools.stringToDate(chiledEle.getTextTrim()));
}
}else if("java.lang.Double".equals(field.getType().getName())
|| "double".equals(field.getType().getName())){
if(!StringUtils.isEmpty(chiledEle.getTextTrim())){
field.set(object,Double.parseDouble(chiledEle.getTextTrim()));
}
}else if("java.lang.Float".equals(field.getType().getName())
|| "float".equals(field.getType().getName())){
if(!StringUtils.isEmpty(chiledEle.getTextTrim())){
field.set(object,Float.parseFloat(chiledEle.getTextTrim()));
}
}else if("java.lang.Short".equals(field.getType().getName())
|| "short".equals(field.getType().getName())){
if(!StringUtils.isEmpty(chiledEle.getTextTrim())){
field.set(object,Short.parseShort(chiledEle.getTextTrim()));
}
}else{
if (!StringUtils.isEmpty(chiledEle.getTextTrim())) {
field.set(object, chiledEle.getTextTrim());
}else{
field.set(object,null);
}
}
}
【反射】利用java反射原理将xml文件中的字段封装成对应的Bean的更多相关文章
- web.xml文件中的7个错误的安全配置
web.xml文件中的7个错误的安全配置 关于Java的web.xml文件中配置认证和授权有大 量 的 文章.本文不再去重新讲解如何配置角色.保护web资源和设置不同类型的认证,让我们来看看web.x ...
- Java从入门到精通——技巧篇之利用dom4j取出XML文件中的数据
在我们做项目的时候会经常用到XML文件用来配置系统,XML让系统更加的具有了灵活性,Java如何从XML中取出我们想要的数据呢?下面是我利用DOM4J来实现取出XML文件中的数据. XML文件 < ...
- Spring MVC框架下在java代码中访问applicationContext.xml文件中配置的文件(可以用于读取配置文件内容)
<bean id="propertyConfigurer" class="com.****.framework.core.SpringPropertiesUtil& ...
- java web 通过前台输入的数据(name-value)保存到后台 xml文件中
一:项目需求,前端有一个页面,页面中可以手动输入一些参数数据,通过点击前端的按钮,使输入的数据保存到后台生成的.xml文件中 二:我在前端使用的是easyui的propertygrid,这个能通过da ...
- XML序列化 判断是否是手机 字符操作普通帮助类 验证数据帮助类 IO帮助类 c# Lambda操作类封装 C# -- 使用反射(Reflect)获取dll文件中的类型并调用方法 C# -- 文件的压缩与解压(GZipStream)
XML序列化 #region 序列化 /// <summary> /// XML序列化 /// </summary> /// <param name="ob ...
- 读取xml文件中的配置参数实例_java - JAVA
文章来源:嗨学网 敏而好学论坛www.piaodoo.com 欢迎大家相互学习 paras.xml文件 <?xml version="1.0" encoding=" ...
- web.xml文件中的web-app元素 部署
[转载]web.xml文件中的web-app元素 (2012-05-24 13:35:57) 转载▼ 标签: 转载 分类: java 挺全 的 呵呵呵 转了 原文地址:web.xml文件中的web-a ...
- web.xml文件中加载顺序的优先级
在项目中总会遇到一些关于加载的优先级问题,近期也同样遇到过类似的,所以自己查找资料总结了下,下面有些是转载其他人的,毕竟人家写的不错,自己也就不重复造轮子了,只是略加点了自己的修饰. 首先可以肯定的是 ...
- Java眼中的XML文件写入
创建DOM方式生成XML文档 DOMTest package com.imooc.domtest.test; import java.io.File; import java.io.IOExcepti ...
随机推荐
- 构建squid代理服务器
基本概念 本文使用squid代理服务 软件介绍:百度百科 作为应用层的代理服务软件,Squid主要提供缓存加速.应用层过滤控制的功能: 工作机制:缓存网页对象,减少重复请求(HTTP代理的缓存加速对象 ...
- filebeat 配置文件参数
filebeat 配置 所有的 beats 组件在 output 方面的配置都是一致的,之前章节已经介绍过.这里只介绍 filebeat 在 input 段的配置,如下: filebeat: sp ...
- BZOJ2002[Hnoi2010]弹飞绵羊——LCT
题目描述 某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏.游戏一开始,Lostmonkey在地上沿着一条直线摆上n个装置,每个装置设定初始弹力系 ...
- [USACO 2010 Open Silver 3.Time Travel]——链表
Description 约翰得到了一台时光机,他可以用这台机器回到过去(但不能到未来),改变他家的牛群.约翰 打算依次进行 N 步操作,每步操作分为三种: • 买入操作以 a 表示,后接一个参数 i, ...
- 【BZOJ3507】通配符匹配(哈希,动态规划)
[BZOJ3507]通配符匹配(哈希,动态规划) 题面 BZOJ 题解 对于匹配唯一存在影响的只有通配符,而\(?\)的影响也并不大,所以唯一需要仔细考虑的是\(*\). 考虑一个\(dp\),设\( ...
- Android学习系列(17)--App列表之圆角ListView(续)
http://www.cnblogs.com/qianxudetianxia/archive/2011/09/19/2068760.html 本来这篇文章想并到上篇Android学习系列(16)- ...
- ASP.NET服务器端控件原理分析
服务器端控件触发事件分两种: 1.服务器端控件Button被渲染成客户端的 <input type="submit" name="Button1" val ...
- A1025. PAT Ranking
Programming Ability Test (PAT) is organized by the College of Computer Science and Technology of Zhe ...
- ST表与树状数组
ST表 st表可以解决区间最值的问题.可以做到O(nlogn)预处理 ,O(1)查询,但是不支持修改. st表的大概思路就是用st[i][j]来表示从i开始的2的j次方个树中的最值,查询时就从左端点 ...
- 有趣的filter
js中的filter就是过滤的意思,比如,我们以什么样的方式进行过滤,得到我们想要的结果. 对,我们要的就是这个结果. 给定一个数组,我们要的是Burger(汉堡) const restaurants ...