JAXB--@XmlElementWrapper注解和泛型一起使用(三)

来源:互联网 发布:php reset current 编辑:程序博客网 时间:2024/04/29 12:32
当java对象的某个属性使用泛型时,普通对象都没问题,但是遇到HashSet这种集合类封装的元素时,就会出现元素内容序列化不出来的问题,详见如下:

 

一、示例:

第一步:定义java对象

 

 

 

    }   
 

第二步:编组(JAXBContext.newInstance(Customer.class,HashSet.class);方法添加了

HashSet的class对象,以提供给JAXBContext使用。

 

 

得到的xml:

 

 

 

注:

1.泛型使用集合元素替代时,泛型属性所对应的xml没有序列化出来。

2.若JAXBContext.newInstance(Customer.class,HashSet.class);不添加HashSet

的class对象,则报错:

[javax.xml.bind.JAXBException: class java.util.HashSet nor any of its super class is known to this context.]

 

解决办法:

第一步:新增HashSet的包装类

 

Book类和Customer类相关代码均不需要改变,新增一个HashSet的包装类,定义如下:

 

 

 

注:

1.BookSet类内部使用HashSet实现.

2.BookSet类在get方法上添加了@XmlElementWrapper(name = "bookSet")注解。

 

第二步:编组

 

 

 

注:

1.定义Customer对象时,使用包装类,即:

Customer<BookSet> customer = new Customer<BookSet>();

2.JAXBContext调用newInstance()方法时,传入BookSet的class对象,告知BookSet的类型,即:JAXBContext.newInstance(Customer.class,BookSet.class);

 

得到的xml:

 
原创粉丝点击