2015-05-12 2 views
1

У меня есть следующий код:Restlet, не может справиться с ConnectionException

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]; 
     } 
    } 

, если другая сторона не связана, возбуждается исключение, но не попал в мой блок, он всплывал внешне, почему может ли это случиться?

ответ

1

На самом деле такая ошибка напрямую возникает клиентским коннектором и оберткой в ​​исключении для восстановления.

Я сделал несколько тестов, а Restlet ResourceException был выброшен с причиной java.net.ConnectException. Но я могу поймать его, используя try/catch (Exception). Смотрите ниже:

mai 12, 2015 7:18:54 PM org.restlet.engine.connector.HttpClientHelper start 
INFOS: Starting the internal HTTP client 
mai 12, 2015 7:18:54 PM org.restlet.resource.ClientResource retry 
INFOS: A recoverable error was detected (1000), attempting again in 2000 ms. 
mai 12, 2015 7:18:56 PM org.restlet.resource.ClientResource retry 
INFOS: A recoverable error was detected (1000), attempting again in 2000 ms. 
Connection Error (1000) - The connector failed to connect to the server 

at org.restlet.resource.ClientResource.doError(ClientResource.java:590) 
    at org.restlet.resource.ClientResource.handleInbound(ClientResource.java:1153) 
    at org.restlet.resource.ClientResource.handle(ClientResource.java:1048) 
    at org.restlet.resource.ClientResource.handle(ClientResource.java:1023) 
    at org.restlet.resource.ClientResource.handle(ClientResource.java:928) 
    at org.restlet.resource.ClientResource.get(ClientResource.java:636) 
    at test.TestClient.main(TestClient.java:9) 
Caused by: java.net.ConnectException: Connexion refusée 
    at java.net.PlainSocketImpl.socketConnect(Native Method) 
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339) 
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200) 
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182) 
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) 
    at java.net.Socket.connect(Socket.java:579) 
    at sun.net.NetworkClient.doConnect(NetworkClient.java:175) 
    at sun.net.www.http.HttpClient.openServer(HttpClient.java:432) 
    at sun.net.www.http.HttpClient.openServer(HttpClient.java:527) 
    at sun.net.www.http.HttpClient.<init>(HttpClient.java:211) 
    at sun.net.www.http.HttpClient.New(HttpClient.java:308) 
    at sun.net.www.http.HttpClient.New(HttpClient.java:326) 
    at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:997) 
    at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:933) 
    at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:851) 
    at org.restlet.engine.connector.HttpUrlConnectionCall.sendRequest(HttpUrlConnectionCall.java:356) 

Возможно, вы можете попробовать использовать TRY/поймать (Throwable), чтобы увидеть, исключение фактически выброшены?

Кроме того, вы могли бы предоставить нам версию Restlet и клиентского соединителя, который вы используете? Для моего теста я использую версию 2.3.1 Restlete ...

Надеюсь, это поможет вам, Thierry

Смежные вопросы