He usado JAXWS-RI 2.1 para crear una interfaz para mi servicio web, basada en un WSDL. Puedo interactuar con el servicio web sin problemas, pero no he podido especificar un tiempo de espera para enviar solicitudes al servicio web. Si por alguna razón no responde, el cliente parece girar sus ruedas para siempre.
La búsqueda ha revelado que probablemente debería intentar hacer algo como esto:
((BindingProvider)myInterface).getRequestContext().put("com.sun.xml.ws.request.timeout", 10000);
((BindingProvider)myInterface).getRequestContext().put("com.sun.xml.ws.connect.timeout", 10000);
También descubrí que, según la versión de JAXWS-RI que tenga, es posible que deba establecer estas propiedades en su lugar:
((BindingProvider)myInterface).getRequestContext().put("com.sun.xml.internal.ws.request.timeout", 10000);
((BindingProvider)myInterface).getRequestContext().put("com.sun.xml.internal.ws.connect.timeout", 10000);
El problema que tengo es que, independientemente de cuál de las anteriores sea correcta, no sé dónde puedo hacer esto. Todo lo que tengo es una Service
subclase que implementa la interfaz generada automáticamente para el servicio web y en el punto en que esto se está instanciando, si el WSDL no responde, entonces ya es demasiado tarde para establecer las propiedades:
MyWebServiceSoap soap;
MyWebService service = new MyWebService("http://www.google.com");
soap = service.getMyWebServiceSoap();
soap.sendRequestToMyWebService();
¿Alguien puede señalarme en la dirección correcta?