私はRestAssuredを試し、次のステートメントを書きました-
String URL = "http://XXXXXXXX";
Response result = given().
header("Authorization","Basic xxxx").
contentType("application/json").
when().
get(url);
JsonPath jp = new JsonPath(result.asString());
最後のステートメントで、次の例外が発生します。
org.Apache.http.ConnectionClosedException: Premature end of chunk coded message body: closing chunk expected
私の応答で返されるヘッダーは次のとおりです。
Content-Type → application/json; qs=1 Date → Tue, 10 Nov 2015 02:58:47 GMT Transfer-Encoding → chunked
誰かがこの例外を解決するために私を導き、私が何かまたは間違った実装を見逃している場合は私に指摘してもらえますか?.
rest-assured とは関係のない同様の問題がありましたが、これはGoogleが最初に見つけた結果であるため、他の人が同じ問題に直面した場合に備えて、ここに回答を投稿します。
私にとって、問題は(ConnectionClosedException
が明確に述べているように)応答を読み取る前の接続closing
でした。次のようなもの:
CloseableHttpClient httpclient = HttpClients.createDefault();
HttpGet httpget = new HttpGet("http://localhost/");
CloseableHttpResponse response = httpclient.execute(httpget);
try {
doSomthing();
} finally {
response.close();
}
HttpEntity entity = response.getEntity();
InputStream instream = entity.getContent(); // Response already closed. This won't work!
修正は明らかです。コードを閉じた後に応答が使用されないようにコードを配置します。
CloseableHttpClient httpclient = HttpClients.createDefault();
HttpGet httpget = new HttpGet("http://localhost/");
CloseableHttpResponse response = httpclient.execute(httpget);
try {
doSomthing();
HttpEntity entity = response.getEntity();
InputStream instream = entity.getContent(); // OK
} finally {
response.close();
}
おそらく、 connection config をいじってみることができますか?例えば:
given().config(RestAssured.config().connectionConfig(connectionConfig().closeIdleConnectionsAfterEachResponse())). ..