2011-08-02 22 views
9

Estoy en la etapa en la que creé un interceptor de salida y obtengo un OuputStream del mensaje SOAP. Pero, ¿cómo podría modificar el sobre SOAP justo antes de enviarlo al punto final? Me gustaría eliminar algunos elementos xml.¿Cómo modificar la solicitud SOAP generada?

Respuesta

3

una forma podría ser obtener el documento y ejecutarlo a través de la transformación XSLT.

Usted puede obtener en el documento en el handleMessage de su interceptor llamando

@Override 
public void handleMessage(SoapMessage message) throws Fault{ 
    SOAPMessage saaj = message.getContent(SOAPMessage.class); 
    Document doc = saaj.getSOAPPart(); // This actually returns a SOAPPart instance but it does implement the w3c Document interface 

    //play around with the document, doc is a reference so any changes made to that instance 
    //will be forwarded to the rest of the chain 
} 

cuidado sin embargo que si se tiene la seguridad como la firma XML que debe ser realizada en el contenido de jabón debe asegurarse de que el interceptor ocurre ANTES de que se aplique la firma, de lo contrario, los invalidará.

Para jugar con el tiempo del interceptor, puede especificar la fase en la que se ejecutará. CXF también debe respetar el orden en que los configurará si se realizan en la misma fase.

pero no tome mi palabra para ella ... comprobar estos para obtener más información

depuración a través del código fuente CXF también me ayudó mucho en la comprensión de cómo funcionaba

---- ---- EDITAR

(gracias Daniel :-)

Para que esto funcione, debe tener configurado SAAJOutternter en su pila. Puede agregarlo manualmente o simplemente hacer que forme parte de su interceptor. Here is un ejemplo de un interceptor que prácticamente hace lo que quiere.

+0

Muchas gracias por su respuesta Newtopian. message.getContent (SOAPMessage.class) siempre devuelve Nulo :-(¿En qué fase debo poner este código para acceder al sobre SOAP? – kiwifrog

+2

También necesitaría configurar en el SAAJOutterteror junto con su interceptor que hace la transformación. –

+1

de hecho, Daniel tiene razón, debe asegurarse de que el SAAJOutinterceptor esté configurado, ya que es él quien serializa los datos en un objeto SOAPMessage. De manera predeterminada, mi configuración estaba configurada, así que no tuve que preocuparme demasiado por eso. el objeto ya no será nulo y podrás jugar con el árbol DOM a tu antojo. – Newtopian

Cuestiones relacionadas