При попытке демаршировать XML ответ об ошибке все элементы объекта равны нулю. Используя @XmlAnyElement (lax = true), unmarshaller может найти все теги, но они по-прежнему равны нулю. Это происходит в блоке catch с использованием RestTemplate. Когда ответ равен 200 с использованием того же подхода, он работает для демаршаллинга тела ответа.
xml файл:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<problem xmlns="urn:ietf:rfc:7807">
<type>https://foo.bar</type>
<title>Foo</title>
<status>400</status>
<detail>FooBar</detail>
</problem>
мой класс:
import java.util.List;
import javax.xml.bind.annotation.XmlAnyElement;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
@Getter
@NoArgsConstructor
@AllArgsConstructor
@XmlRootElement(name = "problem", namespace = "urn:ietf:rfc:7807")
public class ErroDict {
@XmlElement(name = "type")
private String type;
@XmlElement(name = "title")
private String title;
@XmlElement(name = "status")
private String status;
@XmlAnyElement(lax = true)
private List<String> tags;
}
код:
HttpStatus status = null
...try block...
catch (final HttpClientErrorException e) {
status = e.getStatusCode();
if(status != null && status == HttpStatus.BAD_REQUEST) {
jaxbContext = JAXBContext.newInstance(ErroDict.class);
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
jaxbUnmarshaller = jaxbContext.createUnmarshaller();
ErroDict erro = (ErroDict) jaxbUnmarshaller.unmarshal(new StringReader(e.getResponseBodyAsString()));
это дает мне значение NULL для всех элементов, а список также содержит все три элемента со значениями NULL