Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在Restlet中使用超时调用异步HTTP客户端_Java_Rest_Restlet_Restlet 2.0 - Fatal编程技术网

Java 如何在Restlet中使用超时调用异步HTTP客户端

Java 如何在Restlet中使用超时调用异步HTTP客户端,java,rest,restlet,restlet-2.0,Java,Rest,Restlet,Restlet 2.0,我到处都找过了,找不到答案。我甚至看到了一本Restlet的书,它只给出了部分答案,甚至部分答案都是错误的 我想做的很简单。我需要对HTTP URL执行一个简单的GET请求。我知道如何同步执行此操作: Engine.getInstance().getRegisteredClients().clear(); Engine.getInstance().getRegisteredClients().add(new HttpClientHelper(null)); ClientResource res

我到处都找过了,找不到答案。我甚至看到了一本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!!

有人能告诉我怎么做吗?谢谢。

看看下面的讨论,它讨论了可能导致问题的两个问题


谢谢你给我指出邮件列表,但是那里的答案似乎没有帮助。我在邮件列表上发了帖子,希望能得到一些回复。列表管理员说get()不应该阻止,但我观察到它确实阻止了。而listpost并没有说任何关于超时的事情。嗯,情况变得更糟了。我试着像这样设置超时:Context=newcontext();set(“socketConnectTimeoutMs”,“2000”);ClientResource=新的ClientResource(上下文,url);发生的事情是它确实超时了,但它在Restlet代码的深处抛出了一个类型为org.apache.http.conn.ConnectTimeoutException的不可修补异常。但我没有像你这样的不可追踪的异常?!你从哪里得到你的特例?