Невозможно удалить XML из тела ответа об исключении - PullRequest
0 голосов
/ 17 апреля 2020

При попытке демаршировать 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

...