We have had this problem in the past also. Have a look at
https://www.baeldung.com/java-executor-service-tutorial

In particular, section 5. You can submit() a Callable task and then use the
Future to wait for it to complete, with a timeout...

String result = future.get(20, TimeUnit.SECONDS);

Here, if it takes longer than 20s it will throw an exception and you can
handle it as required.



On Fri, 24 Sept 2021 at 10:12, Alejandro Molinari <[email protected]>
wrote:

> Hello! I have a simple client to connect a web service destination:
>
>                 //Obtengo el acceso al servicio.
>                 final WsTransaccionOnlineReceptorImplService
> wsTOLReceptorImplService = new
> WsTransaccionOnlineReceptorImplService(wsdlURL, SERVICE_NAME);
>                 //Obtengo el port donde estan definidas las operaciones.
>                 final WsTransaccionOnlineReceptor port =
> wsTOLReceptorImplService.getWsTransaccionOnlineReceptorPort();
>
>                 //Asigno los timeouts correspondientes.
>                 final Client cliente = ClientProxy.getClient(port);
>                 final HTTPConduit http = (HTTPConduit)
> cliente.getConduit();
>                 final HTTPClientPolicy httpClientPolicy = new
> HTTPClientPolicy();
>                 //Timeout para la conexion (milisegundos).
>                 httpClientPolicy.setConnectionTimeout(3000);
>                 //Timeout de recepcion de datos(milisegundos).
>                 httpClientPolicy.setReceiveTimeout(10000);
>                 http.setClient(httpClientPolicy);
>
>                 final RespuestaType resp=port.aprobacionTransaccion(tol);
>
> The ReceiveTimeout works as expected, when no data arrives in the
> specified ReceiveTimeout a java.net.SocketTimeoutException: Read timed
> out arises.
> In some cases when there is network problems or may be the response is in
> "chunked transfer encoding" and there is delay between chunks, the response
> takes minutes to arrive and no exception is thrown (because data is
> incoming, but slowly).
> This client is embedded in a JAX-WS web service and must return a response
> to the caller in certain amount of time and obviously I need an extra
> timeout, let's say a "ResponseTimeout".
> I tried to start a thread and sleep "ResponseTimeout", after that, call a
> cliente.close() if response not arrived completely but has no effect in
> blocking mode and i think is not the adequate solution.
> Should I use asynchronous  web services to achieve this?
> Any suggestion will be appreciated!!
> Thanks!
>
>

Reply via email to