Problema interrumpir webservice mientras se procesa

Hola amigos, soy nuevo en el grupo. Tengo un problema que me gustaría compartir con ustedes,

por si me pueden ayudar ya que no le encuentro solución.
Tengo un aplicación que recibe peticiones y dependiendo la petición se conecta a un webservice, ahora viene el problema, cuando la respuesta del webservice se demora, por ejemplo 10 segundos, la aplicación debe tener un tiempo de esperar de 5 segundos y si sobre pasa este tiempo debe responder un tipo de error especifico. Realmente no se me ocurre como poder controlar esto. Otro dato importante es que estoy atrapado en java 1.4.

Saludos.

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de ezamudio

Timeout

Define un timeout de lectura en tu cliente de web service, así cuando pase ese tiempo sin que recibas respuesta, se arroja una excepción y con eso sabes que debes contestar el error.

No dices qué usas para el cliente de WS así que no puedo decirte cómo poner ese timeout.

Gracias por responder, Timeout

Para generar mi cliente de WS utilizo AXIS. Como podría o en que lugar podría configurar este timeout?

¿Qué versión de Axis?

¿Y qué versión de Axis estás utilizando? Por ejemplo, para Axis 1.1

versión Axis

La versión del Axis es la 1.4

Imagen de ezamudio

axis2

Si es axis2 1.x entonces a tu stub de WS stub._getServiceClient().getOptions().setTimeoutInMilliseconds(timeoutDeLectura).

También puedes configurar el timeout de conexión con stub._getServiceClient().getOptions().setProperty(HttpConstants.CONNECTION_TIMEOUT,bla) (busca bien el nombre de la constante pero es algo así).

Axis, Axis1 por decirlo así versión 1.4

La versión que ocupo es Axis versión 1.4 y versión de java 1.4

Timeout en Axis 1.4

Si utilizas Axis 1.4, entonces puedes hacer lo siguiente:

FooServiceLocator fooLocator = new FooServiceLocator();
fooLocator.getEngine().setOption("sendMultiRefs", false);
Foo foo = fooLocator.getFooService(new URL(soapServiceUrl));

FooStub binding = (FooStub) foo;
binding.setTimeout(soapTimeoutSecs * 1000);


Referencia: Setting Timeout for Axis SOAP Webservice

Muchas Gracias

Me funciono tal cual el ejemplo. Tengo problemas con la ocketTimeoutException no permite hacer un try-catch sobre ella. Ahora veré eso.
Saludos.

Muchas Gracias

Me funciono tal cual el ejemplo. Tengo problemas con la socketTimeoutException no permite hacer un try-catch sobre ella. Ahora veré eso.
Saludos.

Finalmente una pregunta que

Finalmente una pregunta que puede ser contestada....

Imagen de ezamudio

jajajajaaj

ya ves Oscar, nomás por eso regreso de vez en cuando aquí.

Volgrox:

Cómo que no puedes hacer try-catch sobre la SocketTimeoutException? Tal vez tienes antes una IOException (que es su superclase).

Una pizca de ironía...

Oscar: tal vez haya una pizca de ironía en tus palabras... ¿no crees?

Respecto a la pregunta del usuario, fue necesario aclarar algunas cosas...

~~~

No, todo lo contrario. Son

No, todo lo contrario. Son contadas las veces en las que alguien ha hecho una pregunta, recibe una respuesta y tras unas pocas aclaraciones contesta que le funcionó.

Generalmente la pregunta es tan ambigua que hay que investigar más de que se trata la pregunta ( escritorio, web, java? computadoras!? ) O a veces es demasiado específica sobre una tecnología y versión que nadie más usa.

La mayoría de las veces simplemente se da una respuesta y jamás se sabe si sirvió o no ( y recientemente alguien da una respuesta complementaria 3 - 4 años después de la pregunta original )

Y el problema es

Y el problema es multifactorial, muchas veces no se conocen los términos sobre los que se quiere preguntar. El sitio no ayuda mucho a encontrar temas similares o a proveer contexto ( a a favorecer buenas preguntas o buenas respuestas). Hay guías sobre como preguntar, pero son tan largas que pocos las leen.

Etc. etc.

Imagen de ezamudio

simple

Pero es bien simple que vengan a decir "gracias, sí sirvió la respuesta de $FULANITO" pero rara vez lo hacen.