2012-01-25 17 views
5

Estoy simplemente tratando de convertir un WSDl en varias solicitudes HTTP diferentes a partir de datos suministrados por el WSDL. He leído un montón de preguntas similares, pero ninguna realmente me dio una respuesta.Convierta un WSDL a sus enlaces HTTP respectivos

Algunos dicen usar SOAPUI - Estoy familiarizado con esta aplicación y la uso. Pero necesito crear estas solicitudes HTTP desde el WSDL por mi cuenta.

Algunos dicen para tratar JAXWS - Miré a una serie de tutoriales sobre esto, así como en Eje y ello se traduce en el WSDL fijaciones de clases Java y utiliza esos métodos para probar los servicios web. Realmente me gustaría generar solo la solicitud HTTP para que en un momento pueda manipular la solicitud y enviar mis propias pruebas.

Comencé a usar wsdl4j para comenzar a analizar el WSDL, pero prefiero no seguir este camino hasta que esté absolutamente seguro de que no reinventaré la rueda. Me parece que ha habido una necesidad de esto en el pasado? Pero con WSDL4J y cualquier otra biblioteca, no veo una traducción de mensaje de WSDL a Soap.

Cualquier sugerencia sería muy útil. El objetivo es poder tomar un WSDL, examinarlo y crear solicitudes HTTP-SOAP para cada método en el WSDL y poder probarlos por cuestiones de seguridad. ¡El primer paso es crear esas solicitudes!

+0

woa, esto fue preguntado hace 5 años! : o - y nadie lo editó antes que yo: o – Gewure

Respuesta

2

Al llamar a un servicio web SOAP, puede utilizar una invocación estática o una invocación dinámica.

Invocación estática significa crear un stub del WSDL y usarlo para realizar la llamada. Esto crea todo el código de "fontanería" para usted, pero está estrechamente vinculado a ese servicio web y no puede usarlo para otros servicios web con diferentes contratos. Para cada WSDL necesita crear otro stub.

Con la invocación dinámica, lee el WSDL en tiempo de ejecución y descubre cómo llamar al servicio web en función de la información que obtiene del WSDL. Aliméntelo con WSDL múltiples y el cliente se adapta.

La invocación dinámica es lo que SoapUI usa para generar las solicitudes de muestra y las respuestas.

Lee el WSDL que lo alimenta, extrae el esquema XML de la sección de tipos y genera instancias XML. Para hacerlo, usa Wsdl4j y XmlBeans debajo del capó.

Su decisión de utilizar Wsdl4j es buena ya que le da control al analizar el WSDL. Pero también echa un vistazo a XmlBeans; tiene algún otro tools que pueda serle útil, como la clase schema to instance, por ejemplo.

Si necesita verlo en acción (tal vez depurarlo para ver lo que está pasando) puede crear una prueba sucia rápida con la API SoapUI:

import com.eviware.soapui.impl.wsdl.WsdlInterface; 
import com.eviware.soapui.impl.wsdl.WsdlProject; 
import com.eviware.soapui.impl.wsdl.support.wsdl.WsdlImporter; 

public class Test { 
    public static void main(String[] args) throws Exception { 
     WsdlProject project = new WsdlProject(); 
     WsdlInterface[] wsdls = WsdlImporter.importWsdl(project, "http://www.html2xml.nl/Services/Calculator/Version1/Calculator.asmx?wsdl"); 
     WsdlInterface wsdl = wsdls[0]; 
     System.out.println(wsdl.getOperationByName("Add").createRequest(true)); 
     System.exit(0); // just to clear up some threads created by the project 
    } 
} 

El mensaje debería ver impreso (para el Agregar operación de la Calculadora WS) sería algo como esto:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tem="http://tempuri.org/"> 
    <soapenv:Header/> 
    <soapenv:Body> 
     <tem:Add> 
     <tem:a>?</tem:a> 
     <tem:b>?</tem:b> 
     </tem:Add> 
    </soapenv:Body> 
</soapenv:Envelope> 

Espero que esto lo ayude a avanzar más allá del primer paso.

Cuestiones relacionadas