9

Utilizzo il framework JAX-WS 2.2.5 per chiamare i servizi Web. Voglio identificare il caso speciale quando la chiamata non riesce perché il servizio Web è inattivo o non accessibile.Intercettazione di ConnectException in una chiamata al servizio web JAX-WS

In alcune chiamate, ottengo un 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 

In altri luoghi, ottengo ClientTransportException (classe derivata da 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 

Che cosa è un buon modo per intercettare questo errore?

Dovrei usare qualcosa di simile

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

o c'è un modo migliore di fare questo?

risposta

0

Per prima cosa è necessario identificare il livello superiore Exception da catturare. Come hai sottolineato, qui è WebServiceException.

Cosa si può fare dopo è più generico evitare NullPointerException se getCause() restituisce 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

Forse vorrete trattare anche 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(); 
     } 
Problemi correlati