¿Solicitud Java SOAP como servicio web?

Entonces, para brindarle algunos antecedentes, estoy tratando de crear un cliente que interactuará con un tercero a través de SOAP. Inicialmente, comencé a implementar esto usando javax.xml.soap SAAJ, pero luego me di cuenta de que no hay opciones para los tiempos de espera al crear una conexión SOAP.

Consideré AXIS, que tiene tiempos de espera, pero me han advertido que trate de evitarlos y no es un gran rendimiento en cuanto a rendimiento. Mis superiores parecen estar poniendo esto como una última restauración.

Algunos han sugerido que la ruta del servicio web javax.xml.ws funciona muy bien, ya que puede poner en las propiedades de contexto la configuración de tiempo de espera, solo si se trata de un servicio web.

Así que esta es la situación, el tercero al que estoy enviando solicitudes realmente no tiene un archivo WSDL o URL, la idea original era crear la solicitud SOAP y enviarla, hubiera funcionado muy bien si SAAJ tuviera configuraciones de tiempo de espera. .

Así que estoy pensando y perdóname por mi ignorancia, ¿podría modelar e implementar la comunicación como un servicio web en lugar del método SAAJ javax.xml.soap para construir la solicitud? Si es así, ¿alguien realmente puede señalarme? La mayoría de los documentos que encuentro parecen depender de la generación de stubs y clases a partir de un WSDL.

Todo esto es realmente por el bien de establecer una configuración de tiempo de espera para las conexiones a esta API SOAP de terceros.

También tenga en cuenta que he visto que algunas personas sugieren tratarlo como una HttpConnection donde puede establecer tiempos de espera, pero la desventaja que encontré fue que ya no devuelve un objeto de tipo SOAPMessage.

Así que básicamente estoy tratando de cambiar esto:

    SOAPMessage soapMessage       = messageFactory.createMessage();
    SOAPConnection soapConnection = soapConnectionFactory.createConnection();

    SOAPPart soapPart         = soapMessage.getSOAPPart();
    SOAPEnvelope soapEnvelope = soapPart.getEnvelope();
    SOAPHeader soapHeader     = soapEnvelope.getHeader();
    SOAPBody soapBody         = soapEnvelope.getBody();
    ....
    soapConnection.call(soapMessage, url);

En algo más como un servicio web para que pueda hacer esto:

requestContext.put(BindingProviderProperties.REQUEST_TIMEOUT, 2000); 
requestContext.put(BindingProviderProperties.CONNECT_TIMEOUT, 2000);

myService.callMyRemoteMethodWith(myParameter1, myparameter2);

Realmente me falta conocimiento sobre el marco javax.ws, así que vaya a la ligera :)

preguntado el 03 de mayo de 12 a las 18:05

¿Ha considerado crear un WSDL para el servicio remoto? Una gran cantidad de herramientas está entonces disponible. -

+1 Y recomiendo generar el WSDL usando las anotaciones JAX-WS + JAXB. -

Esa es posiblemente una opción, probablemente puede parecer un poco extraño generar un WSDL para un tercero fuera de mi control, pero esa es una opción. -

¿Qué pasa con las propiedades del sistema de Java? es decir, sun.net.client.defaultConnectTimeout, ¿son respetados por SOAPConnection? -

No consideraría extraño crear un WSDL para el servicio de terceros. El servicio tiene una interfaz que aparentemente el tercero no eligió documentar. Su documentación de la interfaz en forma de WSDL es un enfoque proactivo (tanto como se puede esperar) para formalizar la interfaz para darle a la maquinaria de generación de herramientas algo que masticar. Además, te ayudará a reconocer si la interfaz cambia en el futuro. la publicación en stackoverflow.com/questions/2148915/… proporciona un pequeño detalle sobre la configuración del tiempo de espera. -

1 Respuestas

Los archivos jar del cliente (stubs) no se pueden crear sin un WSDL. En pocas palabras, y creo que lo sabrá, WSDL es el núcleo de cualquier implementación de servicio web.

No sería aconsejable crear un WSDL para el servicio remoto hasta que el servicio remoto lo publique, simplemente porque puede que no sea viable a largo plazo. Mañana si los parámetros de esta solicitud de terceros cambian, ¿estaría dispuesto a dedicar esfuerzo y tiempo para los cambios correspondientes en el WSDL? Daría lugar a un montón de mantenimiento.

Creo que su necesidad básica es que se devuelva un objeto de tipo SOAPMessage y supongo que debería buscar formas de implementar el tiempo de espera manteniendo intacto su enfoque actual.

Respondido el 25 de Septiembre de 12 a las 20:09

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.