2010-12-14 10 views
6

このHttpRetryExceptionの問題を処理した他の人たちのためにいくつかの場所を検索しましたが、私が使っていないCXFと呼ばれるいくつかのApacheサービス。私が使用しているのはjava.net.HttpURLConnectionです。私は接続を作成し、 "Authorization"にsetRequestPropertyを使用し、出力ストリームを取得し、一連のバイトを書き込み、次に応答入力ストリームを読み込もうとします。ほとんどの場合、これは機能しますが、時には上記の例外が発生します。私はストリーミングを避けることができません。なぜなら、時にはメモリに保存できる容量よりも大きなファイルを書き込む必要があり、検索した結果のほとんどが実際の問題ではないことを示しているからです。彼らは通常、行に沿ってソリューションを提供しますbindingProvider.getRequestContext().put(BindingProvider.USERNAME_PROPERTY, "username"); bindingProvider.getRequestContext().put(BindingProvider.PASSWORD_PROPERTY, "password"); 私はHttpURLConnectionよりcxfまたは他のラッパーを使用しておらず、参照するサービスまたはバインディングプロバイダがありません。また、setRequestPropertyで設定されたユーザー名とパスワードは、ほとんどの場合認証に問題ありません。私はエラーを確実に再現するためにどのような前提条件が必要かを言いたいと思いますが、これまでのところヒットしたり、逃したりしました。「サーバー認証、ストリーミングモードで再試行できません」というエラーは、CXFを使用しないでください。

答えて

9

java.net.HttpRetryExceptionがスローされるJDKの場所は1つだけです。これは、HttpURLConnectionが使用され、リダイレクトを試みる場合です(sun.net.www.protocol.http.HttpURLConnectionを参照)。

基本的に、サーバーはHTTPステータスコード3xx(304と306を除く)で応答し、今度はLocation: HTTPヘッダーで指定された場所に従おうとします。しかし、ストリーミングは有効なので、リダイレクトに従うことはできません。

は、サーバーが最初の場所でHTTPリダイレクトを送信している理由は、私はむしろ、チェックしたいがjava.net.HttpURLConnection.setInstanceFollowRedirects(false)

を設定してみてください。あなたの説明から、あなたはHTTP POSTを使ってより大きなアップロードを実行していることを理解しています、それは間違いありませんか?

+0

返信いただきありがとうございます。 Followリダイレクトは既にfalseに設定されています。あなたは、> Integer.MAXINTバイトのファイルをアップロードしているということは間違いありません。 – WindowsWeenie

関連する問題