Java 记录SOAP消息

Java 记录SOAP消息,java,web-services,soap,Java,Web Services,Soap,我创建了一个截取SOAP消息交换的请求-响应周期的类,并希望记录消息交换。 什么是将SOAP消息记录到日志文件中的最佳方法 我不希望它被打印在我的日志文件中,但我只想访问它 并查看请求和响应SOAP信封 我尝试使用以下代码: public class LogHandler{ private static final Logger _LOG; @Override protected void handleResponse(SOAPMessage message)

我创建了一个截取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());
    }
}
但是没有得到所需的消息

:: Logging SOAP Message :: oracle.j2ee.ws.saaj.soap.soap11.Message11@715346

有什么提示吗?

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


编辑:请检查getSoapHeader()和getSoapBody()以解构soap消息。您可能需要为Oracle的SOAPMessage包装找到相同的方法。

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

ByteArrayOutputStream bout = new ByteArrayOutputStream();   
message.writeTo(bout);   
String msg = bout.toString("UTF-8");
现在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);     
}

当您不想记录SOAP附件时,Cratylus的回答是不够的

这里有一种只记录信封的方法:

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