簡體   English   中英

JAXB 解組到來自同一 XML 的兩個不同對象

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM