- 浏览: 369229 次
- 性别:
- 来自: Alien
文章分类
最新评论
-
风一样的男人__:
[flash=200,200][url]引用[/url][/f ...
java线程内存模型,线程、工作内存、主内存 -
极乐君:
厉害了,,,请问可以转载到我们专栏吗?会注明来源和地址的~专栏 ...
java线程内存模型,线程、工作内存、主内存 -
zdd001:
Spring 线程池使用 -
zdd001:
Spring 线程池使用 -
u014663756:
看了三行就知道是我想要的!!
java线程内存模型,线程、工作内存、主内存
jaxb2与xml之间相互转换
分类: jaxb与xml转换 2011-12-16 22:51 69人阅读 评论(0) 收藏 举报
什么是JAXB?
URL url = (new URI("http://shz01d007:9025/adviser/100241/accounts")).toURL();
AccountTestList content = (AccountTestList) unMarshal.unmarshal(url);
System.out.println(content.toString());
@XmlRootElement(name = "accounts")
public class AccountTestList extends ArrayList<AccountTest> {
@XmlElementRef(type = AccountTest.class)
public List<AccountTest> getAccountTest() {
return this;
}
}
@XmlRootElement(name = "account")
public class AccountTest {
private String id;
private String acctName;
/**
* @return the id
*/
public String getId() {
return id;
}
/**
* @param id the id to set
*/
public void setId(String id) {
this.id = id;
}
/**
* @return the acctName
*/
public String getAcctName() {
return acctName;
}
/**
* @param acctName the acctName to set
*/
public void setAcctName(String acctName) {
this.acctName = acctName;
}
}
Java Architecture for XML Binding (JAXB)是一个业界的标准,是一项可以根据XML Schema产生Java类的技术。该过程中,JAXB也提供了将XML实例文档反向生成Java对象树的方法,并能将Java对象树的内容重新写到XML实例文档。从另一方面来讲,JAXB提供了快速而简便的方法将XML模式绑定到Java表示,从而使得Java开发者在Java应用程序中能方便地结合XML数据和处理函数。
这意味着你不需要处理甚至不需要知道XML编程技巧就能在Java应用程序中利用平台核心XML数据的灵活性。而且,可以充分利用XML的优势而不用依赖于复杂的XML处理模型如SAX或DOM。JAXB隐藏了细节并且取消了SAX和DOM中没用的关系——生成的JAXB类仅描述原始模型中定义的关系。其结果是结合了高度可移植Java代码和高度可移植的XML数据。其中这些代码可用来创建灵活、轻便的应用程序和Web服务。
JAXB2使用了JDK的新特性。如:Annotation、GenericType等,Jaxb2需要在即将转换的JavaBean中添加annotation注解。下面我们就来看看Jaxb2是怎么样完成Java对象到XML之间的相互转换的吧。
[java] view plaincopy
@XmlRootElement(name="bean")
public class Info implements Serializable {
private int id;
private String name;
private String email;
@XmlAttribute(name="num")
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@XmlElement
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@XmlElement
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
[java] view plaincopy
@Test
public void testObject() {
Info info = new Info();
info.setId(1);
info.setName("allan");
info.setEmail("tom@tom.com");
try {
JAXBContext context = JAXBContext.newInstance(Info.class);
Marshaller marshal = context.createMarshaller();
StringWriter writer = new StringWriter();
marshal.marshal(info, writer);
System.out.println(writer);
Unmarshaller unMarshal = context.createUnmarshaller();
StringReader reader = new StringReader(writer.toString());
Info content = (Info) unMarshal.unmarshal(reader);
System.out.println("ID:" + content.getId() + "\n名字:"
+ content.getName() + "\nemail:" + content.getEmail());
} catch (JAXBException e) {
e.printStackTrace();
}
}
上面一段是JavaBean和XML的相互转换,传递了一个Info.class,这个Info不是一般的普通的bean。除了它带有getter、setter方法外,还有Annotation注解。
上面的XmlRootElement是设置当前对象转换成xml后的根节点,name的值是设置根节点的名称。在getter方法上设置XmlElement表示这个方法对应的属性是一个xml元素,如果这个注解还设置了name,那么这个name就是转换后xml的名称。在一个属性上设置XmlAttribute,表示这个方法对应的属性在转换xml后是父元素的一个属性。XmlAttribute的name就是转换后xml的属性的name。
[java] view plaincopy
@XmlRootElement(name="list-beans")
public class ListBean {
private List<Object> list;
private String name;
@XmlElements({
@XmlElement(name="bean",type=Info.class)
})
public List<Object> getList() {
return list;
}
public void setList(List<Object> list) {
this.list = list;
}
@XmlAttribute
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
[java] view plaincopy
@Test
public void testList() {
List<Object> list = new ArrayList<Object>();
Info info = new Info();
info.setId(1);
info.setName("allan");
info.setEmail("tom@tom.com");
Info info2 = new Info();
info2.setId(2);
info2.setName("allan2");
info2.setEmail("tom2@tom.com");
list.add(info);
list.add(info2);
ListBean listBean = new ListBean();
listBean.setName("list to xml");
listBean.setList(list);
try {
JAXBContext context = JAXBContext.newInstance(ListBean.class);
Marshaller marshal = context.createMarshaller();
StringWriter writer = new StringWriter();
marshal.marshal(listBean, writer);
System.out.println(writer);
Unmarshaller unMarshal = context.createUnmarshaller();
StringReader reader = new StringReader(writer.toString());
ListBean content = (ListBean) unMarshal.unmarshal(reader);
System.out.println(content.getName());
} catch (JAXBException e) {
e.printStackTrace();
}
}
上面一段是List和XML的相互转换
XmlElements表示是一个集合类型,然后注解在集合中存放上面类型的对象。
XmlElement表示在集合中存放的一个对象类型和元素名称。
[java] view plaincopy
@XmlRootElement(name="map-beans")
public class MapBean {
Map<String,Info> map;
@XmlJavaTypeAdapter(MapAdapter.class)
public Map<String, Info> getMap() {
return map;
}
public void setMap(Map<String, Info> map) {
this.map = map;
}
}
[java] view plaincopy
public class MapElement {
/*@XmlElement
public String key;
@XmlElement
public Info value;
public MapElement() {
}
public MapElement(String key, Info value) {
super();
this.key = key;
this.value = value;
}*/
private String key;
private Info value;
private MapElement() {
}
public MapElement(String key, Info value) {
super();
this.key = key;
this.value = value;
}
@XmlElement
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
@XmlElement
public Info getValue() {
return value;
}
public void setValue(Info value) {
this.value = value;
}
}
[java] view plaincopy
public class MapAdapter extends XmlAdapter<MapElement[],Map<String,Info>>{
@Override
public Map<String, Info> unmarshal(MapElement[] param) throws Exception {
Map<String, Info> map=new HashMap<String, Info>();
for (MapElement element:param) {
//map.put(element.key, element.value);
map.put(element.getKey(), element.getValue());
}
return map;
}
@Override
public MapElement[] marshal(Map<String, Info> param) throws Exception {
MapElement[] element=new MapElement[param.size()];
int i=0;
for (Map.Entry<String, Info> entry: param.entrySet()) {
element[i++]=new MapElement(entry.getKey(),entry.getValue());
}
return element;
}
}
[java] view plaincopy
@Test
public void testMap() {
MapBean mapBean = new MapBean();
Info info = new Info();
info.setId(1);
info.setName("allan");
info.setEmail("tom@tom.com");
Info info2 = new Info();
info2.setId(2);
info2.setName("allan2");
info2.setEmail("tom2@tom.com");
Map<String, Info> map = new HashMap<String, Info>();
map.put("NO1", info);
map.put("NO2", info2);
mapBean.setMap(map);
try {
JAXBContext context = JAXBContext.newInstance(MapBean.class);
Marshaller marshal = context.createMarshaller();
StringWriter writer = new StringWriter();
//按照jaxb的格式输出
marshal.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE); marshal.marshal(mapBean, writer);
System.out.println(writer);
Unmarshaller unMarshal = context.createUnmarshaller();
StringReader reader = new StringReader(writer.toString());
MapBean content = (MapBean) unMarshal.unmarshal(reader);
System.out.println(content.getMap().size());
} catch (JAXBException e) {
e.printStackTrace();
}
}
上面的map集合的getter方法有一个XmlJavaTypeAdapter,需要传递一个Adapter的类型。
完整代码下载地址:http://download.csdn.net/detail/allan_chan/3931401
分类: jaxb与xml转换 2011-12-16 22:51 69人阅读 评论(0) 收藏 举报
什么是JAXB?
URL url = (new URI("http://shz01d007:9025/adviser/100241/accounts")).toURL();
AccountTestList content = (AccountTestList) unMarshal.unmarshal(url);
System.out.println(content.toString());
@XmlRootElement(name = "accounts")
public class AccountTestList extends ArrayList<AccountTest> {
@XmlElementRef(type = AccountTest.class)
public List<AccountTest> getAccountTest() {
return this;
}
}
@XmlRootElement(name = "account")
public class AccountTest {
private String id;
private String acctName;
/**
* @return the id
*/
public String getId() {
return id;
}
/**
* @param id the id to set
*/
public void setId(String id) {
this.id = id;
}
/**
* @return the acctName
*/
public String getAcctName() {
return acctName;
}
/**
* @param acctName the acctName to set
*/
public void setAcctName(String acctName) {
this.acctName = acctName;
}
}
Java Architecture for XML Binding (JAXB)是一个业界的标准,是一项可以根据XML Schema产生Java类的技术。该过程中,JAXB也提供了将XML实例文档反向生成Java对象树的方法,并能将Java对象树的内容重新写到XML实例文档。从另一方面来讲,JAXB提供了快速而简便的方法将XML模式绑定到Java表示,从而使得Java开发者在Java应用程序中能方便地结合XML数据和处理函数。
这意味着你不需要处理甚至不需要知道XML编程技巧就能在Java应用程序中利用平台核心XML数据的灵活性。而且,可以充分利用XML的优势而不用依赖于复杂的XML处理模型如SAX或DOM。JAXB隐藏了细节并且取消了SAX和DOM中没用的关系——生成的JAXB类仅描述原始模型中定义的关系。其结果是结合了高度可移植Java代码和高度可移植的XML数据。其中这些代码可用来创建灵活、轻便的应用程序和Web服务。
JAXB2使用了JDK的新特性。如:Annotation、GenericType等,Jaxb2需要在即将转换的JavaBean中添加annotation注解。下面我们就来看看Jaxb2是怎么样完成Java对象到XML之间的相互转换的吧。
[java] view plaincopy
@XmlRootElement(name="bean")
public class Info implements Serializable {
private int id;
private String name;
private String email;
@XmlAttribute(name="num")
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@XmlElement
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@XmlElement
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
[java] view plaincopy
@Test
public void testObject() {
Info info = new Info();
info.setId(1);
info.setName("allan");
info.setEmail("tom@tom.com");
try {
JAXBContext context = JAXBContext.newInstance(Info.class);
Marshaller marshal = context.createMarshaller();
StringWriter writer = new StringWriter();
marshal.marshal(info, writer);
System.out.println(writer);
Unmarshaller unMarshal = context.createUnmarshaller();
StringReader reader = new StringReader(writer.toString());
Info content = (Info) unMarshal.unmarshal(reader);
System.out.println("ID:" + content.getId() + "\n名字:"
+ content.getName() + "\nemail:" + content.getEmail());
} catch (JAXBException e) {
e.printStackTrace();
}
}
上面一段是JavaBean和XML的相互转换,传递了一个Info.class,这个Info不是一般的普通的bean。除了它带有getter、setter方法外,还有Annotation注解。
上面的XmlRootElement是设置当前对象转换成xml后的根节点,name的值是设置根节点的名称。在getter方法上设置XmlElement表示这个方法对应的属性是一个xml元素,如果这个注解还设置了name,那么这个name就是转换后xml的名称。在一个属性上设置XmlAttribute,表示这个方法对应的属性在转换xml后是父元素的一个属性。XmlAttribute的name就是转换后xml的属性的name。
[java] view plaincopy
@XmlRootElement(name="list-beans")
public class ListBean {
private List<Object> list;
private String name;
@XmlElements({
@XmlElement(name="bean",type=Info.class)
})
public List<Object> getList() {
return list;
}
public void setList(List<Object> list) {
this.list = list;
}
@XmlAttribute
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
[java] view plaincopy
@Test
public void testList() {
List<Object> list = new ArrayList<Object>();
Info info = new Info();
info.setId(1);
info.setName("allan");
info.setEmail("tom@tom.com");
Info info2 = new Info();
info2.setId(2);
info2.setName("allan2");
info2.setEmail("tom2@tom.com");
list.add(info);
list.add(info2);
ListBean listBean = new ListBean();
listBean.setName("list to xml");
listBean.setList(list);
try {
JAXBContext context = JAXBContext.newInstance(ListBean.class);
Marshaller marshal = context.createMarshaller();
StringWriter writer = new StringWriter();
marshal.marshal(listBean, writer);
System.out.println(writer);
Unmarshaller unMarshal = context.createUnmarshaller();
StringReader reader = new StringReader(writer.toString());
ListBean content = (ListBean) unMarshal.unmarshal(reader);
System.out.println(content.getName());
} catch (JAXBException e) {
e.printStackTrace();
}
}
上面一段是List和XML的相互转换
XmlElements表示是一个集合类型,然后注解在集合中存放上面类型的对象。
XmlElement表示在集合中存放的一个对象类型和元素名称。
[java] view plaincopy
@XmlRootElement(name="map-beans")
public class MapBean {
Map<String,Info> map;
@XmlJavaTypeAdapter(MapAdapter.class)
public Map<String, Info> getMap() {
return map;
}
public void setMap(Map<String, Info> map) {
this.map = map;
}
}
[java] view plaincopy
public class MapElement {
/*@XmlElement
public String key;
@XmlElement
public Info value;
public MapElement() {
}
public MapElement(String key, Info value) {
super();
this.key = key;
this.value = value;
}*/
private String key;
private Info value;
private MapElement() {
}
public MapElement(String key, Info value) {
super();
this.key = key;
this.value = value;
}
@XmlElement
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
@XmlElement
public Info getValue() {
return value;
}
public void setValue(Info value) {
this.value = value;
}
}
[java] view plaincopy
public class MapAdapter extends XmlAdapter<MapElement[],Map<String,Info>>{
@Override
public Map<String, Info> unmarshal(MapElement[] param) throws Exception {
Map<String, Info> map=new HashMap<String, Info>();
for (MapElement element:param) {
//map.put(element.key, element.value);
map.put(element.getKey(), element.getValue());
}
return map;
}
@Override
public MapElement[] marshal(Map<String, Info> param) throws Exception {
MapElement[] element=new MapElement[param.size()];
int i=0;
for (Map.Entry<String, Info> entry: param.entrySet()) {
element[i++]=new MapElement(entry.getKey(),entry.getValue());
}
return element;
}
}
[java] view plaincopy
@Test
public void testMap() {
MapBean mapBean = new MapBean();
Info info = new Info();
info.setId(1);
info.setName("allan");
info.setEmail("tom@tom.com");
Info info2 = new Info();
info2.setId(2);
info2.setName("allan2");
info2.setEmail("tom2@tom.com");
Map<String, Info> map = new HashMap<String, Info>();
map.put("NO1", info);
map.put("NO2", info2);
mapBean.setMap(map);
try {
JAXBContext context = JAXBContext.newInstance(MapBean.class);
Marshaller marshal = context.createMarshaller();
StringWriter writer = new StringWriter();
//按照jaxb的格式输出
marshal.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE); marshal.marshal(mapBean, writer);
System.out.println(writer);
Unmarshaller unMarshal = context.createUnmarshaller();
StringReader reader = new StringReader(writer.toString());
MapBean content = (MapBean) unMarshal.unmarshal(reader);
System.out.println(content.getMap().size());
} catch (JAXBException e) {
e.printStackTrace();
}
}
上面的map集合的getter方法有一个XmlJavaTypeAdapter,需要传递一个Adapter的类型。
完整代码下载地址:http://download.csdn.net/detail/allan_chan/3931401
发表评论
-
JS日历控件
2013-04-24 23:58 983http://www.cnblogs.com/yank/a ... -
SVN服务器搭建及安装包 转
2013-04-09 14:42 1052http://blog.csdn.net/lincyang ... -
SVN学习笔记
2013-04-09 14:33 1SVN学习笔记 1.SVN基础知识 1.1 checko ... -
MyEclipse 8.6手动安装svn
2013-04-09 14:31 1015MyEclipse 8.6手动安装svn (测试可用) ... -
通过Eclipse插件启动Tomcat的问题 转
2013-04-05 01:38 1580通过Eclipse插件启动Tomcat的问题 设置JA ... -
jsp路径(转)
2012-12-07 02:52 964Java综合 要在/jsp/index.jsp文件 ... -
抽象类和接口
2012-09-07 17:57 885接口是公开的,里面不能有私有的方法或变量,是用于让别人使用的, ... -
Client访问服务器
2012-08-24 09:58 1212public class Test { private ... -
java oject 转化成XML文件,发送请求到服务器,返回XML文件
2012-08-23 17:17 1297StringWriter writer1 = new ... -
List对象排序通用方法(转)
2012-05-09 13:55 1028List对象排序通用方法 ... -
Dom 解析
2012-02-17 17:08 1026<setting><same enable= ... -
java 基础性能'
2012-02-04 00:11 93712.尽量合理的创建HashM ... -
统计一个目录下的图片信息
2012-01-11 19:24 890Map sizeMap = new HashMap(); ... -
[转]session详解
2012-01-10 10:54 954[转]session详解 目录: 一、术语session 二 ... -
枚举例子
2011-12-22 17:24 1104public enum PCOptionStatusEnum ... -
jxt Excel 导入数据
2011-12-02 17:47 1527package com.xiu.commerce.attrib ... -
try cathc finally 代码优化
2011-11-30 22:21 1104boolean sucess=false;//业务处理成功标志 ... -
JXT 导出数据到EXCEL
2011-10-25 10:30 17801. public class ExportExcel { ... -
Effective java 对像引用和hashcode和equals方法实现
2011-10-10 10:12 10421:是考虑用static 来代替构造方法,通过私有构造器强化不 ... -
hashcode equal方法
2011-09-17 10:04 1038import java.util.ArrayList; ...
相关推荐
使用java jdk的JAXB技术实现xml与java对象互相转化代码教程: JDK中JAXB相关的重要Class和Interface:(来源于百度百科JAXB) •JAXBContext类,是应用的入口,用于管理XML/Java绑定信息。 •Marshaller接口,将Java...
Java Architecture for XML Binding(JAXB)是Java平台上的一个标准技术,它允许开发者在XML文档和Java对象之间进行无缝转换。这项技术的核心理念是通过自动的编译过程,将XML Schema(XSD)定义的数据结构映射为...
在本文中,我们将深入探讨如何使用JAXB实现Java对象与XML的互相转换。 首先,我们需要理解JAXB的基本工作原理。JAXB基于Java注解,这些注解用于标记Java类和它们的属性,以便JAXB知道哪些元素和属性应该映射到XML中...
在Java开发中,JAXB(Java Architecture for XML Binding)是一个标准的API,用于将XML文档与Java对象之间进行互相转换。这个技术对于处理XML数据,尤其是解析和生成XML文档非常有用。当我们面临XML文档中存在嵌套子...
在Java世界中,JAXB(Java Architecture for XML Binding)是一个标准的API,用于将XML文档与Java对象之间进行互相转换。这个过程被称为对象绑定。在处理XML数据时,JAXB提供了一种方便的方式,让我们可以将XML数据...
通过这种方式,可以有效地实现XML数据和Java对象之间的相互转换,极大地简化了基于XML的应用程序的开发过程。需要注意的是,在实际应用中可能还需要考虑更多的细节和异常处理,但本文所介绍的基础知识已经足够让你...
Java Architecture for XML Binding (JAXB) 是Java平台上的一个标准技术,它允许在Java对象(如JavaBeans)和XML文档之间进行互相转换。这个过程被称为对象绑定,它简化了XML数据的处理,使得开发人员无需手动编写...
在Java开发中,XML(可扩展标记语言)和Bean之间的相互转换是常见的操作,尤其是在处理配置文件、数据持久化或Web服务时。这里的"bean"通常指的是JavaBeans,即符合特定设计模式的Java对象,它们封装了数据并提供了...
总结一下,Java对象与XML之间的转换主要依赖于JAXB框架。通过定义Java类和使用JAXB提供的`Marshaller`和`Unmarshaller`,我们可以方便地在Java对象和XML文档之间进行互换。对于更复杂的场景,例如Web服务交互,可能...
总结一下,JAXB的Eclipse插件是Java开发者处理XML数据的强大工具,它集成了XML Schema与Java类的相互转换、源代码编辑支持以及调试等功能。通过利用这些插件,开发者可以更加高效地进行XML相关的开发工作,实现Java...
它是Java EE标准的一部分,提供了一种机制来将Java对象与XML文档相互转换。使用JAXB,可以通过简单的API调用来序列化和反序列化Java对象为XML文档,反之亦然。 **特点:** - **简单易用**:只需在Java类上添加一些...
JAXB(Java Architecture for XML Binding)是Java平台标准中的一个部分,它提供了一种将Java对象和XML文档之间进行互相转换的机制。通过JAXB,开发者可以方便地在Java对象和XML之间进行序列化和反序列化操作,极大...
在Java开发中,XML(可扩展标记语言)和Bean之间的互相转换是一项常见的任务,尤其是在处理配置文件、数据交换或者序列化场景中。本篇将详细阐述XML与Bean之间的转换过程,以及相关的Java技术。 首先,XML是一种...
在Spring中,我们还可以利用`@XmlElement`、`@XmlAttribute`、`@XmlElementRef`等JAXB注解进一步定制对象与XML之间的映射。此外,Spring还支持使用`<bean>`标签自定义bean的属性和依赖关系,使得XML配置更加灵活。 ...
JavaBean和XML之间的转换在软件开发中扮演着重要的角色,特别是在数据交换和接口通信中。当我们需要在不同的系统之间传递信息时,XML由于其结构化和可读性,经常被用作数据传输的标准格式。然而,JavaBean是Java中...
JAXB (Java Architecture for XML Binding) 是Java平台上的一个标准,它允许开发人员将XML文档与Java对象之间进行绑定,从而实现XML数据的序列化和反序列化。Jaxb2是JAXB的一个版本,从JDK 1.6开始成为其内置组件,...
在这个"JAXBContext测试Java对象与xml的相互转换Demo"中,我们将深入探讨如何利用JAXBContext实现这一功能。 首先,我们需要定义一个Java类,这个类将被映射为XML文档的元素。例如,我们可以创建一个`Person`类,...
在标题提到的"access, sqlserver, oracle, mysql与xml之间的相互转换"中,我们探讨的是如何使用编程语言(在这个案例中是Java)来实现在不同数据库系统和XML数据格式间的转换。XML(eXtensible Markup Language)是...