扩展抽象泛型类的解组类

时间:2014-03-27 13:11:56

标签: java generics jaxb unmarshalling

我的班级层次结构:

@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
 }  

当我尝试取消看起来像

的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);

请,我需要帮助:(

1 个答案:

答案 0 :(得分:1)

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

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

这是文档针对 classesToBeBound 参数所说的内容,它表示它应该能够创建一个新对象来识别参数。在抽象类的情况下,它是不可能的。

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