Ошибка 405 с setChunkedStreamingMode ()

#java #glassfish #jersey-2.0

#java #glassfish #джерси-2.0

Вопрос:

Я пытаюсь загрузить файл со своего сервера. Моя проблема в том, что если я использую chunkedStreamingMode сервер, он возвращает мне 405 - Method not Allowed ошибку. Если я не установлю chunkedStreamingMode , загрузка будет работать отлично.

Я не понимаю, почему загрузка файла с chunkedStreamingMode включенным отклоняется моим сервером. Есть ли что-то, что я здесь делаю неправильно? Или мне нужно что-то установить на сервере, чтобы начать chunkedStreamingMode работать?

На моем сервере у меня:

 @GET
@Path("/{fileId}")
@Produces(MediaType.APPLICATION_OCTET_STREAM)
public Response downloadFile(@PathParam("fileId") long fileId, @Context HttpServletRequest req,
                @Context HttpServletResponse response) throws IOException {
..
}
  

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

 WebTarget target = rootTarget.path(uri);                            
Invocation.Builder builder = target.request(MediaType.APPLICATION_OCTET_STREAM_TYPE);
response = builder.get();
  

Я использую следующий HttpUrlConnectorProvider на своем клиенте:

 private static HttpUrlConnectorProvider buildHttpUrlConnectorProvider(){
     HttpUrlConnectorProvider.ConnectionFactory factory = new HttpUrlConnectorProvider.ConnectionFactory() {
            @Override
            public HttpURLConnection getConnection(URL url) throws IOException {                      
                HttpURLConnection result = (HttpURLConnection) url.openConnection();
                result.setChunkedStreamingMode(4096);                          
                result.setDoOutput(true);  
                return resu<
            }
        };
     return new HttpUrlConnectorProvider().connectionFactory(factory);
}
  

Комментарии:

1. Вероятно, вы могли бы довольно быстро диагностировать это, запустив свой сервер в отладчике и выполнив его обработчик запросов. Вы найдете место, где он запускает 405. Потенциально он будет окружен некоторой защитой, зависящей от конфигурации.

2. Кроме того, чтобы получить какие-либо ответы, вы должны сообщить нам, какой сервер вы используете.

3. Кроме того, я обнаружил, что хорошее эмпирическое правило заключается в том, чтобы избегать HTTPUrlConnection — в нем полно ошибок. Использование Apache HttpClient избавляет от множества головных болей (но это не обязательно может быть проблемой здесь).

4. @slim спасибо за ваши предложения, я их рассмотрю. Кстати, я использую glassfish (я обновил теги).

Ответ №1:

Я, наконец, решил эту проблему, установив следующее свойство для конфигурации клиента, установленной setChunkedStreamingMode(4096); в HTTPUrlConnection :

 .property(ClientProperties.REQUEST_ENTITY_PROCESSING, "CHUNKED");