@nalie
Java разработчик

Почему не удается получить контент с помощью Jersey Client, если включить Nginx?

Пишу укорачиватель ссылок. По некоторым причинам не должно быть переадресации, поэтому загружаю контент по ссылке с помощью Jersey client и отдаю его пользователю.
private Client client = ClientBuilder.newClient();

    @GET
    @Path("{code}")
    public Response getContentLink(@PathParam("code") String code) {
        return client
                .target(shortUrlService.getCommonUrl(code)) //получение длинной ссылки из базы
                .request(MediaType.TEXT_HTML)
                .get();
    }

Длинная ссылка ссылается на то же приложение. Приложение запускается в Tomcat. Все работало замечательно на тесте, в продакшене появились проблемы.
1. Прямой переход по длинной ссылке работает корректно.
2. Попытка загрузить контент из другого приложения с помощью кода выше по длинной ссылке работает корректно.
3. Переход по короткой ссылке выдает ошибку org.apache.http.ConnectionClosedException: Premature end of chunk coded message body: closing chunk expected
а в логи пишет An I/O error has occurred while writing a response message entity to the container output stream.

Самая очевидная разница между тестовым сервером и продакшеном это наличие Nginx. В чем может быть проблема?
  • Вопрос задан
  • 221 просмотр
Пригласить эксперта
Ответы на вопрос 1
@nalie Автор вопроса
Java разработчик
В обшем, проблема была не в настройках nginx, а в одноразовости (?) объекта Response. Непонятно почему работало на тесте. Решилось вот так:
private Client client = ClientBuilder.newClient();

    @GET
    @Path("{code}")
    public Response getContentLink(@PathParam("code") String code) {
        Response response = client
                .target(shortUrlService.getCommonUrl(code)) //получение длинной ссылки из базы
                .request(MediaType.TEXT_HTML)
                .get();
        return Response
                .status(response.getStatus())
                .entity(response.getEntity())
                .build();
    }
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы