Saludos a todo el mundo:
Si alguien puede echarme una mano, se lo agradezco por adelantado.estoy creando un web service con el siguiente WSDL: http://resultsservice.lottery.ie/resultsservice.asmx?WSDL
He conseguido sacar resultado por consola,de los "Euromillones" para el método GetProjectedJackpot, con el que obtengo el amount,drawDate y Guaranteed, pero, necesito sacar por consola los resultados de los sorteos de euromillones y crear una aplicacion que contacte con este WS y que compruebe una combinacion de euromillones.
La main es la siguiente:
import javax.xml.soap.*;
public class SOAPClientSAAJ {
public static void main(String args[]) throws Exception {
// Create SOAP Connection
SOAPConnectionFactory soapConnectionFactory = SOAPConnectionFactory.newInstance();
SOAPConnection soapConnection = soapConnectionFactory.createConnection();
// Send SOAP Message to SOAP Server
String url = "http://resultsservice.lottery.ie/resultsservice.asmx";
SOAPMessage soapResponse = soapConnection.call(createSOAPRequest(), url);
// print SOAP Response
System.out.print("Response SOAP Message:");
soapResponse.writeTo(System.out);
soapConnection.close();
}
private static SOAPMessage createSOAPRequest() throws Exception {
MessageFactory messageFactory = MessageFactory.newInstance();
SOAPMessage soapMessage = messageFactory.createMessage();
SOAPPart soapPart = soapMessage.getSOAPPart();
String serverURI = "http://www.lottery.ie/resultsservice/";
// SOAP Envelope
SOAPEnvelope envelope = soapPart.getEnvelope();
envelope.addNamespaceDeclaration("gpj", serverURI);
/*
Constructed SOAP Request Message:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:gpj="http://www.lottery.ie/resultsservice">
<soapenv:Header/>
<soapenv:Body>
<gpj:GetProjectedJackpot>
<gpj:drawType>Lotto</gpj:drawType>
</gpj:Message>
</soapenv:Body>
</soapenv:Envelope>
*/
// SOAP Body
SOAPBody soapBody = envelope.getBody();
SOAPElement soapBodyElem = soapBody.addChildElement("GetProjectedJackpot", "gpj");
SOAPElement soapBodyElem1 = soapBodyElem.addChildElement("drawType", "gpj");
soapBodyElem1.addTextNode("EuroMillions");
MimeHeaders headers = soapMessage.getMimeHeaders();
headers.addHeader("SOAPAction", serverURI + "GetProjectedJackpot");
soapMessage.saveChanges();
/* Print the request message */
System.out.print("Request SOAP Message:");
soapMessage.writeTo(System.out);
System.out.println();
return soapMessage;
}
}
Graacias y un saludo, nuevamente
Si ya te funciona por consola sacar resultados del método GetProjectedJackpot, el patrón para los demás métodos del mismo WSDL es exactamente el mismo, solo cambia el nombre del método y los parámetros que necesita. El problema habitual en este punto no es tanto "cómo llamo a otro método" sino descubrir qué parámetros exactos espera cada uno, porque muchos WSDL de servicios antiguos no documentan bien los tipos.
Un par de cosas que suelen ayudar cuando te atascas con un WSDL así:
1. Genera el cliente a partir del WSDL con la herramienta de tu stack (wsimport en Java, svcutil/referencia de servicio en .NET, wsdl2php en PHP) en vez de construir las llamadas SOAP a mano. Esto te da las clases/tipos exactos que espera cada método, con sus parámetros bien tipados, y evita adivinar el XML del sobre SOAP a ojo.
2. Si el cliente generado no te aclara qué pasar en algún parámetro opcional, captura el tráfico SOAP real con algo como Fiddler o Wireshark mientras pruebas el servicio desde una herramienta como SoapUI, así ves exactamente qué XML espera el servidor en la petición y qué te devuelve, sin depender solo de lo que interpreta tu cliente generado.
Si me dices el nombre exacto del método que necesitas además del que ya tienes funcionando, puedo mirar si el WSDL público deja ver la firma esperada.
David