我有以下代码:
private Job[] synchro(URI u) {
try{
Client client = new Client(new Context(),Protocol.HTTP);
Reference samplesUri = new Reference(u+"/synchrojobs/");
ClientResource cr = new ClientResource(client.getContext(),Method.POST,samplesUri);
cr.setChallengeResponse(ChallengeScheme.HTTP_BASIC, "xxx", "uxxx");
Job[] back = persistence.all().toArray(new Job[persistence.all().size()]);
for(Job trace : back){
logger.debug(String.format("Sending synchro for %s status:%s time:%s",trace.getId().toString(),trace.getStatus(),trace.getLastStatusChangeDate().toString()));
}
Representation res = cr.post(new JacksonRepresentation<Job[]>(back));
Job[] result = this.mapper.readValue(res.getStream(),Job[].class);
cr.release();
res.release();
logger.info(String.format("Found %s jobs from %s",result.length,u));
return result;
}catch(Exception e){
logger.error("Error synchronizing jobs:"+e.getMessage());
return new Job[0];
}
}
如果另一方没有连接,会引发异常,但是我的阻止没有被捕获,它会在外部弹出,为什么会发生这种情况?
答案 0 :(得分:1)
实际上,客户端连接器和包装器在restlet异常中直接抛出了这样的错误。
我做了一些测试,然后抛出了原因var result= db.allDocs({include_docs: true});
的Restlet ResourceException
。但是我可以使用try / catch(Exception)来捕获它。见下文:
java.net.ConnectException
也许您可以尝试使用try / catch(Throwable)来查看实际抛出的异常?
此外,你能给我们一个Restlet版本和你使用的客户端连接器吗?对于我的测试,我使用Restlet版本2.3.1 ...
希望它可以帮到你, 亨利