通过JAXB实现完成java对象和xml的互相转换

标签: jaxb java 对象 | 发表时间:2013-03-19 21:18 | 作者:
出处:http://www.iteye.com

 

在项目中我们常常需要将java对象转为Xml,将xml转为java对象,这些繁琐的操作我们使用JAXB的话就可以很轻松的实现,一起看一个例子吧
package com.xiongpan.model;

import java.util.ArrayList;
import java.util.List;

import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
public class ClassRoom {
       private String classid;
       private String classname;
       private List<Student> list= new ArrayList<Student>();
       public String getClassid() {
             return classid;
      }
       public void setClassid(String classid) {
             this. classid = classid;
      }
       public String getClassname() {
             return classname;
      }
       public void setClassname(String classname) {
             this. classname = classname;
      }
       public List<Student> getList() {
             return list;
      }
       public void setList(List<Student> list) {
             this. list = list;
      }
       public ClassRoom(String classid, String classname, List<Student> list) {
             super();
             this. classid = classid;
             this. classname = classname;
             this. list = list;
      }
       public ClassRoom() {
             super();
             
      }
       @Override
       public String toString() {

            StringBuffer sb= new StringBuffer();
            
            sb.append( "classid="+ this. classid+ "   ");
            sb.append( "classname"+ this. classname+ " ");
             for (Student st : list) {
                  sb.append(st.toString());
            }
             return sb.toString();
      }

}
 
package com.xiongpan.model;

public class Student {
      
       private String id;
       private String name;
       private int age;
       public String getId() {
             return id;
      }
       public void setId(String id) {
             this. id = id;
      }
       public String getName() {
             return name;
      }
       public void setName(String name) {
             this. name = name;
      }
       public int getAge() {
             return age;
      }
       public void setAge( int age) {
             this. age = age;
      }
       public Student(String id, String name, int age) {
             super();
             this. id = id;
             this. name = name;
             this. age = age;
      }
       public Student() {
             super();
             // TODO Auto-generated constructor stub
      }
       @Override
       public String toString() {
             return "Student [id=" + id + ", name=" + name + ", age=" + age + "]";
      }
      
}
 
package com.xiongpan.model;

import java.io.StringReader;
import java.util.ArrayList;
import java.util.List;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;

import org.junit.Test;

public class MyTest {
	
	@Test
	public void testJaxbToXml(){
		
		try {
			
			Student s1=new Student("1", "ggd1", 21);
			Student s2=new Student("2", "ggd2", 21);
			Student s3=new Student("3", "ggd3", 21);
			Student s4=new Student("4", "ggd4", 21);
			Student s5=new Student("5", "ggd5", 26);
			Student s6=new Student("6", "ggd6", 21);
			Student s7=new Student("7", "ggd7", 26);
			
			List<Student> list=new ArrayList<Student>();
			list.add(s1);
			list.add(s2);
			list.add(s3);
			list.add(s4);
			list.add(s5);
			list.add(s6);
			list.add(s7);
			 
			ClassRoom classRoom=new ClassRoom("131123-1", "bestClassRoom", list);
			
			JAXBContext ct=JAXBContext.newInstance(ClassRoom.class);
			Marshaller marshaller=	ct.createMarshaller();
			marshaller.marshal(classRoom, System.out);
			
		} catch (JAXBException e) {
			e.printStackTrace();
		}
		
	}
	
	@Test
	public void TestjaxbToObject(){
		try {
			String xml="<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><classRoom><classid>131123-1</classid><classname>bestClassRoom</classname><list><age>21</age><id>1</id><name>ggd1</name></list><list><age>21</age><id>2</id><name>ggd2</name></list><list><age>21</age><id>3</id><name>ggd3</name></list><list><age>21</age><id>4</id><name>ggd4</name></list><list><age>26</age><id>5</id><name>ggd5</name></list><list><age>21</age><id>6</id><name>ggd6</name></list><list><age>26</age><id>7</id><name>ggd7</name></list></classRoom>";
			
			JAXBContext jaxbContext=JAXBContext.newInstance(ClassRoom.class);
			Unmarshaller unmarshaller=jaxbContext.createUnmarshaller();
			ClassRoom classRoom= (ClassRoom) unmarshaller.unmarshal(new StringReader(xml));
			
			System.out.println(classRoom.toString());
			
		} catch (JAXBException e) {
			e.printStackTrace();
		}
	}

}
 
testJaxbToXml执行结果
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><classRoom><classid>131123-1</classid><classname>bestClassRoom</classname><list><age>21</age><id>1</id><name>ggd1</name></list><list><age>21</age><id>2</id><name>ggd2</name></list><list><age>21</age><id>3</id><name>ggd3</name></list><list><age>21</age><id>4</id><name>ggd4</name></list><list><age>26</age><id>5</id><name>ggd5</name></list><list><age>21</age><id>6</id><name>ggd6</name></list><list><age>26</age><id>7</id><name>ggd7</name></list></classRoom>



 // xml  To java Object执行结果
