2010-01-27 4 views
10

Cela semble être simple, mais peut-être qu'il me manque quelque chose. Je veux juste faire un appel SOAP en Java, de préférence en utilisant seulement des API intégrées. Je suis un peu débordé en regardant le paquet javax.xml.soap dans la documentation Java. J'ai essayé de faire une recherche sur Google, mais il semble que tous les résultats datent de 2000-2002, et ils parlent tous de bibliothèques qui peuvent être utilisées pour des appels SOAP (avant que les bibliothèques SOAP ne soient construites, je suppose).Comment faire un appel SOAP en Java

Je n'ai pas besoin de gérer la requête SOAP; seulement en faire un. This site a un exemple assez simple, mais n'utilise pas les bibliothèques Java SOAP intégrées. Comment ferais-je essentiellement la même chose en utilisant Java de base?

// Create the parameters 
Vector params = new Vector(); 
params.addElement(
    new Parameter("flightNumber", Integer.class, flightNumber, null)); 
params.addElement(
    new Parameter("numSeats", Integer.class, numSeats, null)); 
params.addElement(
    new Parameter("creditCardType", String.class, creditCardType, null)); 
params.addElement(
    new Parameter("creditCardNumber", Long.class, creditCardNum, null)); 

// Create the Call object 
Call call = new Call(); 
call.setTargetObjectURI("urn:xmltoday-airline-tickets"); 
call.setMethodName("buyTickets"); 
call.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC); 
call.setParams(params); 

// Invoke 
Response res = call.invoke(new URL("http://rpc.middleearth.com"), ""); 

// Deal with the response 
+0

trouver -mtime savon -name -print | xargs rm -r – sixtyfootersdude

Répondre

4

Le savon a beaucoup changé depuis les débuts. Vous pouvez faire des choses comme ce que vous décrivez, mais ce n'est pas commun.

Une pratique plus courante consiste maintenant à utiliser un outil wsdl2java pour générer une API client à partir d'une description WSDL du service. Cela vous donnera une API agréable et propre à appeler.

Apache CXF est un endroit où aller pour ce genre de chose.

Une condition est rpc/codée. Si vous traitez avec un ancien service, il pourrait être rpc/encodé, et dans ce cas votre meilleur pari est Apache Axis 1.x. Tout le reste a fui rpc/encoded.

+0

J'ai essayé d'utiliser wsdl2java, et j'ai cette erreur "WSDLToJava Erreur: Rpc/wsdls encodés ne sont pas supportés avec CXF" :( – Jenni

+0

Cela signifie que vous avez un très vieux service web sur vos mains. .. – bmargulies

+0

merci le service est en fait fourni par un serveur coldfusion, donc c'est probablement ancien ... j'ai réussi à le faire fonctionner en utilisant les apis directement, mais c'est plutôt moche. – Jenni

1

La façon la plus simple est la bibliothèque de savon ws: https://github.com/reficio/soap-ws

SoapClient client = SoapClient.builder() 
     .endpointUrl("http://rpc.middleearth.com") 
     .build(); 

    client.post(envelope); 
Questions connexes