サーバーにファイルを送信するPOSTリクエストを呼び出す統合テストを行っています。 POSTの直後に、ドキュメントを取得してそのドキュメントの属性を返すGETリクエストを呼び出します。しかし、たまには数秒後に再度実行するまではドキュメントが存在しないと言って404エラーが出ることもあります。GETリクエストを呼び出す前にPOSTが処理を終了するのを待つ
私はPOSTがまだ処理を終えていないと思っていますので、10秒待つためにThread.sleepを実装しましたが、必要以上に長く待つかもしれないし、十分長く待たないかもしれません。 POSTがGETを要求する前に処理を完了できるようにする、何らかの「暗黙の待ち」がありますか?以下
は、コードスニペットである:
@Test
public void PostDocumentThenCheckIfDocumentExistThenRemove() throws IOException, InterruptedException {
try {
String str = fileToStringProcessing("C:/Users/Linh/Desktop/file.xml");
ResponseEntity<Message> postResponse = getRestTemplate().exchange(getUri() + "documents", HttpMethod.POST, new HttpEntity(str, getHeaders()), Message.class);
Thread.sleep(10000);
ResponseEntity<Account> getResponse = getRestTemplate().exchange(getUri() + "account/7452616052/documents?start=2015-01-01&end=2016-03-31", HttpMethod.GET, getHttpEntity(), Account.class);
ResponseEntity<Message> deleteResponse = getRestTemplate().exchange(getUri() + "documents/file.xml", HttpMethod.DELETE, getHttpEntity(), Message.class);
assertThat(postResponse.getStatusCode(), is(HttpStatus.CREATED));
assertThat(getResponse.getStatusCode(), is(HttpStatus.OK));
assertThat(deleteResponse.getStatusCode(), is(HttpStatus.OK));
}catch(HttpClientErrorException e) {
fail("Error! Status code " + e.getStatusCode());
}
}
ここコンソール404エラーです。ここでPOSTは成功しているが、GETは成功していないことがわかります。その後GETをやって、数秒後、成功
11:56:32.700 [main] DEBUG o.s.web.client.RestTemplate - POST request for "https://dpdev.billing.com/tf/dp/documents" resulted in 201 (Created)
11:56:32.700 [main] DEBUG o.s.web.client.RestTemplate - Reading [com.digitalplatform.model.Message] as "application/xml" using [org.springfr[email protected]1dac5ef]
11:56:32.904 [main] DEBUG o.s.web.client.RestTemplate - Created GET request for "https://dpdev.billing.com/tf/dp/account/7452616052/documents?start=2015-01-01&end=2016-03-31"
11:56:32.914 [main] DEBUG o.s.web.client.RestTemplate - Setting request Accept header to [application/xml, text/xml, application/json, application/*+xml, application/*+json]
11:56:33.690 [main] DEBUG o.s.web.client.RestTemplate - GET request for "https://dpdev.billing.com/tf/dp/account/7452616052/documents?start=2015-01-01&end=2016-03-31" resulted in 404 (Not Found); invoking error handler
GETが表示され、右側の404の後にリクエストをDELETE:
12:00:21.383 [main] DEBUG o.s.web.client.RestTemplate - Created GET request for "https://dpdev.billing.com/tf/dp/account/7452616052/documents?start=2015-01-01&end=2016-03-31"
12:00:21.444 [main] DEBUG o.s.web.client.RestTemplate - Setting request Accept header to [application/xml, text/xml, application/json, application/*+xml, application/*+json]
12:00:23.176 [main] DEBUG o.s.web.client.RestTemplate - GET request for "https://dpdev.billing.com/tf/dp/account/7452616052/documents?start=2015-01-01&end=2016-03-31" resulted in 200 (OK)
12:00:23.176 [main] DEBUG o.s.web.client.RestTemplate - Reading [com.digitalplatform.model.Account] as "application/xml" using [org.springfr[email protected]37271612]
12:00:23.380 [main] DEBUG o.s.web.client.RestTemplate - Created DELETE request for "https://dpdev.billing.com/tf/dp/documents/file.xml"
12:00:23.381 [main] DEBUG o.s.web.client.RestTemplate - Setting request Accept header to [application/xml, text/xml, application/json, application/*+xml, application/*+json]
12:00:25.120 [main] DEBUG o.s.web.client.RestTemplate - DELETE request for "https://dpdev.billing.com/tf/dp/documents/file.xml" resulted in 200 (OK)
12:00:25.120 [main] DEBUG o.s.web.client.RestTemplate - Reading [com.digitalplatform.model.Message] as "application/xml" using [org.springfr[email protected]37271612]
完全なコードで質問を更新しました。おそらく全体の方法を立てたはずです。投稿時には、200 OKステータスを取得しているので、POSTは確実に成功しています。後でコンソール情報でも更新されます – LinhSaysHi