Ordinary hut

人间一福地,胜似天仙宫
posts - 61, comments - 50, trackbacks - 0, articles - 1

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

Posted on 2011-06-03 12:04 landor 阅读(7168) 评论(1)  编辑  收藏 所属分类: XML
JAXB功能非常强大,主要是对java bean到xml之间的互转;JAXB的doc比较全面,网址:
http://jaxb.java.net/tutorial/
jdk5+已经自带了jaxb的包;应该是在rt.jar里;用法也比较简单,步骤如下:
1 加入@XmlRootElement注解,标识xml根节点,默认名字是类名,可以加入name属性来改名;
@XmlRootElement
public class User{
    
private String userId;
    
private String userName;
    
public String getUserId(){};
    
public String getUserName(){};
2 加入@XmlElement注解,生成xml中的子节点,其实可以不加,不加默认就是生成,可以指定name修改节点名
    private String userId;
    private String userName;
     @XmlElement
    public String getUserId(){};
    
public String getUserName(){};
3 现在就可以生成xml了,代码如下:
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,比如:
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方法上)
    @XmlAttribute
    
String userId;
    @XmlAttribute
   
String userName;
生成的xml类似:
<user userId="id1" userName="aaa">
    
<!--其他元素内容-->
</user>

2 如果想在节点外面包裹一层,可以用
    @XmlElementWrapper(name="wapper" )
    @XmlAttribute
    
private String userName;
生成的xml类似:
<user>
    
<userId>id1</userId>
    
<wapper>
        
<userName>aaa</userName>
    
</wapper>
    
<!--其他元素内容-->
</user>
3 关于多态,JAXB也是支持的:有两种方式
    A 通过@XmlSeeAlso,比如:
@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()中加入这些子类:比如
JAXBContext context = JAXBContext.newInstance(user.getClass(), Man.class, Girl.class);

以上两种方式都可以把xml  Unmarshaller 成java bean;根据情况任选其一。


Feedback

# re: JAXB2完成java bean到xml的相互转换  回复  更多评论   

2015-03-08 09:01 by zuidaima
java通过JAXB框架转换xml为java bean对象代码片段分享 http://zuidaima.com/share/2180116115393536.htm

只有注册用户登录后才能发表评论。


网站导航: