Web Services con Axis 1.4: timeout del client

L'esecuzione di un WebService può richiedere un tempo variabile. In particolare, possono esserci delle operazioni di inizializzazione che vanno svolte una tantum e che richiedono molto tempo per essere eseguite. Di default, lo Stub di un client ha un timeout impostato a 10 minuti. Se l'esecuzione del servizio richiede più tempo, si può ottenere un'eccezione del tipo:

AxisFault
 faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.userException
 faultSubcode:
 faultString: java.net.SocketTimeoutException: Read timed out
 faultActor:
 faultNode:
 faultDetail:
         {http://xml.apache.org/axis/}stackTrace:java.net.SocketTimeoutException:
Read timed out
        at java.net.SocketInputStream.socketRead0(Native Method)
        at java.net.SocketInputStream.read(SocketInputStream.java:129)
        at java.io.BufferedInputStream.fill(BufferedInputStream.java:218)
        at java.io.BufferedInputStream.read(BufferedInputStream.java:235)
.............................................................. 			
			

La soluzione più semplice è quella di aumentare il timeout dell'oggetto Stub (org.apache.axis.client.Stub) quando questo viene richiamato dall'implementazione dell'interfaccia javax.xml.rpc.Service (il timeout è espresso in millisecondi):

_stub.setTimeout(60*60*1000);//one hour