Java JAXB继承(解组)

Java JAXB继承(解组),java,xml,jaxb,Java,Xml,Jaxb,我有许多具有共同属性的实体。没有xml模式,所以我自己编写jaxb实体 abstract class SuperEntity { protected String id; protected String name; @XmlElement public void setId() { .. sets Id .. } @XmlElement public void setName() { .. sets name .. } } // id an

我有许多具有共同属性的实体。没有xml模式,所以我自己编写jaxb实体

abstract class SuperEntity {
    protected String id;
    protected String name;

    @XmlElement
    public void setId() { .. sets Id .. }

    @XmlElement
    public void setName() { .. sets name .. }
}

// id and name are null after deserialization .. they are completely ignored
// there are other entities such as this, I don't want to repeat my code
@XmlRootElement
@XmlSeeAlso({SuperEntity.class})
class SpecificEntity extends SuperEntity {
    protected String specificField;

    @XmlElement
    public void setSpecificField() { .. sets specific field .. }
}

SuperEntity根本没有被反序列化(解组),字段为空。如果我将字段和setter从超类复制到特定的类,它会工作,但我不想只将代码复制到每个子实体。谢谢您的帮助。

当JAXB处理类模型时,它还将处理超类(未使用
@XmlTransient
注释的超类)。默认情况下,它不会处理子类。
@xmlsee还需要进入超类并引用子类。

将类定义更改为

@XmlRootElement
@XmlSeeAlso({SpecificEntity.class})
abstract class SuperEntity {


@XmlRootElement
class SpecificEntity extends SuperEntity {

我应该用我试图反序列化的超类或子类初始化jaxbContext吗?@Filip-您可以在子类上创建它,或者在包含引用子类的
@xmlseea
注释的超类上创建它。抛出实例化异常,因为超实体是抽象的。如果我不将其抽象化,则抛出IllegalArgumentException,因为它无法将specificField设置为SuperEntity。@Filip-整理对象模型以查看在解组时应传入的内容。您得到该异常是因为您没有在XML中包含
xsi:type
。见: