2011-06-21 12 views
6

SOAPメッセージ交換のRequest-Responseサイクルをインターセプトするクラスを作成しました。メッセージの交換を記録したかったのです。 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()); 
    } 
} 

しかし、必要なメッセージが表示されますdoesntの。

:: Logging SOAP Message :: oracle.j2ee.ws.saaj.soap.[email protected] 

ヒント

答えて

2

あなたが見ているのは、SOAPMessageのtoStringです。 javadocを参照して、OracleのSOAPMessageからSOAPEnvelopeを取得できるかどうか、またそれには着信/発信SOAPメッセージが含まれているかどうかを確認する必要があります。

編集:getSoapHeader()とgetSoapBody()にはthisをチェックし、soapメッセージを分解してください。 OracleのSOAPMessageのラッパーにも同じことを理解する必要があります。 messageがある場合

10

SOAPMessageは、次の操作を行います。

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

は今、文字列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);  
} 
1

クラテュロス答えは、SOAP添付ファイルをログに記録したくない場合には不十分です。

ここだけ封筒をログに記録する方法です:

// 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(); 
関連する問題