を使用してAndroid4.0のRESTWebサービスをターゲットにしていHttpsURLConnection
ます。POST
私が何かをしようとしない限り、これはうまくいきます。これは関連するコードセクションです:
connection.setDoOutput(true);
connection.setChunkedStreamingMode(0);
ByteArrayOutputStream out = new ByteArrayOutputStream();
serializeObjectToStream(out, object);
byte[] array = out.toByteArray();
connection.getOutputStream().write(array, 0, array.length);
これにより、次の例外がスローされます。
java.net.HttpRetryException: Cannot retry streamed HTTP body
デバッグから、私が経由する出力ストリームconnection.getOuputStream()
はタイプChunkedOutputStream
であり、Androidのソースコードを掘り下げることから、リクエストを再試行する必要がある場合(何らかの理由で)、上記の例外を除いて突くことがわかりました。そこに欲しいものを使っていません。RetryableOutputStream
問題は次のとおりです。HttpsURLConnectionがそのようなRetryableOutputStreamを返すようにするにはどうすればよいですか。むしろ、チャンクされた要求のエンコードを適切に防ぐにはどうすればよいですか。私はすでにそれをやったと思っsetChunkedStreamingMode(0)
ていましたが、どうやらそうではありません...
[編集]
いいえ、の実装はjava.net.HTTPUrlConnection
0以下のストリーミングモードを無視します。
public void setChunkedStreamingMode(int chunkLength) {
[...]
if (chunkLength <= 0) {
this.chunkLength = HttpEngine.DEFAULT_CHUNK_LENGTH;
} else {
this.chunkLength = chunkLength;
}
}