注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

北漂的小羊

Java编程,开发者,程序员,软件开发,编程,代码。新浪微博号:IT国子监

 
 
 

日志

 
 
关于我

在这里是面向程序员的高品质IT技术学习社区,是程序员学习成长的地方。让我们更好地用技术改变世界。请关注新浪微博号: IT国子监(http://weibo.com/itguozijian)

网易考拉推荐

JAXB中不使用annotation注解方式进行处理的应用示例  

2012-12-05 17:43:03|  分类: JAVA |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
什么是jaxb?
http://java.sun.com/xml/jaxb/about.html

主要能干什么?
当人们需要用java应用程序来访问数据库的时候,jdbc诞生了
当人们觉得频繁的jdbc操作很繁琐的时候,o/r mapping诞生了
当人们需要用java操作xml的时候,sax, dom诞生了
当人们觉得用dom操作xml很繁琐的时候, jaxb诞生了
jaxb---将xml与java对象绑定的sun规范.

在JAXB中,其实不用annotation也是可以的,虽然比较麻烦,下面是一个例子: 
Java代码 
  1. package blog.defaults;  
  2.    
  3. import java.util.List;  
  4.    
  5. public class Customer {  
  6.    
  7.     private String firstName;  
  8.     private String lastName;  
  9.     private List<PhoneNumber> phoneNumbers;  
  10.    
  11.     public String getFirstName() {  
  12.         return firstName;  
  13.     }  
  14.    
  15.     public void setFirstName(String firstName) {  
  16.         this.firstName = firstName;  
  17.     }  
  18.    
  19.     public String getLastName() {  
  20.         return lastName;  
  21.     }  
  22.    
  23.     public void setLastName(String lastName) {  
  24.         this.lastName = lastName;  
  25.     }  
  26.    
  27.     public List<PhoneNumber> getPhoneNumbers() {  
  28.         return phoneNumbers;  
  29.     }  
  30.    
  31.     public void setPhoneNumbers(List<PhoneNumber> phoneNumbers) {  
  32.         this.phoneNumbers = phoneNumbers;  
  33.     }  
  34.    
  35. }  


  另外一个POJO 
Java代码 
  1. package blog.defaults;  
  2.    
  3. public class PhoneNumber {  
  4.    
  5.     private String foo;  
  6.     private String bar;  
  7.    
  8.     public String getType() {  
  9.         return foo;  
  10.     }  
  11.    
  12.     public void setType(String type) {  
  13.         this.foo = type;  
  14.     }  
  15.    
  16.     public String getNumber() {  
  17.         return bar;  
  18.     }  
  19.    
  20.     public void setNumber(String number) {  
  21.         this.bar = number;  
  22.     }  
  23.    
  24. }  


  然后下面的是一个XML文件,先展示的是将xml文件反序列化为CUSTOMER类, 
Java代码 
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <customer>  
  3.     <firstName>Jane</firstName>  
  4.     <lastName>Doe</lastName>  
  5.      <phoneNumbers>  
  6.          <number>555-1111</number>  
  7.          <type>work</type>  
  8.      </phoneNumbers>  
  9.      <phoneNumbers>  
  10.          <number>555-2222</number>  
  11.          <type>home</type>  
  12.      </phoneNumbers>  
  13. </customer>  


   主程序如下: 
Java代码 
  1. package blog.defaults;  
  2.   
  3. import javax.xml.bind.*;  
  4. import javax.xml.namespace.QName;  
  5. import javax.xml.transform.stream.StreamSource;  
  6.   
  7. public class Demo {  
  8.   
  9.     public static void main(String[] args) throws Exception {  
  10.         JAXBContext jc = JAXBContext.newInstance(Customer.class);  
  11.   
  12.         StreamSource xml = new StreamSource("src/blog/defaults/input.xml");  
  13.         Unmarshaller unmarshaller = jc.createUnmarshaller();  
  14.         JAXBElement<Customer> je1 = unmarshaller.unmarshal(xml, Customer.class);  
  15.         Customer customer = je1.getValue();  
  16.    
  17.         JAXBElement<Customer> je2 = new JAXBElement<Customer>(new QName("customer"), Customer.class, customer);  
  18.         Marshaller marshaller = jc.createMarshaller();  
  19.         marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);  
  20.         marshaller.marshal(je2, System.out);  
  21.      }  
  22.   
  23. }  

   可以看到在Customer customer = je1.getValue(); 
这句之前,就是读入了xml文件,然后进行unmarshaller的操作,之后得到的是一个 
JAXBElement的对象实例,然后通过getValue得到其Customer对象实例。然后 
接下来的代码是将customer再重新序列化为xml了。
  评论这张
 
阅读(521)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016