`
Caedmon
  • 浏览: 499 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

发两个工具类,JavaBean转换JSON和XML

阅读更多
就两个工具类而已,实际中应该比较实用。Json就不说了,xml主要是有类似java跟flash交互的情况下就会用的着。Json的是网上找的,Xml的是自己写的。JSON转换apache官网有个工具包,但是就为了这么个小功能去下几个工具包感觉有点浪费,而且有很多依赖包。
这里贴一下XmlHelper的代码吧。
package com.caedmon.util;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.Field;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.apache.log4j.Logger;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.XPath;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

public class XmlHelper {
	private String filename;
	private Document document;
	static Logger logger=Logger.getLogger(XmlHelper.class);
	/**
	 * 路径的包含的xml文件只需要有根节点就可,否则不是合法的xml文件无法解析
	 * */
	public XmlHelper(String filename){
		this.filename=filename;
    	SAXReader reader = new SAXReader();
    	File file = new File(filename);
    	InputStream is=null;
    	try {
    		is = new FileInputStream(file);
    		this.document=reader.read(is);
    	} catch (FileNotFoundException e) {
    		logger.info("未找到"+filename+"这个文件");
    	} catch (DocumentException e) {
    		logger.error(e);
		}
	}
	/**
	 * 清除原来根节点中的内容,如果保存之前不清楚的话,是在文档后追加,而不是重新写入
	 */
	public void clear(){
		document.getRootElement().clearContent();
	}
	/**
	 * 保存xml到指定路径
	 * */
    public void save(String filename) throws IOException{
    	//此处最好不要用FileWriter,会出现中文乱码
    	XMLWriter out = new XMLWriter(new FileOutputStream(this.filename));
    	out.write(document);
    	out.flush();
    	out.close();
  	}
    public XPath getXPath(Element element, String nsUrl, String nsName, String selectUrl){
    	Map nsMap = new HashMap();
    	nsMap.put(nsName, nsUrl);
    	XPath xPath = element.createXPath(selectUrl);
    	xPath.setNamespaceURIs(nsMap);
    	return xPath;
  }
  	public void save() throws IOException{
  	  save(this.filename);
    }
  	/**
  	 * 将指定对象转成xml表达的字符串
  	 * */
	public String format(Object object){
		Element element=document.getRootElement();
		try{
			if(
					object instanceof Integer||
					object instanceof Double||
					object instanceof String||
					object instanceof Character||
					object instanceof Byte||
					object instanceof Long||
					object instanceof Float||
					object instanceof Short
				){
					throw new IllegalArgumentException();
				}else if(object instanceof List<?>){
					insertList(element, (List<?>)object);
				}else if(object instanceof Map<?, ?>){
					insertMap(element, (Map<?,?>)object);
				}else if(object instanceof Set<?>){
					insertSet(element, (Set<?>)object);
				}else if(object instanceof Object[]){
					insertArray(element, (Object[])object);
				}else {
					insertObject(element,object);
				}
		}catch(IllegalAccessException e1){
			e1.printStackTrace();
		}catch(IllegalArgumentException e2){
			e2.printStackTrace();
		}
		return document.asXML();
	}
	public static Element insertObject(Element element,Object object) throws IllegalArgumentException, IllegalAccessException{
		if(object!=null){
			Class<?> clazz=object.getClass();
			//类节点的名字
			String classEName=toLowerHead(clazz.getSimpleName());
			Field[] fields=clazz.getDeclaredFields();
			Element classElement=element.addElement(classEName);
			for(Field field:fields){
				String name=field.getName();
				field.setAccessible(true);
				Object fieldObj=field.get(object);
				if(fieldObj==null){
					classElement.addAttribute(name, "");
				}else if(
					fieldObj instanceof Integer||
					fieldObj instanceof Double||
					fieldObj instanceof String||
					fieldObj instanceof Character||
					fieldObj instanceof Byte||
					fieldObj instanceof Long||
					fieldObj instanceof Float||
					fieldObj instanceof Short
				){
					String value=field.get(object).toString();
					classElement.addAttribute(name, value);
				}else if(fieldObj instanceof Date){
					Date date=(Date)fieldObj;
					SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
					String value=format.format(date);
					classElement.addAttribute(name, value);
				}else{
					Element child=classElement.addElement(name);
					if(fieldObj instanceof List<?>){
						insertList(child, (List<?>)fieldObj);
					}else if(fieldObj instanceof Map<?, ?>){
						insertMap(child, (Map<?,?>)fieldObj);
					}else if(fieldObj instanceof Set<?>){
						insertSet(child, (Set<?>)fieldObj);
					}else if(fieldObj instanceof Object[]){
						insertArray(child, (Object[])fieldObj);
					}else {
						insertObject(child,fieldObj);
					}
				}
			}
		}
		return element;
	}
	public static Element insertList(Element element,List<?> list) throws IllegalArgumentException, IllegalAccessException {
		for(Object object:list){
			insertObject(element, object);
		}
		return element;
	}
	public static Element insertMap(Element element,Map<?, ?> map) throws IllegalArgumentException, IllegalAccessException{
		Iterator<?> iterator=map.values().iterator();
		while(iterator.hasNext()){
			Object object=iterator.next();
			insertObject(element, object);
		}
		return element;
	}
	public static Element insertSet(Element element,Set<?> set) throws IllegalArgumentException, IllegalAccessException{
		Iterator<?> iterator=set.iterator();
		while(iterator.hasNext()){
			Object object=iterator.next();
			insertObject(element, object);
		}
		return element;
	}
	public static Element insertArray(Element element,Object[] array) throws IllegalArgumentException, IllegalAccessException {
		for(Object obj:array){
			insertObject(element, obj);
		}
		return element;
	}
	public static String toLowerHead(String simpleName){
		String begin=simpleName.substring(0,1).toLowerCase();
		String other=simpleName.substring(1,simpleName.length());
		return begin+other;
	}
}

有什么问题的话可以提出来,我也是才写出来没多久,可能会有问题的。。如果哪里不懂的话也可以问下,毕竟注释比较少。。
PS:东西比较简单,高抬贵手,别投隐藏,新手。。 就是让大家以后省点功夫。。
分享到:
评论

相关推荐

    通过fastjson实现各种格式与json之间的转换

    通过fastjson实现了JavaBean,list&lt;JavaBean&gt;,MAP,list等格式与json格式之间的转换,已经附带fastjson的包,包的版本为fastjson-1.1.36.jar

    javaBean 与 xml 互转

    javaBean 与 xml 互转,提供工具类。只需要把需要转换的类放入,就可以。使用。

    自定义java常见工具类

    java开发中常用的工具类 比如 1:hibernate的配置 工具类复写 2:字符串加密 MD5加密 3:javabean到map的自动映射封装 4:javabean java对象到xml的自动封装 5:各种日期格式的处理 6:json的自动封装处理 7:...

    基于Java的XML解析与反射设计模式.doc

    xstream可以完美转换xml,与以往的解析xml工具dom相比,xstream是一个易用的、开源 的库,使用起来简单、小巧,容易理解,可以轻易的将java对象和xml文档相互转换,而 且可以修改某个特定的属性和节点名称。...

    xStream解析工具包

    Xstream是一种OXMapping 技术,是用来处理XML文件序列化的框架,在将JavaBean序列化,或将XML文件反序列化的时候,不需要其它辅助类和映射文件,使得XML序列化不再繁索。Xstream也可以将JavaBean序列化成Json或反序列...

    javabean-marshaller:将对象图序列化为其Java代码

    代替使用XML或JSON序列化,将数据集生成为Java语言。 此格式更适合于性能和重构目的。 技术支持 基本类型及其包装器类 枚举 馆藏与地图 数组(1维和2维) java.util.Date,java.sql.Date,日历,...

    JAVA上百实例源码以及开源项目源代码

     //给客户发一个感谢消息,消息驱动Bean必须实现两个接口MessageDrivenBean和MessageListener  在对象创建的过程中将被容器调用,onMessage函数方法接收消息参数,将其强制转型为合适的消息类型,同时打印出消息...

    JAVA上百实例源码以及开源项目

     //给客户发一个感谢消息,消息驱动Bean必须实现两个接口MessageDrivenBean和MessageListener  在对象创建的过程中将被容器调用,onMessage函数方法接收消息参数,将其强制转型为合适的消息类型,同时打印出消息...

    Struts2 in action中文版

    第一部分 Strut 2:一个全新的框架 第1章 Struts 2:现代Web框架 2 1.1 Web应用程序:快速学习 2 1.1.1 构建Web应用程序 2 1.1.2 基础技术简介 3 1.1.3 深入研究 6 1.2 Web应用程序框架 7 1.2.1 什么是框架 7 1.2.2 ...

    Android插件

    快速将json字符串转换成一个Java Bean,免去我们根据json字符串手写对应Java Bean的过程。 使用方法:快捷键Alt+S也可以使用Alt+Insert选择GsonFormat 2.Android ButterKnife Zelezny 配合ButterKnife实现注解,...

    Scala程序设计(第2版)

    20.1 DSL 示例:Scala中XML和JSON DSL 404 20.2 内部DSL 406 20.3 包含解析组合子的外部DSL 410 20.3.1 关于解析组合子 410 20.3.2 计算工资单的外部DSL 410 20.4 内部DSL与外部DSL:最后的思考 ...

    mybean-framework:MyBean框架

    Json解析工具 JDBC封装模板 Bean实例注册 MyBean框架可以通过注解、xml配置文件、properties配置文件三种方式注册一个Bean实例,被注册的Bean实例会进入MyBean框架的核心容器之中。 注解 1、在Java类上标注@MyBean...

    dangdang和smartstruts2.rar

    8、写一个struts.xml 包含use.xml 1)跳转到 /user/register_form.jsp &lt;result name="form"&gt;/user/register_form.jsp 完善action。 &lt;param name="inputName"&gt;image &lt;result name="success" type="...

    网上商城需求报告

    8、写一个struts.xml 包含use.xml 1)跳转到 /user/register_form.jsp &lt;result name="form"&gt;/user/register_form.jsp 完善action。 &lt;param name="inputName"&gt;image &lt;result name="success" type="...

    Java学习笔记-个人整理的

    {4.8}Collections集合工具类}{86}{section.4.8} {4.9}Comparable与Comparator}{86}{section.4.9} {4.9.1}Comparable}{86}{subsection.4.9.1} {4.9.2}Comparator}{87}{subsection.4.9.2} {4.10}包装类}{87}{...

Global site tag (gtag.js) - Google Analytics