`
VerRan
  • 浏览: 459522 次
  • 性别: Icon_minigender_1
  • 来自: 陕西.西安
社区版块
存档分类
最新评论

利用反射机制动态将XML信息设置入对象

XML 
阅读更多
引言:XML和J2EE密切的程度是不用说的了,由于我们的接口程序需要将别人发过来的XML文档信息进行处理,并持久化到数据库中。由于业务的不同,xml的格式也有所不同,不过执行的过程都是类似的,我们获得xml字符串信息并解析我们需要的信息,将这些信息持久化就ok了,这里存在的问题是随着业务的不同,xml格式不同需要将xml中的信息首先保存到不同的vo中,然后将vo持久化。这样反射机制就起了很大的作用。

1. 主函数
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		PaserXML p=new PaserXML();
        String xml="<?xml version='1.0' encoding='UTF-8'?> <root><Customer><id>1</id><name>ddd</name></Customer>"+
"<order><orderId>2</orderId><orderName>nnmnmnmn</orderName></order></root>";

    	p.parserByXpath2(xml);
	}



2. 利用XPath获得节点信息
	/**
	 *  利用反射机制实现的 将xml中的相关信息付给Vo
	 *  输入:String XML
	 *  返回: void
	 *  执行中---将XML数据 付给对应的VO :这里需要对命名进行规范
	 * */
	
	public void parserByXpath2(String xml){
		
		 try {
		        Reader in=new StringReader(xml);
				Document document=builder.build(in);
				Element root=document.getRootElement();
//				System.out.println(root.getName());
				Element o=(Element)org.jdom.xpath.XPath.selectSingleNode(root, "/root/order");
				OrderVO vo=new OrderVO();
				this.ElementTOVO(o, vo);//真正执行将通过Xpath解析出来的节点下的 信息  付给 VO
				System.out.println("vo.getOrderId()"+vo.getOrderId());
				System.out.println("vo.getOrderName()"+vo.getOrderName());
			} catch (JDOMException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		
	}


3. 反射机制实现set方法的动态调用
/**
	 * 输入: Element 利用Xpath解析出来要做处理的 Docuemnt 文档树中的阶段信息
	 * 输出: Void
	 * 思路: 读取XML文件中要做处理的值信息,将值赋给相应的VO的字段,这里需要调用其set方法实现
	 *       由于不同的VO会有不同数量,不同值得字段和set方法,这里采用反射机制.
	 *       
	 *       
	 * */
public void ElementTOVO(Element e,Object vo){
			
		Class clazz=vo.getClass();
		Field fd=null;
		Method m=null;
		Class fType=null;
		String fName="";
		Element element=null;
		String xmlValue="";
java.lang.reflect.Method[] method=clazz.getDeclaredMethods();//获得所有的声明方法
				java.lang.reflect.Field[] field=clazz.getDeclaredFields();//获得所有的声明字段
				for(int i=0;i<field.length;i++){
					fd=field[i];
					fName=fd.getName();// 获得字段的名称
					fType=fd.getType();// 获得字段的类型
					if("java.lang.String".equals(fType.getName())){//判断字段类型是否为String型,由于这里需要利用反射机制调用方法而且为了统一实现
						//将VO中的字段都定义为String 型
						element=e.getChild(fName);//获得e(即传过来的Element)下的制定名称的Element fName 
						if(element==null){
							xmlValue=null;
						}
						else{
							xmlValue=element.getValue();//获得指定元素下的值信息
						}
						fName=fName.substring(0,1).toUpperCase()+fName.substring(1,fName.length());//由于属性名第一个字母为小写
						//为了调用set方法,将第一个字母大写 以便构造set方法名。 比如 orderId--->OrderId---->setOrderId
						if(fName!=null){//如果方法名存在
							try {
								m=clazz.getMethod("set"+fName, new Class[]{fType});//通过方法名获得 指定的方法参数类型 比如String
								//第一个参数指定要调用方法的名称、第二个指定调用方法的参数类型
							} catch (SecurityException e1) {
								// TODO Auto-generated catch block
								e1.printStackTrace();
							} catch (NoSuchMethodException e1) {
								// TODO Auto-generated catch block
								e1.printStackTrace();
							}
						}
						if(xmlValue!=null){
							try {
								System.out.println(xmlValue);
								m.invoke(vo, new Object[]{xmlValue});//调用动态生成的方法
								//参数一指定方法所在的类,参数二制定 参数的值
							} catch (IllegalArgumentException e1) {
								// TODO Auto-generated catch block
								e1.printStackTrace();
							} catch (IllegalAccessException e1) {
								// TODO Auto-generated catch block
								e1.printStackTrace();
							} catch (InvocationTargetException e1) {
								// TODO Auto-generated catch block
								e1.printStackTrace();
							}
						}
					}
				}
			}
分享到:
评论

相关推荐

    dom4j解析xml,利用反射机制

    在这个项目中,我们利用DOM4J来解析XML文件,并通过Java的反射机制将解析出的信息存储到特定的类中。 首先,我们需要了解XML的基本概念。XML(Extensible Markup Language)是一种标记语言,常用于数据交换和结构化...

    C#,利用反射动态创建对象

    本篇文章将深入探讨如何利用反射在C#中动态创建对象。 1. **反射基础** 反射是.NET框架提供的一种特性,通过System.Reflection命名空间中的类来实现。主要类包括Assembly(程序集)、Type(类型)、...

    XML解析与反射应用联合.zip

    在XML解析中,反射机制常用于根据XML配置文件动态地实例化和调用类的方法。 "XML解析与反射应用联合"的主题,意味着这个压缩包可能包含了一个示例项目,展示了如何结合XML解析和反射来实现灵活的配置和动态行为。...

    C# 利用反射动态创建对象

    利用反射,我们可以动态地创建对象,这意味着在代码执行时,我们能够实例化未知类型的对象,这在处理插件系统、动态加载用户界面组件或根据配置文件创建对象时非常有用。 标题中提到的"利用反射动态创建对象",主要...

    java反射机制 字符串——java对象

    可能的实现是先使用XML解析库(如JAXB或DOM)将XML字符串解析成DOM树,然后通过反射找到对应的类并创建实例,再根据XML节点信息设置对象的属性。这一过程涉及到了对`java.lang.reflect`包中类的使用,如`Class.for...

    解析并创建XML文件和Java的反射

    Java的反射机制则是Java编程语言提供的一种强大的功能,允许程序在运行时检查类、接口、字段和方法的信息,并能够动态调用方法和创建对象。 在解析XML文件时,Java提供了多种API,其中最常用的是DOM(Document ...

    java 解析xml类映射数据库 数据库操作 反射机制 源码

    本程序集的核心是利用Java解析XML文件,将XML中的数据映射到数据库,并通过反射机制进行数据库操作。下面将详细阐述这些知识点。 首先,XML解析在Java中通常有两种方式:DOM(Document Object Model)和SAX(Simple...

    java 根据javaBean反射自定义导出 excel、xml、pdf、csv

    反射机制则是Java语言提供的一种强大的工具,允许程序在运行时动态获取类的信息(如类名、属性、方法等)并进行调用。 首先,让我们详细讲解JavaBean。JavaBean是符合一定规范的Java类,主要特点是:公开的构造函数...

    .NET C# 反射机制实现无Bug插件演示源码(支持XML配置文件)

    在这个"无Bug插件演示源码"中,我们将深入探讨如何利用反射机制实现一个灵活的插件系统,该系统不仅支持动态加载实现特定接口的类,还能够通过XML配置文件来控制这些行为。 首先,让我们看看关键知识点——反射。在...

    c# 基于反射、自定义特性、Web Services、xml序列化的应用实例 !

    1. 反射:反射是C#中的一种强大机制,它允许运行时的代码获取类型信息并动态地创建对象、调用方法或访问字段。例如,在“DBWebService”中,我们可能有一个数据库服务,反射可以用来动态加载服务接口并在运行时发现...

    通过类反射机制实现底层数据库连接

    在Java编程中,类反射机制是一种强大的工具,它允许程序在运行时检查并操作类的信息,包括类的方法、属性和构造器。这个机制是Java动态性的重要体现,它使得我们能够在不知道具体类名的情况下,创建对象并调用其方法...

    应用java反射机制打印一个对象.docx

    Java反射机制是Java语言的一个强大特性,它允许程序在运行时动态地获取类的信息(如类名、方法名等),并能直接操作这些信息。这使得Java程序能够做到在运行时检查类的结构、调用方法以及创建和操作对象。 #### ...

    android系统java反射机制详解

    Java反射机制是Java编程语言中的一个强大工具,它允许程序在运行时检查和操作类、接口、对象等的内部信息。在Android系统中,Java反射机制同样被广泛应用,尤其是在动态加载类、处理不确定类型的对象、调用私有方法...

    Java高级程序设计实战教程第三章-Java反射机制.pptx

    首先定义`Person`类,然后在测试类`TestPerson`中利用反射API获取`Person`的类信息和对象信息。 **3.4 拓展知识** 反射机制是许多高级Java特性和框架的基础,如动态代理、泛型、注解和Java EE的容器管理。在设计...

    dom4j 和java反射

    总结来说,DOM4J提供了强大的XML处理能力,而Java反射机制则赋予了程序在运行时对类和对象的动态操作能力。结合两者,可以实现Bean与XML之间的灵活转换,极大地提高了代码的可维护性和可扩展性。在实际开发中,这两...

    Tomcat解析XML和反射创建对象原理

    掌握Tomcat解析XML和利用反射机制动态创建对象的技术,能够使得开发者更加灵活地处理服务器端的请求,提高应用的扩展性和维护性。在实际开发中,开发者需要根据应用程序的需求,合理地配置web.xml文件,以及使用反射...

    JAVA的反射机制与动态代理.pdf

    通过反射机制,开发人员可以在程序运行期间动态地获取类的信息,例如类的方法、字段、构造函数等,并能够创建对象、调用方法或设置字段值。 #### 二、Class对象 在JAVA中,`Class`对象是执行RTTI的核心。每个类都...

    使用XStream是实现XML与Java对象的转换(5)--Object Stream

    在这个主题中,我们将深入探讨如何使用XStream进行XML与Java对象的互换,并了解其工作原理。 首先,XStream是一个开源库,由Johannes Leutenegger创建,它通过简单的API提供XML序列化和反序列化。这个库的特点在于...

    类的反射机制

    类的反射机制是Java编程语言中的一个重要特性,它允许程序在运行时检查和操作类、接口、字段以及方法等对象。这种动态类型的能力使得代码更加灵活,能够在未知类的情况下进行操作,增强了程序的可扩展性和元编程能力...

    利用反射 实现一个自制的struts

    然而,这个资源是关于如何利用反射机制来创建一个自制的Struts框架的实践。反射在Java中是一个强大的工具,它允许程序在运行时检查和操作类、接口、字段和方法的信息,甚至可以动态调用方法。 首先,我们需要理解...

Global site tag (gtag.js) - Google Analytics