Возврат двоичных данных из сервиса GET JAX-RS - PullRequest
0 голосов
/ 11 июля 2019

У меня есть служба GET JAX-RS, реализованная в Джерси, и я предполагаю, что я хочу, чтобы она возвращала двоичные данные, как мне это сделать?

Следующая служба - это то, что я написал.Он развернут в WebLogic.

@GET
@Path("Get")
public Response get() {
    try {
        byte[] bytes = Files.readAllBytes(Paths.get("F://test.gz"));
        Response.ResponseBuilder responseBuilder = Response.status(200);
        return responseBuilder
                .header("Transfer-Encoding", "chunked")
                .header("Content-Encoding", "gzip")
                .header("Content-Type", "application/json; charset=utf-8")
                .entity(bytes).build();
    } catch (IOException exception) {
        // this part is not executed
        throw new InternalServerErrorException(exception);
    } finally {
        // this part is executed
    }
}

Я использовал для тестирования такой клиент, как SoapUI, и после долгого ожидания я получил сообщение «java.net.SocketException: Socket is closed» в SoapUI, но я могусм. заголовки ответа, возвращаемые в SoapUI, включая код состояния 200. Данные очень малы (менее 1 КБ), и в сервисе нет исключений.

РЕДАКТИРОВАТЬ

Просто чтобы уточнить, что источник двоичных данных фактически получен через соединение HttpURLConnection от другого сервера X. То есть указанная выше веб-служба должна быть транзитной (прокси-службой).Он должен просто вызвать другой сервис на сервере X с HTTP, а затем вернуть тело ответа (текстовое или двоичное) и все заголовки ответа обратно клиенту.Я обнаружил, что сервер X возвращает данные в двоичном виде, имеет размер 421 байт (именно то, что у меня есть в файле test.gz) и имеет следующие заголовки

Transfer-Encoding = chunked
null = HTTP/1.1 200 OK
Cache-Control = max-age=3600, public
Content-Encoding = gzip
Vary = Accept-Encoding
Date = Thu, 11 Jul 2019 03:59:04 GMT
Content-Type = application/json; charset=utf-8

Я должен просто вернутьдвоичные данные и эти заголовки возвращаются к клиенту.

Я только что обнаружил, что если я не верну "Transfer-Encoding" клиенту, моя проблема исчезнет.Это означает, что я не могу просто вернуть все заголовки обратно клиенту, но быть избирательным.

...