checkRetrieveStatus()
構文
API バージョン 34.0 以降の場合:
1RetrieveResult = metadatabinding.checkRetrieveStatus(ID id, boolean includeZip);API バージョン 33.0 以前の場合:
1RetrieveResult = metadatabinding.checkRetrieveStatus(ID id);使用方法
checkRetrieveStatus() を使用して、メタデータ retrieve() 操作の進行状況を確認します。このメソッドが返す RetrieveResult オブジェクトは、非同期 retrieve() コールが完了したタイミングを示します。取得が完了している場合、RetrieveResult にはデフォルトで zip ファイルの内容が含まれます。retrieve() コールを使用してメタデータコンポーネントを取得するには、次のプロセスを使用します。
- retrieve() コールを発行して、非同期の取得を開始すると、AsyncResult オブジェクトが返されます。id 項目の値をメモし、次のステップで使用します。
- checkRetrieveStatus() コールを発行して、最初のステップの AsyncResult オブジェクトから id 値を渡します。返された RetrieveResult の done 項目の値をチェックします。true の場合は、コールが完了しているため、次のステップに進んでください。それ以外の場合は、done 項目が true になるまで、このステップを繰り返して checkRetrieveStatus() を再度コールします。
- 前のステップの checkRetrieveStatus() への最後のコールで返された RetrieveResult から zip ファイル (zipFile) 項目および他の必要な項目を取得します。
API バージョン 31.0 以降では、retrieve() コールを実行するプロセスが簡略化されました。取得操作の状況を取得する場合、retrieve() をコールしてから checkStatus() をコールする必要がなくなりました。代わりに、checkRetrieveStatus() のみをコールします。取得操作が進行中の場合、取得操作が完了するまで checkRetrieveStatus() を再コールします。checkStatus() コールは、API バージョン 30.0 以前では引き続きサポートされますが、API バージョン 31.0 以降では使用できません。
2 番目のプロセスでの Zip ファイルの取得
デフォルトでは、checkRetrieveStatus() は、取得が完了すると (RetrieveResult.isDone() == true)、この操作に対する最後のコールで zip ファイルを返してサーバーから zip ファイルを削除します。削除後、後続の checkRetrieveStatus() へのコールで同じ取得操作を行っても zip ファイルは取得できません。API バージョン 34.0 以降、checkRetrieveStatus() の includeZip 引数に boolean 値を渡して、zip ファイルを取得するかどうかを指定します。includeZip 引数により、取得操作の完了後に別のプロセスでファイルを取得できます。たとえば、あるサービスがループで checkRetrieveStatus(id, false) をコールして取得状況をポーリングします。このコールは、取得操作の状況を返しますが、zip ファイルは取得しません。取得操作の完了後、バックグラウンドファイル転送サービスなどの別のプロセスが checkRetrieveStatus(id, true) をコールして zip ファイルを取得します。この最後のコールにより、zip ファイルがサーバーから削除されます。
1// First process: Poll the retrieval but don’t retrieve the zip file.
2AsyncResult asyncResult = metadataConnection.retrieve(retrieveRequest);
3String asyncResultId = asyncResult.getId();
4// Wait for the retrieve to complete
5int poll = 0;
6long waitTimeMilliSecs = ONE_SECOND;
7RetrieveResult result = null;
8do {
9 Thread.sleep(waitTimeMilliSecs);
10 // Check the status but don’t retrieve zip file.
11 result = metadataConnection.checkRetrieveStatus(asyncResultId, false);
12} while (!result.isDone());
13
14// Second process: Retrieve the zip file.
15// For example, this process can be a background file transfer service.
16// Retrieve the zip file.
17result = metadataConnection.checkRetrieveStatus(asyncResultId, true);
18// Get the zip file from the RetrieveResult (result) variable
19if (result.getStatus() == RetrieveStatus.Succeeded) {
20 ByteArrayInputStream bais = new ByteArrayInputStream(result.getZipFile());
21 // ...
22}サンプルコード — Java
このコールの使用例は、retrieve() のサンプルコードを参照してください。
引数
| 名前 | 型 | 説明 |
|---|---|---|
| id | ID | retrieve() コールによって返される AsyncResult オブジェクト、または checkRetrieveStatus() コールによって返される後続の RetrieveResult オブジェクトから取得した ID。 |
| includeZip | boolean | zip ファイルを取得するには、true に設定します。取得操作の完了後にのみ zip ファイルを取得できます。zip ファイルを取得した後、zip ファイルはサーバーから削除されます。zip ファイルの取得を試行せずに取得の状況をチェックするには、false に設定します。null に設定すると、この引数はデフォルトの true に設定されます。つまり、取得が完了すると、checkRetrieveStatus() に対する最後のコールで zip ファイルが取得されます。 この引数は API バージョン 34.0 以降で使用できます。 |