私はこれをどこでも探しましたが、答えが見つかりません。Restlet の本のコピーも見ましたが、それは部分的な答えしか与えておらず、その部分的な答えでさえ間違っています。
私がやろうとしていることは非常に簡単です。HTTP URL に対して単純な GET 要求を実行する必要があります。これを同期的に行う方法を知っています:
Engine.getInstance().getRegisteredClients().clear();
Engine.getInstance().getRegisteredClients().add(new HttpClientHelper(null));
ClientResource resource=new ClientResource(url);
Representation rep=resource.get();
String respText=rep.getText();
// handle the response in respText as you see fit
もちろん問題は、応答が受信されるまでこれが resource.get() でブロックされることです。私が実際にやりたいことは、これを非同期で行うことです。つまり、(resource.setOnResponse メソッドを使用して) コールバックを設定し、ブロックせずにリクエストを送信します。また、タイムアウト値を設定して、妥当な時間内にタイムアウトを受信しない場合に、何らかの onTimeout または onError メソッドを起動したいと考えています。
これは、誰かが Restlet でやりたいと思う非常に一般的なことだと思うかもしれませんが、これについて説明しているドキュメントは見つかりません。私が見た唯一の議論は、Restlet の本にあり、リスト 9.2 で get() メソッドは実際にはブロックするのにブロックしないと書かれています。言い換えれば、私はこれを試しました:
Engine.getInstance().getRegisteredClients().clear();
Engine.getInstance().getRegisteredClients().add(new HttpClientHelper(null));
ClientResource resource=new ClientResource(url);
resource.setOnResponse(new Uniform() {
public void handle(Request request, Response response) {
try {
int statusCode=response.getStatus().getCode();
// Print status code, should be 200
System.out.println("Status code is "+statusCode);
System.out.println("");
System.out.println("");
if (statusCode==200) {
onSuccess(response); // this is my own success handler method
} else {
System.out.println("ERROR: Bad response from server");
}
} catch (Exception ex) {
// handle exception
}
}
});
System.out.println("Before resource get");
resource.get(); // This blocks!!
誰かがこれを行う方法を教えてもらえますか? ありがとう。