#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");