0

org.apache.commons.httpclient.ProtocolException: Unbuffered entity enclosing request can not be repeated.将 Apache HTTP 客户端库 4.x 与 Restlet 1.1 一起使用时出现间歇性异常。请求实体的类型为 ,与已知大小相关联,大小在实例化时指定InputRepresentationByteArrayInputStream

writeRequestBody异常在类中的方法中引发org.apache.commons.httpclient.methods.EntityEnclosingMethod

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

老实说,这个异常的原因尚不清楚(尤其是由于它的间歇性)。但是,一些研究表明,使用 Apache BufferedHttpEntity 来包装请求实体应该会有所帮助。

有没有办法通知 Restlet 在将其请求传递给 Apache 库进行处理时使用 BufferedHttpEntity?问题的原因可能是什么?

4

2 回答 2

1

如果实体内容流可以重现(重复),ByteArrayInputStream肯定是这样,那么就不需要BufferedHttpEntity。只需确保原始请求实体从 HttpEntity#getContent() 方法返回 InputStream 的新实例,并且 HttpEntity#isRepeatable() 返回 true。

请注意,这org.apache.commons.httpclient.ProtocolException是来自较旧的(EOL-ed)版本 3.x。请确保您的应用程序中没有某种版本混淆

于 2012-11-27T15:06:22.380 回答
1

这是与 Apache HTTP 客户端集成的 Restlet 框架连接器的限制。

在 RF 2.0 版中,有一个新的 ClientResource 类,它具有“retryAttempts”和“retryDelay”属性,提供相同的行为,但基于 Restlet 抽象。

于 2012-11-29T11:16:35.917 回答