2011-06-21 13 views
6

Stworzyłem klasę przechwytującą cykl Żądaj-odpowiedź wymiany komunikatów SOAP i chciałem zalogować się do wymiany wiadomości. Jaki jest najlepszy sposób, aby można było zarejestrować komunikat SOAP w moim pliku dziennika?Log SOAP Wiadomości

Nie chcę, aby był ładnie wydrukowany w moim pliku dziennika, ale chcę tylko uzyskać dostęp do i wyświetlić kopertę SOAP żądania i odpowiedzi.

Próbowałem z tym kodem:

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

Ale robi się żądaną wiadomość.

:: Logging SOAP Message :: [email protected] 

Jakieś wskazówki?

Odpowiedz

2

To, co widzisz, to toString komunikatu SOAP. Być może trzeba będzie wyszukać javadocs, aby sprawdzić, czy można uzyskać SOAPEnvelope z komunikatu SOAPMessage Oracle, który powinien zawierać przychodzący/wychodzący komunikat SOAP.

Edycja: Proszę sprawdzić this dla getSoapHeader() i getSoapBody(), aby zdekonstruować wiadomość mydła. Być może będziesz musiał znaleźć to samo dla opakowania Oracle SOAPMessage.

10

Jeśli message jest SOAPMessage następnie wykonaj następujące czynności:

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

Teraz String msg ma komunikatu SOAP i można go zalogować.

W przykładzie: odpowiedź

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

Kratylos jest niewystarczające, jeśli nie chce się zalogować załączników SOAP.

Oto sposób logowania tylko kopercie

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