2014-03-27 228 views
0

我的类层次结构拆封类:扩展抽象泛型类

@XmlAccessorType(XmlAccessType.FIELD) 
public abstract class GenericItem { 
    @XmlElement(name = "Id", required = true) 
    private String itemId; 
    ////other fields 
} 

@XmlAccessorType(XmlAccessType.FIELD) 
public class Item extends GenericItem { 
    @XmlElement(name = "AreaType", required = true) 
    private String areaType; 
    ///other fields 
} 


@XmlAccessorType(XmlAccessType.FIELD) 
public abstract class GenericData<T extends GenericItem>{ 

    @XmlElement(name = "Item") 
    private List<T> itemList; 

    public List<T> getItemList() { 
    return itemList; 
    } 

    public void setItemList(List<T> itemList) { 
    this.itemList = itemList; 
    } 
    ////other fields 
} 


@XmlRootElement(name = "Data") 
@XmlAccessorType(XmlAccessType.FIELD) 
public class Data extends GenericData<Item> { 
    ////other fields 
} 

当我尝试unmarahal XML文档,看起来像

<Data> 
    <Item/> 
    <Item/> 
</Date> 

我有错误javax.xml.bind中。 UnmarshalException - 带有链接的异常: [com.sun.istack.SAXParseException2;无法创建GenericItem的实例]

JAXBContext jc = JAXBContext.newInstance(Data.class, GenericData.class,Item.class, GenericItem.class); 
     Unmarshaller unmarshaller = jc.createUnmarshaller(); 
     --error here--> JAXBElement<Data> jb = unmarshaller.unmarshal(xmlStreamReader, Data.class); 

请,我需要帮助:(

+0

删除类GenericItem和GenericData的抽象,然后尝试。 – VinayVeluri

回答

1

作为解决办法,删除抽象关键字,并尝试泛型类。

list of java classes to be recognized by the new JAXBContext. 

这是什么文件说,为classesToBeBound参数,它说,它应该能够创建一个新的对象识别参数。在抽象类的情况下,这是不可能的。

请试用@MappedSuperclass@XmlSeeAlso的组合。用这些注释基类,并将它们抽象化。