1. ホーム
  2. java

[解決済み] HttpRequest.execute()で例外が発生しました。SingleClientConnManagerの無効な使用: 接続がまだ割り当てられています。

2023-08-04 09:28:19

質問

google-api-client-java 1.2.1-alpha を使用して POST リクエストを実行していますが、HttpRequest を execute() したときに次のようなスタックトレースが発生します。

同じ URL への以前の POST から 403 エラーをキャッチして無視し、後続のリクエストのためにトランスポートを再使用した直後に発生します。 (これは、同じ ATOM フィードに複数のエントリを挿入するループの中にあります)。

403 の後に「クリーンアップ」するために私が行うべきことはありますか?

Exception in thread "main" java.lang.IllegalStateException: Invalid use of SingleClientConnManager: connection still allocated.
Make sure to release the connection before allocating another one.
    at org.apache.http.impl.conn.SingleClientConnManager.getConnection(SingleClientConnManager.java:199)
    at org.apache.http.impl.conn.SingleClientConnManager$1.getConnection(SingleClientConnManager.java:173)
    at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:390)
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:641)
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:576)
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:554)
    at com.google.api.client.apache.ApacheHttpRequest.execute(ApacheHttpRequest.java:47)
    at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:207)
    at au.com.machaira.pss.gape.RedirectHandler.execute(RedirectHandler.java:38)
    at au.com.machaira.pss.gape.ss.model.records.TableEntry.executeModification(TableEntry.java:81)

なぜ私の下にあるコードが 新しい 接続を取得しようとしているのでしょうか?

どのように解決するのですか?

別のリクエストのために接続を再利用する前に、レスポンスボディを消費する必要があります。レスポンスステータスを読むだけでなく、レスポンス InputStream を最後のバイトまで完全に読む必要があります。