Im utilisant Metro 2.0 et J2SE5. L'application que j'ai écrite ne connaît pas le WebService externe au moment de la compilation, il les trouve à l'exécution sur la base d'un fichier XML de logique applicative, donc j'effectue une requête WSDL.JAXWS - aide nécessaire pour définir le délai d'expiration de la requête WSDL
L'exemple de code que je l'ai écrit est comme suit:
String wsdlServiceName = ...; String wsdlURL = ...; Document payload = ...;
final String nsURI = ...;
final QName serviceName = new QName(nsURI, wsdlServiceName + "Service");
final QName servicePort = new QName(nsURI, wsdlServiceName + "Port");
// Create service and the dispatcher for the SOAP message
Service service = Service.create(new URL(wsdlURL), serviceName);
dispatch = service.createDispatch(servicePort, SOAPMessage.class, Service.Mode.MESSAGE);
// Set timeouts
dispatch.getRequestContext().put("com.sun.xml.internal.ws.request.timeout", 3000);
dispatch.getRequestContext().put("com.sun.xml.internal.ws.connect.timeout", 3000);
// Create the outgoing SOAP request
SOAPBinding soapBinding = (SOAPBinding) dispatch.getBinding();
request = soapBinding.getMessageFactory().createMessage();
SOAPBody requestBody = request.getSOAPBody();
requestBody.addDocument(payload);
// Invoke web service operation
SOAPMessage response = dispatch.invoke(request);
Le délai d'attente fonctionne correctement lorsque le service Web est appelé (dispatcher.invoke (demande))
Cependant, le WSDL est demandé avant que les délais d'attente ne soient définis et si le service Web ne répond pas, cela prend 90 secondes avant que la connexion ne soit expirée.
Est-il possible de définir les délais avant que le WSDL ne soit demandé? Vous avez besoin d'un répartiteur pour définir les délais, mais cela est fait APRÈS la création du Service qui demande le WSDL?! (Ie. Service.create())
Bonjour. Merci pour votre commentaire, je vais essayer. Par intérêt, savez-vous si mon programme peut être modifié pour définir les ws-timeouts avant que le WSDL ne soit demandé? J'aurais pensé que cela devrait être possible? – Alex
@Alex: Je pense que le WSDL est accessible à 'Service.create (nouvelle URL (wsdlURL), serviceName);'. Étant donné que le paramètre de délai d'attente est sur le répartiteur, je ne vois pas comment il est possible de le définir avant. Les propriétés du système devraient cependant vous aider puisque jax-ws utilise HttpUrlConnection sous les couvertures pour la communication avec le serveur. À mon humble avis, vous devez garder le wsdl en cache pour éviter l'extraction à distance et également éviter ce genre de problèmes. – Cratylus
@Alex: Cochez cette case http://mail-archives.apache.org/mod_mbox/cxf-users/200902.mbox/%[email protected]%3E – Cratylus