记录SOAP消息

Mar*_*ada 7 java soap web-services

我创建了一个拦截SOAP消息交换的请求 - 响应周期的类,我想记录消息的交换.什么是最好的方式,以便我可以在我的日志文件中记录SOAP消息?

我不希望它在我的日志文件中打印得很漂亮,但我只想访问并查看请求和响应SOAP信封.

我试过这段代码:

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());
    }
}
Run Code Online (Sandbox Code Playgroud)

但是没有获得所需的信息.

:: Logging SOAP Message :: oracle.j2ee.ws.saaj.soap.soap11.Message11@715346
Run Code Online (Sandbox Code Playgroud)

任何提示?

Cra*_*lus 13

如果message是,SOAPMessage则执行以下操作:

ByteArrayOutputStream bout = new ByteArrayOutputStream();   
message.writeTo(bout);   
String msg = bout.toString("UTF-8");
Run Code Online (Sandbox Code Playgroud)

现在String msg有soap消息,你可以记录它.

在你的例子中:

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


raj*_*aur 2

您看到的是 SOAPMessage 的 toString。您可能需要查找 javadoc 以查看是否可以从 Oracle 的 SOAPMessage 获取 SOAPEnvelope,并且它应该包含传入/传出 SOAP 消息。

编辑:请检查getSoapHeader () 和 getSoapBody() 以解构肥皂消息。您可能必须为 Oracle 的 SOAPMessage 包装器找出同样的结果。