`

JAXB中不使用annotation的示例

阅读更多
在JAXB中,其实不用annotation也是可以的,虽然比较麻烦,下面是一个例子:

package blog.defaults;
 
import java.util.List;
 
public class Customer {
 
    private String firstName;
    private String lastName;
    private List<PhoneNumber> phoneNumbers;
 
    public String getFirstName() {
        return firstName;
    }
 
    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }
 
    public String getLastName() {
        return lastName;
    }
 
    public void setLastName(String lastName) {
        this.lastName = lastName;
    }
 
    public List<PhoneNumber> getPhoneNumbers() {
        return phoneNumbers;
    }
 
    public void setPhoneNumbers(List<PhoneNumber> phoneNumbers) {
        this.phoneNumbers = phoneNumbers;
    }
 
}



  另外一个POJO

package blog.defaults;
 
public class PhoneNumber {
 
    private String foo;
    private String bar;
 
    public String getType() {
        return foo;
    }
 
    public void setType(String type) {
        this.foo = type;
    }
 
    public String getNumber() {
        return bar;
    }
 
    public void setNumber(String number) {
        this.bar = number;
    }
 
}



  然后下面的是一个XML文件,先展示的是将xml文件反序列化为CUSTOMER类,
<?xml version="1.0" encoding="UTF-8"?>
<customer>
    <firstName>Jane</firstName>
    <lastName>Doe</lastName>
     <phoneNumbers>
         <number>555-1111</number>
         <type>work</type>
     </phoneNumbers>
     <phoneNumbers>
         <number>555-2222</number>
         <type>home</type>
     </phoneNumbers>
</customer>




   主程序如下:
package blog.defaults;

import javax.xml.bind.*;
import javax.xml.namespace.QName;
import javax.xml.transform.stream.StreamSource;

public class Demo {

    public static void main(String[] args) throws Exception {
        JAXBContext jc = JAXBContext.newInstance(Customer.class);

        StreamSource xml = new StreamSource("src/blog/defaults/input.xml");
        Unmarshaller unmarshaller = jc.createUnmarshaller();
        JAXBElement<Customer> je1 = unmarshaller.unmarshal(xml, Customer.class);
        Customer customer = je1.getValue();
 
        JAXBElement<Customer> je2 = new JAXBElement<Customer>(new QName("customer"), Customer.class, customer);
        Marshaller marshaller = jc.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
        marshaller.marshal(je2, System.out);
     }

}

   可以看到在Customer customer = je1.getValue();
这句之前,就是读入了xml文件,然后进行unmarshaller的操作,之后得到的是一个
JAXBElement的对象实例,然后通过getValue得到其Customer对象实例。然后
接下来的代码是将customer再重新序列化为xml了。
6
2
分享到:
评论
2 楼 yonge812 2013-08-27  
请问如果对象中的属性名称与xml的节点不一致,应该如何转换?
1 楼 yidao620c 2012-08-06  
其实这种简单的不加annotation的xml序列化和反序列化可以用xstream,复杂的采用jaxb。

相关推荐

Global site tag (gtag.js) - Google Analytics