反射的练习
来源:互联网 发布:环氧丙烷价格30日数据 编辑:程序博客网 时间:2024/05/21 03:26
package com.lezhi.bjicbcassessdock.dumingFacade.dto;
import com.lezhi.bjicbcassessdock.common.util.CommonUtil;
import org.apache.commons.lang.StringUtils;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import java.io.FileInputStream;
import java.io.InputStream;
import java.lang.reflect.Field;
/**
* <功能详细描述>
* User: 徐晓鸣
* Date: 14-6-9
* Time: 下午1:54
*
* @see []
* @since V1.00
*/
public class AnTest {
public static void main(String[] args) throws Exception {
// load xml
// parse xml
// load java Class
AnTest anTest = new AnTest();
anTest.parseReconnasianceDuming(anTest.parseAndSaveReconnaissance(), ReconnaissanceDumingDto.class);
}
private boolean checkInterface(Class<?> clazz, Class<?> interface_) {
Class<?>[] arr = clazz.getInterfaces();
if (arr == null || arr.length == 0)
return false;
for (Class<?> c : arr) {
if (c.equals(interface_))
return true;
}
return false;
}
private <T> T parseRootTest(Element element, Class<T> clazz) throws IllegalAccessException, InstantiationException {
T result = clazz.newInstance();
Field fields[] = clazz.getDeclaredFields();
for (Field f : fields) {
ReconnaissanceXmlField xmlField = f.getAnnotation(ReconnaissanceXmlField.class);
String xmlElementName = xmlField.value();
Element fieldElement = null;
String attrName = null;
if (xmlElementName.contains(".")) {
fieldElement = element.element(StringUtils.substringBefore(xmlElementName, "."));
attrName = StringUtils.substringAfter(xmlElementName, ".");
} else {
fieldElement = element.element(xmlElementName);
}
f.setAccessible(true);
if (checkInterface(f.getType(), XmlElement.class)) {
Object fieldVal = parseRootTest(fieldElement, f.getType());
f.set(result, fieldVal);
} else {
String text = null;
// dom4j get value by element tag
if (xmlElementName.contains(".")) {
text = fieldElement.attributeValue(attrName);
} else {
text = fieldElement.getText();
}
f.set(result, text);
}
}
return result;
}
private void parseElement(Element element) {
element.elements();
}
public ReconnaissanceRoot parseAndSaveReconnaissance() throws Exception {
InputStream is = new FileInputStream("C:\\Users\\xiaoming_xu\\Desktop\\北京ICBC\\projectData.xml");
SAXReader saxReader = new SAXReader();
Document document = saxReader.read(is);
// 获取文档的根元素
Element root = document.getRootElement();
if (!"report".equals(root.getName())) {
throw new DocumentException("Invalid xml file");
}
ReconnaissanceRoot root2 = parseRootTest(root, ReconnaissanceRoot.class);
System.out.println(root2);
return root2;
}
private <T, K extends XmlElement> void parseReconnasianceDuming(K source, T target) throws Exception {
Field fieldsK[] = source.getClass().getDeclaredFields();
for (Field f : fieldsK) {
Object subResource = f.get(source);
f.setAccessible(true);
if (checkInterface(f.getType(), XmlElement.class)) {
K s = (K) subResource;
parseReconnasianceDuming(s, target);
} else {
String sName = f.getName();
Field field = target.getClass().getDeclaredField(sName);
field.setAccessible(true);
field.set(target, subResource);
}
}
}
}
import com.lezhi.bjicbcassessdock.common.util.CommonUtil;
import org.apache.commons.lang.StringUtils;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import java.io.FileInputStream;
import java.io.InputStream;
import java.lang.reflect.Field;
/**
* <功能详细描述>
* User: 徐晓鸣
* Date: 14-6-9
* Time: 下午1:54
*
* @see []
* @since V1.00
*/
public class AnTest {
public static void main(String[] args) throws Exception {
// load xml
// parse xml
// load java Class
AnTest anTest = new AnTest();
anTest.parseReconnasianceDuming(anTest.parseAndSaveReconnaissance(), ReconnaissanceDumingDto.class);
}
private boolean checkInterface(Class<?> clazz, Class<?> interface_) {
Class<?>[] arr = clazz.getInterfaces();
if (arr == null || arr.length == 0)
return false;
for (Class<?> c : arr) {
if (c.equals(interface_))
return true;
}
return false;
}
private <T> T parseRootTest(Element element, Class<T> clazz) throws IllegalAccessException, InstantiationException {
T result = clazz.newInstance();
Field fields[] = clazz.getDeclaredFields();
for (Field f : fields) {
ReconnaissanceXmlField xmlField = f.getAnnotation(ReconnaissanceXmlField.class);
String xmlElementName = xmlField.value();
Element fieldElement = null;
String attrName = null;
if (xmlElementName.contains(".")) {
fieldElement = element.element(StringUtils.substringBefore(xmlElementName, "."));
attrName = StringUtils.substringAfter(xmlElementName, ".");
} else {
fieldElement = element.element(xmlElementName);
}
f.setAccessible(true);
if (checkInterface(f.getType(), XmlElement.class)) {
Object fieldVal = parseRootTest(fieldElement, f.getType());
f.set(result, fieldVal);
} else {
String text = null;
// dom4j get value by element tag
if (xmlElementName.contains(".")) {
text = fieldElement.attributeValue(attrName);
} else {
text = fieldElement.getText();
}
f.set(result, text);
}
}
return result;
}
private void parseElement(Element element) {
element.elements();
}
public ReconnaissanceRoot parseAndSaveReconnaissance() throws Exception {
InputStream is = new FileInputStream("C:\\Users\\xiaoming_xu\\Desktop\\北京ICBC\\projectData.xml");
SAXReader saxReader = new SAXReader();
Document document = saxReader.read(is);
// 获取文档的根元素
Element root = document.getRootElement();
if (!"report".equals(root.getName())) {
throw new DocumentException("Invalid xml file");
}
ReconnaissanceRoot root2 = parseRootTest(root, ReconnaissanceRoot.class);
System.out.println(root2);
return root2;
}
private <T, K extends XmlElement> void parseReconnasianceDuming(K source, T target) throws Exception {
Field fieldsK[] = source.getClass().getDeclaredFields();
for (Field f : fieldsK) {
Object subResource = f.get(source);
f.setAccessible(true);
if (checkInterface(f.getType(), XmlElement.class)) {
K s = (K) subResource;
parseReconnasianceDuming(s, target);
} else {
String sName = f.getName();
Field field = target.getClass().getDeclaredField(sName);
field.setAccessible(true);
field.set(target, subResource);
}
}
}
}
0 0
- 反射的练习
- 反射和javaBean的练习
- java反射的初步练习
- 关于反射的完整 练习
- 简单的java反射练习
- Java 反射的应用练习
- Java反射的简单练习
- 反射练习
- 反射练习
- 反射练习
- 反射练习
- 反射练习
- 反射练习
- 反射练习
- Java的Reflect反射基础API练习
- 反射当中配置呢文件的练习
- 我的第一个的JAVA反射练习代码
- JAVA 反射练习
- 兼容浏览器的insertAdjacentHTML
- RTMFP---基于CumulusServer的P2P功能实现
- 笔记76--网络篇1:HttpURLConnection和HttpClient
- SQL大量数据查询的优化
- Ehcache配置详解及CacheManager使用
- 反射的练习
- 检测版本更新
- 【DP】HDU 2189 悼念512汶川大地震遇难同胞——来生一起走
- int[]、int[,]和int[][]区别联系
- 《UNP》中源代码的编译和使用
- 快速排序
- 可变参数宏__VA_ARGS__解析
- git-credential-winstore.exe": No such file or directory
- CMSChart实现实时曲线的绘制(实例)参考