2011-06-21 19 views
6

Creé una clase que intercepta el ciclo Solicitud-Respuesta del intercambio de mensajes SOAP y quise registrar el intercambio de mensajes. ¿Cuál es la mejor manera para poder registrar el mensaje SOAP en mi archivo de registro?Registrar mensajes SOAP

No quiero que esté muy bien impreso en mi archivo de registro, pero solo quiero acceder al y ver el sobre SOAP de solicitud y respuesta.

he intentado con este código:

public class LogHandler{  
    private static final Logger _LOG; 
    @Override 
    protected void handleResponse(SOAPMessage message) 
     logSOAPMessage(message); 
    } 
    @Override 
    protected void handleRequest(SOAPMessage message) 
     logSOAPMessage(message); 
    }  
    private void logSOAPMessage(SOAPMessage message){ 
     _LOG.info(":: Logging SOAP Message :: " + message.toString()); 
    } 
} 

Pero imposible encontrar el mensaje deseado.

:: Logging SOAP Message :: [email protected] 

¿Alguna sugerencia?

Respuesta

2

Lo que está viendo es el toString del SOAPMessage. Es posible que deba buscar los javadocs para ver si puede obtener SOAPEnvelope del SOAPMessage de Oracle y que debe contener el mensaje SOAP entrante/saliente.

Editar: Por favor, compruebe this para getSoapHeader() y getSoapBody() para deconstruir el mensaje de jabón. Puede que tenga que averiguar lo mismo para el contenedor de Oracle de SOAPMessage.

10

Si message es el SOAPMessage luego haga lo siguiente:

ByteArrayOutputStream bout = new ByteArrayOutputStream(); 
message.writeTo(bout); 
String msg = bout.toString("UTF-8"); 

Ahora Cadena msg tiene el mensaje de jabón y se puede iniciar sesión.

En su ejemplo: respuesta

private void logSOAPMessage(SOAPMessage message){ 
    ByteArrayOutputStream bout = new ByteArrayOutputStream(); 
    message.writeTo(bout); 
    String msg = bout.toString("UTF-8"); 
    _LOG.info(":: Logging SOAP Message :: " + msg);  
} 
1

Cratilo es insuficiente cuando no se desea registrar los archivos adjuntos SOAP.

Aquí está una manera de conectarse solamente el sobre: ​​

// Get the Envelope Source 
Source src = message.getSOAPPart().getContent() ; 

// Transform the Source into a StreamResult to get the XML 
Transformer transformer = TransformerFactory.newInstance().newTransformer(); 
transformer.setOutputProperty(OutputKeys.INDENT, "no"); 
StreamResult result = new StreamResult(new StringWriter()); 
transformer.transform(src, result); 
String xmlString = result.getWriter().toString(); 
Cuestiones relacionadas