UnmarshalException:无法创建实例

时间:2016-04-05 15:32:31

标签: java xml jaxb marshalling unmarshalling

我必须处理几个xsd个文件。 我从JAXB文件生成xsd个类。我得到以下结果:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "xmeldit.datenlieferung.1100")
public class XmelditDatenlieferung1100  extends TypeNachrichtG2G

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "type.Nachrichtenkopf.G2G")
class TypeNachrichtG2G extends NachrichtG2G {
}

@XmlSeeAlso({NachrichtG2GRueckweisung.class,TypeNachrichtG2G.class})
abstract class NachrichtG2G {
    @XmlElement(required = true)
    protected NachrichtenkopfG2G nachrichtenkopf;
}

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "Nachrichtenkopf.G2G", propOrder = {"identifikationNachricht", "leser", "autor"})
@XmlSeeAlso({ TypeNachrichtenkopfG2G.class, NachrichtenkopfG2GXInneres.class
})
public abstract class NachrichtenkopfG2G {
}

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "type.Nachrichtenkopf.G2G")
public class TypeNachrichtenkopfG2G extends NachrichtenkopfG2G{
}

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "Nachrichtenkopf.G2G.XInneres")
public class NachrichtenkopfG2GXInneres extends NachrichtenkopfG2G {
}

现在我想要unmarshal一个XmelditDatenlieferung1100类对象。但我得到UnmarshalExceptionJaxb想要创建NachrichtenkopfG2G的实例。 NachrichtenkopfG2G是抽象的。 我怎么能说jaxb使用TypeNachrichtenkopfG2G代替NachrichtenkopfG2G

我用以下内容解组对象:

JAXBContext jaxbContext = JAXBContext.newInstance("packagename");
XmelditDatenlieferung1100 unmarshal = XmelditDatenlieferung1100) jaxbContext.createUnmarshaller().unmarshal(filePath.toFile());

我不知道。 : - (

1 个答案:

答案 0 :(得分:0)

我遇到了完全相同的问题。只需删除abstract中的xinneres-basisnachricht.xsd属性即可解决此问题。

所以只需改变一下:

<xs:complexType name="Nachrichtenkopf.G2G" abstract="true">

到:

<xs:complexType name="Nachrichtenkopf.G2G">