Bonjour
je ne connais pas UTL Http mais les premières réponses de Bing ou Google semblent intéressantes si tu lis l'anglais couramment.
Voilà ce que j'ai compris de l'appel de web services d'un point de vue client :
Le binding statique consiste à compiler et lier ton proxy client au moment du développement. (Si ton service Toto reçoit deux champs "nom" et "prenom", tu génères la classe "TotoStub" avec les accesseurs sur "nom" et "prenom"). Tu es alors pieds et poings liés avec le service qui se trouve en face mais tu dispose d'un cadre rigoureux de programmation. Si ton service évolue tu dois faire évoluer ton code. Je crois que c'est la plus performante des trois solutions, mais c'est aussi la plus contraignante en termes de mise en place et de suivi.
Le binding dynamique consiste à ne compiler que l'interface correspondant à ton service (description des entrées/sorties, le port-type de ton WSDL). A l'exécution ton client génère dynamiquement le <binding> qui va bien (cf. WSDL) et le colle derrière ton interface. Pour toi ça reste transparent, on reste presque dans le même cas que précédemment. C'est clairement moins performant, mais tu n'as pas à générer et embarquer tes stubs pendant ta phase de développement. Tu es moins dépendant des évolutions de ton service.
L'invocation dynamique consiste à construire à la main la requête à envoyer à ton service et à décortiquer (également à la main) la réponse de ce dernier. Tu disposes alors de toute la liberté voulue pour faire ce que tu veux (un peu comme la chèvre de Mr Seguin).
Je choisirai la première solution si ton service n'est pas appelé à bouger ou que tes développeurs ne maîtrisent pas vraiment l'environnement métier, la seconde si tu n'as pas de problématique de performance ou que tu as surtout besoin de données tabulaires, la troisième si tes services sont simples et que tu ne veux pas sortir la grosse artillerie (et que tu n'as pas peur des loups ^^).
Personnellement j'utilise un mélange de la deuxième et de la troisième.
Tu devrais jeter un coup d'œil sur les packages javax.xml de la jvm
Le binding statique est bien documenté sur le net, le reste l'est moins aussi voilà un exemple de connexion à un service SOAP 1.1:
Préparation du convoyeur (il faut l'url, le nom du service, celui de la méthode, le user et le password de connexion si nécessaire)
1 2 3 4 5 6 7
| QName vPortQName = new QName(URL, aServiceName + "HttpPort");
Service vService = Service.create(new URL(URL + aServiceName + "?wsdl"), new QName("http://www.monservice.com", aServiceName));
vService.addPort(vPortQName, SOAPBinding.SOAP11HTTP_BINDING, URL + aServiceName);
Dispatch<SOAPMessage> vDispatch = vService.createDispatch(vPortQName, SOAPMessage.class, Service.Mode.MESSAGE);
vDispatch.getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, URL + aServiceName);
vDispatch.getRequestContext().put(BindingProvider.USERNAME_PROPERTY, aUser);
vDispatch.getRequestContext().put(BindingProvider.PASSWORD_PROPERTY, aPassword); |
Préparation de la requête
SOAPMessage vRequest = MessageFactory.newInstance(SOAPConstants.SOAP_1_1_PROTOCOL).createMessage();
Je te laisse jouer avec SOAPElement pour alimenter ton message.
aRequest.getSOAPPart().getEnvelope().getBody().addChildElement(...
Construction de l'enveloppe (Tree to XMLsoap)
Envoi au serveur
SOAPMessage response = vDispatch.invoke(vRequest);
Après tu lis ta réponse comme tu l'entends.
En espérant que ça puisse aider.
Partager