Posted on 2011-06-03 12:04
landor 阅读(284)
评论(0) 编辑 收藏 所属分类:
XML <!--
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
<rdf:Description
rdf:about="http://www.blogjava.net/landor2004/archive/2011/06/03/351656.html"
dc:identifier="http://www.blogjava.net/landor2004/archive/2011/06/03/351656.html"
dc:title="JAXB2完成java bean到xml的相互转换"
trackback:ping="http://www.blogjava.net/landor2004/services/trackbacks/351656.aspx" />
</rdf:RDF>
-->
JAXB功能非常强大,主要是对java bean到xml之间的互转;JAXB的doc比较全面,网址:
http://jaxb.java.net/tutorial/jdk5+已经自带了jaxb的包;应该是在rt.jar里;用法也比较简单,步骤如下:
1 加入
@XmlRootElement注解,标识xml根节点,默认名字是类名,可以加入name属性来改名;
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->
@XmlRootElement
public class User{
private String userId;
private String userName;
public String getUserId(){};
public String getUserName(){};
2 加入@XmlElement注解,生成xml中的子节点,其实可以不加,不加默认就是生成,可以指定name修改节点名
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->
private String userId;
private String userName;
@XmlElement
public String getUserId(){};
public String getUserName(){};
3 现在就可以生成xml了,代码如下:
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->public class TestJAXB {
@Test
public void bean2XML() throws Exception{
User user = new User();
user.setUserId("id1");
user.setUserName("aaa");
JAXBContext context = JAXBContext.newInstance(user.getClass());
Marshaller m = context.createMarshaller();
StringWriter sw = new StringWriter();
m.marshal(user,sw);
System.out.println(sw.toString());
}
}
4 生成了xml文件,可以转换成bean,比如:
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->public class TestJAXB {
@Test
public void xml2Bean() throws Exception{
User user = new User();
String xml = "xml字符串";
JAXBContext context = JAXBContext.newInstance(user.getClass());
Unmarshaller um =context.createUnmarshaller();
StringReader sr = new StringReader(xml);
user = (User)um.unmarshal(sr);
System.out.println(user.getUserId());
}
}
简单转化就做完了,有几个地方:
1 生成xml比较简单,如果想把User里的userId和name变成xml根节点的一个属性可用(如果有get方法,需要加到get方法上)
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->
@XmlAttribute
String userId;
@XmlAttribute
String userName;
生成的xml类似:
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><user userId="id1" userName="aaa">
<!--其他元素内容-->
</user>
2 如果想在节点外面包裹一层,可以用
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--> @XmlElementWrapper(name="wapper" )
@XmlAttribute
private String userName;
生成的xml类似:
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><user>
<userId>id1</userId>
<wapper>
<userName>aaa</userName>
</wapper>
<!--其他元素内容-->
</user>
3 关于多态,JAXB也是支持的:有两种方式
A 通过@XmlSeeAlso,比如:
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->@XmlRootElement
public class User{
Person person;
}
@XmlSeeAlso({Man.class, Girl.class})
public class Person{
}
public class Man extends Person{
}
public class Girl extends Person{
}
B 用SeeAlso注解的缺点是:每次加一个子类都需要修改注解代码重新编译,其实可以直接在JAXBContext.newInstance()中加入这些子类:比如
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->JAXBContext context = JAXBContext.newInstance(user.getClass(), Man.class, Girl.class);
以上两种方式都可以把xml Unmarshaller 成java bean;根据情况任选其一。
相关推荐
而JAXB(Java Architecture for XML Binding)是Java提供的一种标准API,它允许我们轻松地在Java对象(javabean)和XML文档之间进行转换。通过JAXB,开发者可以避免手动编写XML解析和序列化代码,极大地提高了开发...
2. **注解Java Bean**: 使用JAXB注解如`@XmlRootElement`, `@XmlElement`, `@XmlAttribute`等来标记哪些类、字段应该被映射到XML。 3. **创建Context**: 创建`JAXBContext`对象,它是整个转换过程的核心。它知道...
Java中的JAXB(Java Architecture for XML Binding)是一个用于在Java对象和XML文档之间进行映射的标准API。这个技术使得开发者可以方便地将XML数据转换为Java对象,反之亦然。在给定的压缩包文件中,可能包含了实现...
在给定的"jaxb XMl和BEAN互转实例(内含jar包)"中,我们有一个实用工具类,它简化了使用JAXB进行XML与BEAN对象之间转换的过程。 在Java编程中,BEAN通常指的是符合JavaBeans规范的简单Java类,它们通常包含getter...
可以通过JAXB(Java Architecture for XML Binding)自动将XML映射到Java Bean,也可以手动创建Bean并设置属性。 3. **属性映射**:使用反射或JAXB将XML节点的值设置到Bean的对应属性上。反射API可以动态地获取类的...
本篇将详细介绍两种常用的Java XML与Bean互转方法:XStream库和JAXB(Java Architecture for XML Binding)框架。 一、XStream库 1. **XStream简介**: XStream是一个用于Java的轻量级库,它提供了一种简单的API来...
在Java开发中,XML(可扩展标记语言)和Bean之间的相互转换是常见的操作,尤其是在处理配置文件、数据持久化或Web服务时。这里的"bean"通常指的是JavaBeans,即符合特定设计模式的Java对象,它们封装了数据并提供了...
JAXBContext是JAXB框架的核心,它扮演着一个工厂的角色,负责创建Unmarshaller(用于从XML到Java对象的转换)和Marshaller(用于从Java对象到XML的转换)。在这个"JAXBContext测试Java对象与xml的相互转换Demo"中,...
在Java开发中,JAXB(Java Architecture for XML Binding)是一个标准的API,用于将XML文档与Java对象之间进行互相转换。这个技术对于处理XML数据,尤其是解析和生成XML文档非常有用。当我们面临XML文档中存在嵌套子...
XML文件自动转换为Java对象工具是一种实用的开发辅助软件,它可以帮助程序员快速地将XML数据映射到Java类,从而简化了数据处理的过程。在Java开发中,XML常被用作数据交换格式,但手动编写Java类来表示XML结构既耗时...
JavaBean和XML之间的转换在软件...在给定的资源中,`commons-betwixt-0.8.jar`提供了Betwixt库,而`Bean2xml.java`可能是实现转换的工具类,简化了开发工作。在实际项目中,根据需求和性能考虑选择合适的方法进行转换。
本篇文章将深入探讨如何使用JAXBUtil来实现XML和bean之间的互转,并基于提供的文件`JaxbObjectAndXmlUtil.java`和`ReqMsBean.java`进行实例解析。 首先,我们来看`ReqMsBean.java`,这是一个简单的Java Bean定义,...
2. **反序列化(Unmarshalling)**:将XML文档转换为Java对象。这通常涉及解析XML文件并创建相应的Java对象实例。例如,从一个XML文件中创建`Person`对象: ```xml <name>John Doe <age>30 ``` 我们可以使用...
JAXB允许我们将Java类绑定到XML Schema,从而能够方便地在Java对象和XML文档之间进行转换。要使用JAXB,你需要定义一个Java类,该类的字段对应于XML元素,然后使用JAXB提供的API将该对象转换为XML。 以下是一个简单...
Jibx是一款强大的Java到XML数据绑定框架,它允许开发者将Java对象直接序列化为XML文档,同时也可以从XML文档反序列化回Java对象。在本文中,我们将深入探讨Jibx的使用方法,了解其如何实现Java对象与XML之间的转换,...
2. Bean到XML转换: 这个过程称为XML的序列化。同样的,JAXB提供了一个简单的方法将Java对象转换为XML。假设我们已经有了一个`Employee`对象,我们可以使用Marshaller将其转换为XML: ```java Marshaller ...
总结,JAXB2作为Java中处理XML的强大工具,提供了自动化的JavaBean到XML以及XML到JavaBean的转换,极大地提高了开发效率。通过注解和API,我们可以灵活地定制XML的结构和样式,满足不同场景的需求。在实际开发中,...
在Spring中,`BeanUtils`类提供了基本的对象-XML转换功能,而`XmlBeanDefinitionReader`则负责读取XML配置文件并创建bean定义。 XML到Object的转换通常涉及到以下步骤: 1. **解析XML**:使用DOM、SAX或StAX等解析...
本话题我们将深入探讨如何使用JAXB将XML转换为Map。 XML是一种结构化数据表示方式,广泛用于数据交换和配置文件。而Map是Java中的一种数据结构,它将键(Key)与值(Value)关联起来,提供快速查找和存储。将XML...
这一过程通常通过XML解析器来完成,如JAXB(Java Architecture for XML Binding)或DOM4J等。JAXB提供了一种自动将XML文档映射到Java对象的机制,反之亦然。首先,我们需要定义一个JavaBean类,其属性与XML元素相...