[英]JAXB Unmarshalling to two different objects from same XML
在使用 JAXB 解組的過程中,我試圖將 file.xml 解組到 2 個不同的 java pojo,但是解組器一直認為第二個對象仍然是第一個對象,因此它會出現類型轉換錯誤。
正如您在以下代碼中看到的那樣,我嘗試解組
this.timbre = (TimbreFiscalDigital) jaxbUnmarshaller.unmarshal(path.toFile());
this.comprobante = (Comprobante) jaxbUnmarshaller.unmarshal(path.toFile());
它總是得到一個錯誤,告訴我們有一個類轉換異常
java.lang.ClassCastException:cfdi.bindings.CFDI32.Comprobante 不能轉換為 cfdi.bindings.TimbreFiscal.TimbreFiscalDigital
如果我只嘗試解組到“Comprobante”,它會起作用……但不適用於“TimbreFiscalDigital”
public CFDI(Path path){
JAXBContext jaxbContext;
try {
jaxbContext = JAXBContext.newInstance("cfdi.bindings.CFDI32:cfdi.bindings.TimbreFiscal");
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
this.timbre = (TimbreFiscalDigital) jaxbUnmarshaller.unmarshal(path.toFile());
this.comprobante = (Comprobante) jaxbUnmarshaller.unmarshal(path.toFile());
} catch (JAXBException ex) {
Logger.getLogger(CFDI.class.getName()).log(Level.SEVERE, null, ex);
}
}
我找不到錯誤......僅供參考,我正在使用 netbeans 8.1 JAXB
更新來自評論的示例 XML:
<Comprobante>
<Emisor></Emisor>
<Complemento>
<TimbreFiscalDigital>
</TimbreFiscalDigital>
</Complemento>
</Comprobante>
由於您的 XML 包含一個<Comprobante>
根元素,因此 XML 將被解組為Comprobante
類的一個實例。 <Complemento>
和<TimbreFiscalDigital>
嵌套元素將被解組到Comprobante
類的嵌套對象。
不知道您的架構,我將假設<Complemento>
映射到Comprobante
類的List<TimbreFiscalDigital> complemento
字段。 要獲取TimbreFiscalDigital
的實例,您必須向Comprobante
的實例詢問該列表並迭代該列表。
你不能通過再次解析 XML 來做到這一點。 完整的 XML 已經被解析。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.