2010-01-27 28 views
10

Parece que debería ser simple, pero tal vez me falta algo. Solo quiero hacer una llamada SOAP en Java, preferiblemente usando solo API integradas. Estoy un poco abrumado mirando el paquete javax.xml.soap en la documentación de Java. Intenté buscar en Google, pero parece que todos los resultados son de 2000-2002, y todos hablan de bibliotecas que pueden usarse para llamadas SOAP (supongo que antes de que las bibliotecas SOAP estuvieran incorporadas).Cómo hacer una llamada SOAP en Java

No es necesario que maneje la solicitud SOAP; solo haz uno. This site tiene un ejemplo que es bastante simple, pero no utiliza las bibliotecas Java SOAP incorporadas. ¿Cómo haría básicamente lo mismo con Core Java?

// 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

hallazgo : nombre -mtime jabón <últimos diez años> -print | xargs rm -r – sixtyfootersdude

Respuesta

4

El jabón ha cambiado mucho desde los primeros días. Puedes hacer cosas como lo que describes, pero no es común.

Una práctica más común ahora es usar una herramienta wsdl2java para generar una API cliente a partir de una descripción WSDL del servicio. Eso te dará una API agradable y limpia para llamar.

Apache CXF es un lugar adonde ir para este tipo de cosas.

Una condición es rpc/encoded. Si está tratando con un servicio anterior, podría ser rpc/codificado, y en ese caso su mejor apuesta es Apache Axis 1.x. Todo lo demás se ha escapado de rpc/codificado.

+0

intenté usar wsdl2java, y aparece este error "WSDLToJava Error: wsdls codificados/Rpc no son compatibles con CXF" :( – Jenni

+0

Eso significa que tienes un servicio web muy antiguo en tus manos. Voy a editar. .. – bmargulies

+0

gracias. El servicio es en realidad proporcionado por un servidor de ColdFusion, por lo que es probablemente antiguo ... de hecho logré que funcionara usando las API directamente, pero es algo feo. – Jenni

1

La forma más sencilla es la biblioteca de jabón-WS: https://github.com/reficio/soap-ws

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

    client.post(envelope); 
Cuestiones relacionadas