classid=131123-1   classnamebestClassRoom Student [id=1, name=ggd1, age=21]Student [id=2, name=ggd2, age=21]Student [id=3, name=ggd3, age=21]Student [id=4, name=ggd4, age=21]Student [id=5, name=ggd5, age=26]Student [id=6, name=ggd6, age=21]Student [id=7, name=ggd7, age=26]

 
 

 





已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [jaxb java 对象] 推荐:

通过JAXB实现完成java对象和xml的互相转换

- - ITeye博客
在项目中我们常常需要将java对象转为Xml,将xml转为java对象,这些繁琐的操作我们使用JAXB的话就可以很轻松的实现,一起看一个例子吧. 已有 0 人发表留言,猛击->> 这里<<-参与讨论. —软件人才免语言低担保 赴美带薪读研.

Java的对象驻留

- - Java译站
Java会将源代码中的字符串常量存储到常量池中. 这不只是说它俩的值是一样的,而是说就是同一个字符串对象. 用Java的话来说就是a==b的结果是true. 然而这个只对字符串以及小的整型或者长整型有效. 其它的对象是不会被驻留的,也就是说如果你创建了两个对象而他们的值是相等的,但他们并不是同一个对象.

CXF+JAXB处理复杂数据

- - 博客园_首页
CXF+JAXB处理复杂数据. JAXB 来实现对象和XML之间的映射. 前面的例子 中,使用CXF发布的Webservice,其方法的参数和返回值都是简单类型. 本文讨论对象复杂性的分级,验证对于各种复杂度JAXB的支持情况,以及使用JAXB时对于Map,循环引用,继承等情况的处理办法. 文中的例子没有直接调用JAXB的API,而是用CXF发布webservice的形式验证对象到xml的marshal和unmarshal, 所以本文也可以作为使用CXF的参考资料.

理解Java对象序列化

- - 博客 - 伯乐在线
来源: jiangshapub 的博客( @jiangshapub). 关于Java序列化的文章早已是汗牛充栋了,本文是对我个人过往学习,理解及应用Java序列化的一个总结. 此文内容涉及Java序列化的基本原理,以及多种方法对序列化形式进行定制. 在撰写本文时,既参考了 Thinking in Java, Effective Java,JavaWorld,developerWorks中的相关文章和其它网络资料,也加入了自己的实践经验与理解,文、码并茂,希望对大家有所帮助.

java bean对象之间复制属性

- - Java - 编程语言 - ITeye博客
在现在的企业级Java应用程序中, Java Bean被广泛的应用. 一堆的相关的划分也应运而生, 如DTO, DAO, BO, POJO, VO等. 这里不去管这些概念的细节, 如果你感兴趣,可以google之, 比如 这篇文章. 这里要讨论的问题是如何在不同的Java Bean对象之间复制它们的属性.

java 类和对象的初始化

- - Web前端 - ITeye博客
  在Java中,类装载器把java类装载到虚拟机中,经过装载,链接和初始化三个步骤来完成. 其中链接中包括 校验、准备和解析. 下面对这些概念进行解析:. 装载:查找和导入类或接口的二进制数据,常用的是根据类的路径加载,还有根据网络的地址加载. 链接:执行校验、准备和解析步骤,其中解析步骤是可以选择的;.

[Json]json-lib简单处理java对象变为json对象

- - CSDN博客编程语言推荐文章
由于js对json的原生支持,所以现在很多项目的数据传输都喜欢用json. 怎么样把数据从java对象转化为json对象,有怎么把前台的json对象转化成java对象去处理. json-lib是sourceforge的一个开源项目,常用来解决java json数据转换的问题. 下载地址是 http://sourceforge.net/projects/json-lib/.

CXF中jaxb-api.jar、jaxws-api.jar与jdk1.6不兼容问题

- - ITeye博客
服务器是tomcat6,在cxf-2.3.10中的:jaxb-api-2.2.3.jar jaxb-impl-2.2.4-1.jar 在jdk1.6中不兼容的问题,报错如下:. 原因是:需要jaxb 2.1,却加载了2.0,因为jdk1.6自带jaxb 2.0造成的,解决的办法是在D:\tomcat6下加入endorsed文件夹,.

JAVA内存使用--如何计算一个Java对象占用的字节数

- - Java - 编程语言 - ITeye博客
转自(http://blog.csdn.net/kp034/article/details/7077757). 通常,我们谈论的堆内存使用的前提是以“一般情况”为背景的. 1.某些情况下,JVM根本就没有把Object放入堆中. 例如:原则上讲,一个小的thread-local对象存在于栈中,而不是在堆中.

判断字符串是否是有效json对象(java + gson )

- - 改善
已有 0 人发表留言,猛击->> 这里<<-参与讨论. —软件人才免语言低担保 赴美带薪读研.