6

我在很多地方搜索过其他处理过这个 HttpRetryException 问题的人,但我发现的所有人都遇到了一些名为 CXF 的 apache 服务,我没有使用它。我使用的是 java.net.HttpURLConnection。我创建了一个连接,将 setRequestProperty 用于“授权”,获取输出流,写入一堆字节,然后尝试读取回复输入流。大多数时候这有效,但有时我会遇到上面提到的异常。我无法避免流式传输,因为有时我需要编写比存储在内存中更大的文件,并且无论如何我发现搜索的大多数结果表明这不是真正的问题。他们通常会按照以下方式给出解决方案bindingProvider.getRequestContext().put(BindingProvider.USERNAME_PROPERTY, "username"); bindingProvider.getRequestContext().put(BindingProvider.PASSWORD_PROPERTY, "password"); 我没有在 HttpURLConnection 上使用 cxf 或任何其他包装器,也没有要引用的服务或绑定提供程序。并且使用 setRequestProperty 设置的用户名和密码在大多数情况下都可以很好地进行身份验证。我希望我能说出可靠地复制错误需要哪些特定的先决条件,但到目前为止它已经被击中或错过。

4

1 回答 1

10

JDK 中只有一个地方java.net.HttpRetryException会抛出 HttpURLConnection 并尝试遵循重定向(请参阅 sun.net.www.protocol.http.HttpURLConnection.followRedirect())

所以基本上,服务器以 3xx 的 HTTP 状态代码(304 和 306 除外)响应,现在尝试跟随Location:HTTP 标头给出的位置。但由于启用了流式传输,它无法遵循重定向。

尝试设置java.net.HttpURLConnection.setInstanceFollowRedirects(false)

尽管我宁愿首先检查服务器为什么要发送 HTTP 重定向。根据您的描述,我了解到您正在使用 HTTP POST 执行较大的上传,对吗?

于 2010-12-28T00:33:01.300 回答