[解決済み] Apache HttpClient Interim Error: NoHttpResponseException
質問
XMLを使ったPOSTメソッドを受け付けるウェブサービスがあります。これは正常に動作しているが、あるランダムな機会にサーバーとの通信に失敗し、IOExceptionをメッセージとともに投げる。
The target server failed to respond
. その後の呼び出しは正常に行われます。
この現象は、いくつかの呼び出しを行った後、10~15分ほどアプリケーションをアイドル状態にしておくと発生します。
いくつか試してみたのですが.
リトライハンドラーを次のように設定しました。
HttpRequestRetryHandler retryHandler = new HttpRequestRetryHandler() {
public boolean retryRequest(IOException e, int retryCount, HttpContext httpCtx) {
if (retryCount >= 3){
Logger.warn(CALLER, "Maximum tries reached, exception would be thrown to outer block");
return false;
}
if (e instanceof org.apache.http.NoHttpResponseException){
Logger.warn(CALLER, "No response from server on "+retryCount+" call");
return true;
}
return false;
}
};
httpPost.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, retryHandler);
が、この再試行が呼ばれることはなかった。(そう、私は正しいinstanceof節を使っているのです)。デバッグ中、このクラスは一度も呼び出されませんでした。
を設定してみたりもしました。
HttpProtocolParams.setUseExpectContinue(httpClient.getParams(), false);
が、使えません。どなたか、今できることを教えてください。
重要なこと なぜ例外が発生するのかを理解することに加えて、私が持っている重要な懸念の1つは、なぜここでretryhandlerが動作しないのか、ということです。
解決方法は?
ほとんどの場合、コネクションマネージャーによって維持されている持続的な接続は、古くなってしまいます。つまり、接続がアイドル状態のときに、HttpClientがそのイベントに反応することなく、ターゲットサーバ側で接続をシャットダウンしてしまい、接続が半分閉じられた状態、または「stale」になってしまうのです。通常、これは問題ではありません。HttpClientは、プールからのリース時に接続の有効性を確認するために、いくつかの技術を採用しています。古い接続のチェックが無効になっているときに古い接続を使用してリクエストメッセージを送信すると、 通常は SocketException が発生して書き込みに失敗し、自動的に再試行されます。しかし、状況によっては書き込み操作が例外を発生させずに終了し、その後の読み込み操作で -1 (end of stream) が返されることがある。この場合、HttpClientは、リクエストは成功したが、サーバー側で予期せぬエラーが発生したため、サーバーが応答できなかったと判断するほかはありません。
この状況を改善する最も簡単な方法は、有効期限切れの接続や、1分以上アイドル状態が続いた接続を、一定時間経過後にプールから追い出すことです。詳しくは、以下を参照してください。 HttpClientチュートリアルのこのセクションを参照してください。 .
関連
-
[解決済み】imageio.IIOException: 入力ファイルが読み込めない
-
[解決済み】 java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver [重複]。
-
[解決済み】-XX:MaxPermSizeは何をするのですか?
-
[解決済み】「java -cp」と「java -jar」の違い?
-
[解決済み] StringBuilderをクリアまたは空にするにはどうすればよいですか?重複] [重複] [重複] [重複] [重複] [重複
-
[解決済み] Hide Utility Class Constructor : ユーティリティクラスはパブリックまたはデフォルトコンストラクタを持つべきではありません。
-
[解決済み】フォルダに書き込もうとすると「java.nio.file.AccessDeniedException」が発生する件
-
[解決済み] エラー java.lang.OutOfMemoryError: GCオーバーヘッドの制限を超えました
-
[解決済み] HttpClient over HTTPSを使用してすべての証明書を信頼する
-
[解決済み】Apache Camelとは一体何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Android Studio クラス org.codehaus.groovy.runtime.InvokerHelper を初期化できませんでした。
-
[解決済み】"比較メソッドはその一般契約に違反する!"
-
[解決済み】HTTPステータス500 サーブレットクラスのインスタンス化エラー [重複]。
-
[解決済み] メソッドがスーパータイプのメソッドをオーバーライドまたは実装していない - Overrideの場合
-
[解決済み】デフォルトのキーストアファイルが存在しない?
-
[解決済み】keytoolエラー 鍵屋が改ざんされたか、パスワードが不正確だった場合
-
[解決済み】Gradleがtools.jarを見つけ出さない
-
[解決済み] java.sql.SQLException を取得しました。ResultSet が終了した後の操作は許可されません。
-
[解決済み】Javaの".class expected "について
-
[解決済み】Java: GZIPInputStreamの作成に失敗しました。GZIP形式ではありません