jdk6新特性_使用JAXB2来实现对象与XML之间的映射

简介:JAXBJava Architecture for XML Binding的缩写,可以将一个Java对象转变成为XML格式,反之亦然。我们把对象与关系数据库之间的映射称为ORM, 其实也可以把对象与XML之间的映射称为OXM(Object XML Mapping). 原来JAXBJava EE的一部分,在JDK6中,SUN将其放到了Java SE中,这也是SUN的一贯做法。JDK6中自带的这个JAXB版本是2.0, 比起1.0(JSR 31)来,JAXB2(JSR 222)JDK5的新特性Annotation来标识要作绑定的类和属性等,这就极大简化了开发的工作量。实际上,在Java EE 5.0中,EJBWeb Services也通过Annotation来简化开发工作。另外,JAXB2在底层是用StAX(JSR 173)来处理XML文档。

优点:JAXB2.0支持使用Annotationjava代码中说明各种属性的XML风格,相当的方便。

1.  实例之一(由javaBean生成xml

package example;

 

import java.io.FileWriter;

import java.io.IOException;

import java.util.Calendar;

 

import javax.xml.bind.JAXBContext;

import javax.xml.bind.JAXBException;

import javax.xml.bind.Marshaller;

import javax.xml.bind.annotation.XmlElement;

import javax.xml.bind.annotation.XmlRootElement;

 

@XmlRootElement

public class User {

    @XmlElement

     String username;

    @XmlElement

     String password;

   

    public User(){

      

    }

     public User(String username, String password) {

       this.username = username;

       this.password = password;

    }

    public static void main(String[] args) throws JAXBException,IOException {

            JAXBContext context = JAXBContext.newInstance(User.class);

            //下面代码演示将对象转变为xml

            Marshaller m = context.createMarshaller();

            User user=new User("aaa","bbbb");

            FileWriter fw = new FileWriter("test.xml");

            m.marshal(user,fw);

     }

}

注意:username,password不用setxxx方法,可以写getxxx方法。

2.  实例之二(根据Xsd生成xml)

由上面的程序可以test.xml,可采用XMLSPy工具生成test.xml对应的xsd.

如:<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

<!--W 3C Schema XMLSpy v2006 U 创建 (http://www.altova.com)-->

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">

       <xs:element name="password">

              <xs:simpleType>

                     <xs:restriction base="xs:string">

                            <xs:enumeration value="bbbb"/>

                     </xs:restriction>

              </xs:simpleType>

       </xs:element>

       <xs:element name="user">

              <xs:complexType>

                     <xs:sequence>

                            <xs:element ref="username"/>

                            <xs:element ref="password"/>

                     </xs:sequence>

              </xs:complexType>

       </xs:element>

       <xs:element name="username">

              <xs:simpleType>

                     <xs:restriction base="xs:string">

                            <xs:enumeration value="aaa"/>

                     </xs:restriction>

              </xs:simpleType>

       </xs:element>

</xs:schema>

一个叫xjc的自带工具负责编译,如xjc -p  test  test.xsd     :  -p  指定生成的程序的包名。

会生成两个类:User.javaObjectFactory.java

测试类:

package test;

 

import java.io.FileWriter;

 

import javax.xml.bind.JAXBContext;

import javax.xml.bind.Marshaller;

 

public class Test {

 

    /**

     * @param args

     * @throws Exception

     */

    public static void main(String[] args) throws Exception {

 

          JAXBContext context = JAXBContext.newInstance(ObjectFactory.class);

            Marshaller m = context.createMarshaller();

            ObjectFactory  obj=new ObjectFactory();

            test.User user=obj.createUser();

            user.setUsername("xxxx");

            user.setPassword("bbbb");

            FileWriter fw = new FileWriter("test2.xml");

            m.marshal(user,fw);

    }

 

}

 

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值