2016-04-05 39 views
0

我必須使用幾個xsd文件。 我從xsd文件生成JAXB類。我得到以下結果:UnmarshalException:無法創建實例

@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

你用什麼代碼開始反編組? – f1sh

+0

我添加了代碼如何開始反編組。 –

回答

0

我遇到了一模一樣的問題,這可以簡單地通過在xinneres-basisnachricht.xsd去除abstract屬性固定

因此,只要改變這一點:

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

到:

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

是的,這是解決方案t我使用的帽子,但這是解決問題的常用方法嗎?我不這麼認爲。 –