Получение пустых полей при извлечении и отмене маршалинга объекта XML с использованием WebClient - PullRequest
0 голосов
/ 14 февраля 2020

Я пытаюсь вызвать внешний API из моего приложения, используя Spring * WebClient. При использовании curl этот вызов возвращает следующий ответ:

<?xml version="1.0" encoding="utf-8"?>
<EnumerationResults ServiceEndpoint="https://somestorage.blob.core.windows.net/" ContainerName="mycon">
    <Prefix>my/prefix/v</Prefix>
    <Delimiter>/</Delimiter>
    <Blobs>
        <BlobPrefix>
            <Name>my/prefix/v1.0/</Name>
        </BlobPrefix>
        <BlobPrefix>
            <Name>my/prefix/v1.1/</Name>
        </BlobPrefix>
    </Blobs>
    <NextMarker />
</EnumerationResults>

Ниже приведен код, который я использую для того же запроса, используя WebClient:

Mono<EnumerationResultsDto> response = webclient.get()
        .uri(uri)
        .headers(myHeaders)
        .retrieve()
        .bodyToMono(EnumerationResultsDto.class);

Здесь это становится интересным. Если я изменю EnumerationResultsDto на String и распечатываю результаты после response.block(), ожидаемый ответ будет напечатан. Но если я использую свой EnumerationResultsDto, я получаю обычный объект, заполненный нулевыми полями. EnumerationResultsDto записывается следующим образом:

@Data // lombok annotation that provides getters & setters (among other things)
@XmlRootElement(name = "EnumerationResults")
@XmlAccessorType(XmlAccessType.NONE) // Have also tried XmlAccessType.FIELD
class EnumerationResultsDto {

    @XmlAttribute(name = "Prefix")
    private String prefix;

    @XmlAttribute(name = "Delimiter")
    private String delimiter;
}

В этом случае, когда я печатаю result.block(), он печатает EnumerationResultsDto(prefix=null, delimiter=null, enumResults=null). Опять же, однако, если я изменю EnumerationResultsDto на String, я получу следующий ответ:

<?xml version="1.0" encoding="utf-8"?><EnumerationResults ServiceEndpoint="https://somestorage.blob.core.windows.net/" ContainerName="mycon"><Prefix>my/prefix/v</Prefix><Delimiter>/</Delimiter><Blobs><BlobPrefix><Name>my/prefix/v1.0/</Name></BlobPrefix><BlobPrefix><Name>my/prefix/v1.1/</Name></BlobPrefix></Blobs><NextMarker /></EnumerationResults>

Я в растерянности из-за того, что я делаю неправильно.

...