【发布时间】:2021-07-29 18:20:21
【问题描述】:
我需要在我的代码中解组以下名为 retornoExtrato 的 xml 字符串
<?xml version="1.0" encoding="UTF-8" ?>
<extrato xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<erro>
<codigo/>
<descricao/>
</erro>
<consultaextrato>
<header><![CDATA[SOME MULTIPLE
LINES HEADER]]></header>
<body><![CDATA[SOME MULTIPLE
LINES BODY]]></body>
<trailer><![CDATA[SOME MULTIPLE
LINES TRAILER]]></trailer>
</consultaextrato>
</extrato>
到Extrato 对象中,这是我的类(构造函数、getter 和 setter 在默认情况下被省略)
@XmlRootElement(name = "extrato")
public class Extrato {
private Erro erro;
private ConsultaExtrato consultaExtrato;
}
@XmlRootElement(name = "erro")
public class Erro {
private String codigo;
private String descricao;
}
@XmlRootElement(name = "consultaextrato")
public class ConsultaExtrato {
private String header;
private String body;
private String trailer;
@XmlCDATA
public String getHeader() {
return header;
}
@XmlCDATA
public String getBody() {
return body;
}
@XmlCDATA
public String getTrailer() {
return trailer;
}
}
解组时的情况:
-
Erro总是被屏蔽 -
ConsultaExtrato正在变为空
Unmarshaller jaxbUnmarshaller = JAXBContext.newInstance(Extrato.class).createUnmarshaller();
Extrato extrato = (Extrato) jaxbUnmarshaller.unmarshal(new StringReader(retornoExtrato));
另一方面,如果我创建一个只有consultaextrato 标记的xml,它会被解组。但它似乎不能用作内部标签。
我在所有类中都尝试了一些额外的 jaxb 注释,但没有一个起作用。我在这里错过了什么?
【问题讨论】:
标签: java jaxb unmarshalling cdata