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;根据情况任选其一。
相关推荐
NULL 博文链接:https://luyuwww.iteye.com/blog/1988355
java 使用 JAXB 将xml转换为 bean 包含xml和dto和读取文件的util类
xml转javaBean,javaBean转xml,xml标签大小写问题,CDATA的生成,以及对xml特殊符号的处理
例如,您可能有一个带有几个属性的简单 bean,且您的业务需要将那个 Java 对象转换为一个 XML 文档。Spring 的 O/X Mapper 能够为您解决那个问题。如果反过来,您需要将一个 XML 文档转换为一个简单 Java bean,...
javax.xml.transform 此包定义了用于处理转换指令,以及执行从源到结果的转换的一般 API。 javax.xml.transform.dom 此包实现特定于 DOM 的转换 API。 javax.xml.transform.sax 此包实现特定于 SAX2 的转换 API。 ...
l JaxMe是JAXB(Java/XML绑定规范)的开源实现 l Java/XML绑定编译器的输入是模式描述:大多数是XML模式,也可以是DTD、RelaxNG模式、通过反射的JavaBean或数据库模式 l 输出是一系列Java类: Ø 兼容模式描述的...
javax.xml.transform 此包定义了用于处理转换指令,以及执行从源到结果的转换的一般 API。 javax.xml.transform.dom 此包实现特定于 DOM 的转换 API。 javax.xml.transform.sax 此包实现特定于 SAX2 的转换 API。 ...
用于json和Java Bean的相互转换。 下面从使用的角度上比较三种处理方式: Streaming API 执行效率最高,读写速度最快,另外两种方式都基于它实现; Tree Model 是最灵活的; Data Binding 通常是最方便使用...
javax.xml.transform 此包定义了用于处理转换指令,以及执行从源到结果的转换的一般 API。 javax.xml.transform.dom 此包实现特定于 DOM 的转换 API。 javax.xml.transform.sax 此包实现特定于 SAX2 的转换 API。 ...
javax.xml.transform 此包定义了用于处理转换指令,以及执行从源到结果的转换的一般 API。 javax.xml.transform.dom 此包实现特定于 DOM 的转换 API。 javax.xml.transform.sax 此包实现特定于 SAX2 的转换 API。 ...
javax.xml.transform 此包定义了用于处理转换指令,以及执行从源到结果的转换的一般 API。 javax.xml.transform.dom 此包实现特定于 DOM 的转换 API。 javax.xml.transform.sax 此包实现特定于 SAX2 的转换 API。 ...
4.6 Java EE中的JAXB 55 4.7 小结 64 第5章 使用Java Servlet开发动态网页 65 5.1 Servlet的概念和生命周期 65 5.2 如何编写Servlet 67 5.3 使用Eclipse和Tomcat开发Servlet实例——输出字符串响应 72 ...
javax.xml.transform 此包定义了用于处理转换指令,以及执行从源到结果的转换的一般 API。 javax.xml.transform.dom 此包实现特定于 DOM 的转换 API。 javax.xml.transform.sax 此包实现特定于 SAX2 的转换 API。 ...
javax.xml.transform 此包定义了用于处理转换指令,以及执行从源到结果的转换的一般 API。 javax.xml.transform.dom 此包实现特定于 DOM 的转换 API。 javax.xml.transform.sax 此包实现特定于 SAX2 的转换 API。 ...
javax.xml.stream javax.xml.stream.events javax.xml.stream.util javax.xml.transform 此包定义了用于处理转换指令,以及执行从源到结果的转换的一般 API。 javax.xml.transform.dom 此包实现特定于 DOM 的转换 ...
Spring3.0是Spring在积蓄了3年之久后,隆重推出的一个重大升级版本,进一步加强了Spring作为Java领域第一开源平台的翘楚地位。 Spring3.0引入了众多Java开发者翘首以盼的新功能和新特性,如OXM、校验及格式化框架...
Spring3.0是Spring在积蓄了3年之久后,隆重推出的一个重大升级版本,进一步加强了Spring作为Java领域第一开源平台的翘楚地位。 Spring3.0引入了众多Java开发者翘首以盼的新功能和新特性,如OXM、校验及格式化框架...