`
huiqinbo
  • 浏览: 341502 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JAXB2完成java bean到xml的相互转换【转】

 
阅读更多

JAXB2完成java bean到xml的相互转换

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进行xml和javabean之间转换

    而JAXB(Java Architecture for XML Binding)是Java提供的一种标准API,它允许我们轻松地在Java对象(javabean)和XML文档之间进行转换。通过JAXB,开发者可以避免手动编写XML解析和序列化代码,极大地提高了开发...

    java 使用 JAXB 将xml转换为 bean 包含xml和dto和读取文件的util类

    Java中的JAXB(Java Architecture for XML Binding)是一个用于在Java对象和XML文档之间进行映射的标准API。这个技术使得开发者可以方便地将XML数据转换为Java对象,反之亦然。在给定的压缩包文件中,可能包含了实现...

    利用jaxb实现xml和bean互转

    2. **注解Java Bean**: 使用JAXB注解如`@XmlRootElement`, `@XmlElement`, `@XmlAttribute`等来标记哪些类、字段应该被映射到XML。 3. **创建Context**: 创建`JAXBContext`对象,它是整个转换过程的核心。它知道...

    jaxb XMl和BEAN互转实例(内含jar包)

    在给定的"jaxb XMl和BEAN互转实例(内含jar包)"中,我们有一个实用工具类,它简化了使用JAXB进行XML与BEAN对象之间转换的过程。 在Java编程中,BEAN通常指的是符合JavaBeans规范的简单Java类,它们通常包含getter...

    JavaXml及Bean互转

    本篇将详细介绍两种常用的Java XML与Bean互转方法:XStream库和JAXB(Java Architecture for XML Binding)框架。 一、XStream库 1. **XStream简介**: XStream是一个用于Java的轻量级库,它提供了一种简单的API来...

    xml和bean之间的相互转换源码

    在Java开发中,XML(可扩展标记语言)和Bean之间的相互转换是常见的操作,尤其是在处理配置文件、数据持久化或Web服务时。这里的"bean"通常指的是JavaBeans,即符合特定设计模式的Java对象,它们封装了数据并提供了...

    JAXBContext测试Java对象与xml的相互转换Demo

    JAXBContext是JAXB框架的核心,它扮演着一个工厂的角色,负责创建Unmarshaller(用于从XML到Java对象的转换)和Marshaller(用于从Java对象到XML的转换)。在这个"JAXBContext测试Java对象与xml的相互转换Demo"中,...

    xml和bean 互相转换

    可以通过JAXB(Java Architecture for XML Binding)自动将XML映射到Java Bean,也可以手动创建Bean并设置属性。 3. **属性映射**:使用反射或JAXB将XML节点的值设置到Bean的对应属性上。反射API可以动态地获取类的...

    xml文件自动转成java对象工具

    XML文件自动转换为Java对象工具是一种实用的开发辅助软件,它可以帮助程序员快速地将XML数据映射到Java类,从而简化了数据处理的过程。在Java开发中,XML常被用作数据交换格式,但手动编写Java类来表示XML结构既耗时...

    javabean和xml互相转换工具类以及jar包

    JavaBean和XML之间的转换在软件...在给定的资源中,`commons-betwixt-0.8.jar`提供了Betwixt库,而`Bean2xml.java`可能是实现转换的工具类,简化了开发工作。在实际项目中,根据需求和性能考虑选择合适的方法进行转换。

    JAXBUtil使用JAXB进行xml和bean互转

    本篇文章将深入探讨如何使用JAXBUtil来实现XML和bean之间的互转,并基于提供的文件`JaxbObjectAndXmlUtil.java`和`ReqMsBean.java`进行实例解析。 首先,我们来看`ReqMsBean.java`,这是一个简单的Java Bean定义,...

    使用jaxb将XML转化为JAVA BEAN

    2. **反序列化(Unmarshalling)**:将XML文档转换为Java对象。这通常涉及解析XML文件并创建相应的Java对象实例。例如,从一个XML文件中创建`Person`对象: ```xml &lt;name&gt;John Doe &lt;age&gt;30 ``` 我们可以使用...

    java对象与xml的互相转换

    JAXB允许我们将Java类绑定到XML Schema,从而能够方便地在Java对象和XML文档之间进行转换。要使用JAXB,你需要定义一个Java类,该类的字段对应于XML元素,然后使用JAXB提供的API将该对象转换为XML。 以下是一个简单...

    jibx 开发指南 Jibx完成Java到XML的相互转换

    Jibx是一款强大的Java到XML数据绑定框架,它允许开发者将Java对象直接序列化为XML文档,同时也可以从XML文档反序列化回Java对象。在本文中,我们将深入探讨Jibx的使用方法,了解其如何实现Java对象与XML之间的转换,...

    Jaxb2 实现JavaBean与xml互转

    总结,JAXB2作为Java中处理XML的强大工具,提供了自动化的JavaBean到XML以及XML到JavaBean的转换,极大地提高了开发效率。通过注解和API,我们可以灵活地定制XML的结构和样式,满足不同场景的需求。在实际开发中,...

    xml to bean or bean to xml

    2. Bean到XML转换: 这个过程称为XML的序列化。同样的,JAXB提供了一个简单的方法将Java对象转换为XML。假设我们已经有了一个`Employee`对象,我们可以使用Marshaller将其转换为XML: ```java Marshaller ...

    Object-XML文件的相互转换分析

    在Spring中,`BeanUtils`类提供了基本的对象-XML转换功能,而`XmlBeanDefinitionReader`则负责读取XML配置文件并创建bean定义。 XML到Object的转换通常涉及到以下步骤: 1. **解析XML**:使用DOM、SAX或StAX等解析...

    jaxb xml 转map

    本话题我们将深入探讨如何使用JAXB将XML转换为Map。 XML是一种结构化数据表示方式,广泛用于数据交换和配置文件。而Map是Java中的一种数据结构,它将键(Key)与值(Value)关联起来,提供快速查找和存储。将XML...

    xml转javaBean,javaBean转xml,xml标签大小写问题,以及对xml特殊符号的处理

    这一过程通常通过XML解析器来完成,如JAXB(Java Architecture for XML Binding)或DOM4J等。JAXB提供了一种自动将XML文档映射到Java对象的机制,反之亦然。首先,我们需要定义一个JavaBean类,其属性与XML元素相...

    castor样例xml to bean和bean to xml样例

    2. Bean到XML转换: 反之,如果你有一个Java对象并且希望将其转换为XML格式,Castor也能轻松实现。通过调用Castor提供的序列化方法,你可以将Java对象转换为XML字符串或直接写入XML文件。这样,Java对象的数据就以...

Global site tag (gtag.js) - Google Analytics