2011-06-21 5 views
6

J'ai créé une classe qui intercepte le cycle Demande-Réponse de l'échange de messages SOAP et j'ai voulu enregistrer l'échange de messages. Quel est le meilleur moyen pour que je puisse enregistrer le message SOAP dans mon fichier journal?Messages SOAP de journal

Je ne veux pas qu'il soit assez imprimé dans mon fichier journal, mais je veux juste accéder à et voir l'enveloppe SOAP de la requête et de la réponse.

J'ai essayé avec ce code:

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

Mais ne marche pas obtenir le message requis.

:: Logging SOAP Message :: [email protected] 

Des indices?

Répondre

2

Ce que vous voyez est le toString du SOAPMessage. Vous devrez peut-être rechercher les javadocs pour voir si vous pouvez obtenir le SOAPEnvelope à partir de SOAPMessage d'Oracle et qui devrait contenir le message SOAP entrant/sortant.

Modifier: Veuillez vérifier this pour getSoapHeader() et getSoapBody() pour déconstruire le message soap. Vous devrez peut-être trouver la même chose pour le wrapper de SOAPMessage d'Oracle.

10

Si message est le SOAPMessage puis procédez comme suit:

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

Maintenant Chaîne msg a le message de savon et vous pouvez l'enregistrer.

Dans votre exemple:

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

Cratyle de réponse est insuffisante lorsque vous ne voulez pas vous connecter les pièces jointes SOAP.

est ici un moyen de se connecter uniquement l'enveloppe:

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