在使用JAXB进行解组的过程中,我试图将file.xml解组为2个不同的java pojo,但是unmarshaller一直认为第二个对象仍然是第一个,因此它会得到一个转换类错误。
您可以在以下代码中看到我尝试取消联合
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>
答案 0 :(得分:0)
由于您的XML包含<Comprobante>
根元素,因此XML将被解组为Comprobante
类的实例。 <Complemento>
和<TimbreFiscalDigital>
嵌套元素将被解组为Comprobante
类的嵌套对象。
不知道您的架构,我将假设<Complemento>
映射到List<TimbreFiscalDigital> complemento
类的Comprobante
字段。要获取TimbreFiscalDigital
的实例,您必须询问Comprobante
的实例以获取该列表并重复列表。
您无法再次解析XML。已经解析了完整的XML。