开发者

Log SOAP Messages

I created a class that intercepts the Request-Response cycle of SOAP message exchange and I wanted to log the exchange of messages. What's the best way so that I could log the SOAP message in my log file?

I dont want it to be pretty printed in my log file but I just want to access and view the request and response SOAP envelope.

I tried with this code:

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());
    }
}

But doesnt get the required message.

:: Logging SOAP Message :: oracle.j2ee.ws.saaj.soap.soap11.Message11@715开发者_开发技巧346

Any hints?


If message is the SOAPMessage then do the following:

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

Now String msg has the soap message and you can log it.

In your example:

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


What you are seeing is the toString of the SOAPMessage. You might have to lookup the javadocs to see if you can get the SOAPEnvelope from Oracle's SOAPMessage and that should contain the incoming/outgoing SOAP message.

Edit: Please check this for getSoapHeader() and getSoapBody() to deconstruct the soap message. You might have to figure out the same for Oracle's wrapper of SOAPMessage.


Cratylus' answer is insufficient when you don't want to log SOAP attachments.

Here's a way to log only the Envelope :

// 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();
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