2010-10-19 7 views
0

J'utilise Apache CXF pour mes services Web. J'ai créé une instance de AbstractSoapInterceptor. Dans sa méthode public void handleMessage(SoapMessage message) throws Fault, je voudrais imprimer le contenu XML du message intercepté à la console. Comment puis-je y parvenir?Impression du contenu XML du message SOAP

Répondre

8

Vérifiez this et recherchez INTERCEPTEUR INBOUND. Placerons ici pour référence ...

public class InterceptorMensajeSOAPIn extends AbstractSoapInterceptor { 

     private static Logger log = 
Logger.getLogger(InterceptorMensajeSOAPIn.class); 



     private SAAJInInterceptor saajIn = new SAAJInInterceptor(); 

     public InterceptorMensajeSOAPIn(){ 

      super(Phase.PRE_PROTOCOL); 

      getAfter().add(SAAJInInterceptor.class.getName()); 

     } 


     public void handleMessage(SoapMessage message) throws Fault { 

     SOAPMessage soapMessage = getSOAPMessage(message); 

     try { 

        soapMessage.writeTo(System.out); 

      } catch (Exception e) { 

        e.printStackTrace(); 

      } 
     } 


     private SOAPMessage getSOAPMessage(SoapMessage smsg){ 

      SOAPMessage soapMessage = smsg.getContent(SOAPMessage.class); 

     if (soapMessage == null) { 

      saajIn.handleMessage(smsg); 

      soapMessage = smsg.getContent(SOAPMessage.class); 

     } 

     return soapMessage; 

     } 
} 
+1

Est-ce que cette solution fonctionne avec 3.x CxF? Je l'ai essayé et l'appel à getContent renvoie toujours null, mais peut-être que je fais quelque chose d'autre faux ou l'API a changé dans 3.0. – bwfrieds

2

une raison quelconque vous ne pouvez pas utiliser le LoggingInInterceptor livré avec CXF? Vous pouvez simplement saisir le code pour cela et l'utiliser comme base, mais dans la version 2.3, le LoggingInInterceptor a été amélioré pour permettre de spécifier un flux d'impression et une telle utilisation, de sorte qu'il pourrait "juste fonctionner".

1

Vous pouvez également utiliser une fonction pour cela: org.apache.cxf.feature.LoggingFeature:

<jaxws:endpoint ...> 
    <jaxws:features> 
     <bean class="org.apache.cxf.feature.LoggingFeature"/> 
    </jaxws:features> 
</jaxws:endpoint> 
Questions connexes