9

Używam struktury JAX-WS 2.2.5 do wywoływania usług WebServices. Chcę zidentyfikować specjalny przypadek, gdy połączenie nie powiedzie się, ponieważ usługa sieci Web jest niedostępna lub niedostępna.Zalewkowanie wyjątku ConnectException w usłudze WWW JAX-WS

W niektórych połączeniach otrzymuję wyjątek WebServiceException.

catch(javax.xml.ws.WebServiceException e) 
    { 
     if(e.getCause() instanceof IOException) 
      if(e.getCause().getCause() instanceof ConnectException) 
       // Will reach here because the Web Service was down or not accessible 

W innych miejscach, mam ClientTransportException (klasa pochodzi od WebServiceException)

catch(com.sun.xml.ws.client.ClientTransportException ce) 
    { 

     if(ce.getCause() instanceof ConnectException) 
       // Will reach here because the Web Service was down or not accessible 

Co to jest dobrym sposobem na pułapkę ten błąd?

powinienem użyć czegoś podobnego

catch(javax.xml.ws.WebServiceException e) 
    { 
     if((e.getCause() instanceof ConnectException) || (e.getCause().getCause() instanceof ConnectException)) 
     { 
        // Webservice is down or inaccessible 

czy istnieje lepszy sposób to zrobić?

Odpowiedz

0

Najpierw musisz zidentyfikować najwyższy poziom Exception, aby złapać. Jak już zauważyłeś, tutaj jest WebServiceException.

Co można zrobić, to bardziej ogólne, aby uniknąć NullPointerException, jeśli getCause() zwraca null.

catch(javax.xml.ws.WebServiceException e) 
{ 
    Throwable cause = e; 
    while ((cause = cause.getCause()) != null) 
    { 
     if(cause instanceof ConnectException) 
     { 
      // Webservice is down or inaccessible 
      // TODO some stuff 
      break; 
     } 
    } 
} 
1

Może chcesz również traktować UnknownHostException!

 Throwable cause = e.getCause(); 

     while (cause != null) 
     { 
      if (cause instanceof UnknownHostException) 
      { 
       //TODO some thing 
       break; 
      } 
      else if (cause instanceof ConnectException) 
      { 
       //TODO some thing 
       break; 
      } 

      cause = cause.getCause(); 
     }