Je dois implémenter un client de service Web dans un fichier WSDL donné. J'ai utilisé l'outil 'wsimport' du SDK pour créer des classes Java à partir du WSDL ainsi qu'une classe qui enveloppe la seule méthode du webservice (enhanceAddress(auth, param, address)
) dans une méthode java simple. Jusqu'ici tout va bien. Le webservice est fonctionnel et renvoie les résultats correctement. Le code ressemble à ceci:Détails de connexion et délais d'expiration dans un client de service Web Java
try {
EnhancedAddressList uniservResponse = getWebservicePort().enhanceAddress(m_auth, m_param, uniservAddress);
//Where the Port^ is the HTTP Soap 1.2 Endpoint
}catch (Throwable e) {
throw new AddressValidationException("Error during uniserv webservice request.", e);
}
Le problème maintenant: Je dois obtenir des informations sur la connexion et toute erreur qui pourrait se produire afin de remplir différentes valeurs JMX (telles que COUNT_READ_TIMEOUT, COUNT_CONNECT_TIMEOUT, ...) Malheureusement, la méthode ne lance officiellement aucune exception, donc pour obtenir des détails sur une exception ConnectException, je dois utiliser getCause()
sur le ClientTransportException
qui sera lancé. Pire encore: J'ai essayé de tester la valeur du délai d'attente de lecture, mais il n'y en a pas. J'ai changé l'emplacement du service dans le fichier wsdl pour publier la requête dans un script php qui attend toujours et ne revient pas. Devinez quoi: Le client de service Web pas expire mais attend aussi pour toujours (j'ai tué l'application après plus de 30 minutes d'attente). Ce n'est pas une option pour mon application car je finis par manquer de connexions tcp si certains d'entre eux sont bloqués.
La méthode enhanceAddress(auth, param, address)
n'est pas implémentée mais annotée avec javax.jws. * Annotations, ce qui signifie que je ne peux pas voir/modifier/inspecter le code réellement exécuté.
Est-ce que j'ai une autre option que de jeter tout le wsimport/javax.jsw-stuff et d'implémenter mon propre client de savon?
Depuis que j'ai eu le problème il y a 2 semaines, j'ai écrit mon propre client. Malgré cela, j'ai testé votre approche et ça marche! J'ai trouvé un morceau de code similaire à l'époque, mais d'une manière ou d'une autre, il m'a donné une exception ClassCastException quand j'ai essayé de lancer BindingProvider. – f1sh
J'ai un problème similaire, MAIS le délai d'attente arrive quand je reçois le port, comment puis-je le résoudre ?? – maugch