【问题标题】:Log SOAP Messages记录 SOAP 消息
【发布时间】:2011-06-21 07:11:43
【问题描述】:

我创建了一个拦截 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

有什么提示吗?

【问题讨论】:

    标签: java web-services soap


    【解决方案1】:

    如果messageSOAPMessage,则执行以下操作:

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

    现在 String msg 有肥皂消息,您可以记录它。

    在你的例子中:

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

    【讨论】:

      【解决方案2】:

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

      编辑:请检查this 获取getSoapHeader() 和getSoapBody() 以解构soap 消息。对于 Oracle 的 SOAPMessage 包装器,您可能必须弄清楚这一点。

      【讨论】:

        【解决方案3】:

        当您不想记录 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();
        

        【讨论】:

          猜你喜欢
          • 2019-02-20
          • 1970-01-01
          • 2014-03-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-04-10
          相关资源
          最近更新 更多