0

org.apache.commons.httpclient.ProtocolException: Unbuffered entity enclosing request can not be repeated.Restlet1.1でApacheHTTPクライアントライブラリ4.xを使用すると、断続的な例外が発生します。リクエストエンティティのタイプは既知のサイズにInputRepresentation関連付けられており、インスタンス化時にサイズが指定されています。ByteArrayInputStream

writeRequestBody例外はクラスのメソッドでスローされますorg.apache.commons.httpclient.methods.EntityEnclosingMethod

  if ((this.repeatCount > 0) && !requestEntity.isRepeatable()) {
            throw new ProtocolException(
                "Unbuffered entity enclosing request can not be repeated.");
  }

正直なところ、この例外の原因は明確ではありません(特に断続的な性質のため)。ただし、一部の調査では、ApacheBufferedHttpEntityを使用してリクエストエンティティをラップすることが役立つはずであることが示唆されています。

処理のためにApacheライブラリにリクエストを渡すときにBufferedHttpEntityを使用するようにRestletに通知する方法はありますか?問題の原因は何でしょうか?

4

2 に答える 2

1

エンティティコンテンツストリームを再現(繰り返し)できる場合(これは確かにByteArrayInputStreamの場合です)、BufferedHttpEntityは必要ありません。元のリクエストエンティティがHttpEntity#getContent()メソッドからInputStreamの新しいインスタンスを返し、HttpEntity#isRepeatable()がtrueを返すことを確認する必要があります。

org.apache.commons.httpclient.ProtocolExceptionただし、これは古い(EOL版)バージョン3.xのものであることに注意してください。アプリケーションに何らかのバージョンの取り違えがないことを確認してください

于 2012-11-27T15:06:22.380 に答える
1

これは、ApacheHTTPクライアントと統合するRestletFrameworkコネクタの制限です。

RFのバージョン2.0には、同じ動作を提供する「retryAttempts」および「retryDelay」プロパティを持つ新しいClientResourceクラスがありますが、Restlet抽象化に基づいています。

于 2012-11-29T11:16:35.917 に答える