human
Suivi des requêtes/réponses XML avec JAX-W
gpt
Voici la solution en code brut :
```Endpoint ep = Endpoint.create(new WebserviceImpl());
List handlerChain = ep.getBinding().getHandlerChain();
handlerChain.add(new SOAPLoggingHandler());
ep.getBinding().setHandlerChain(handlerChain);
ep.publish(publishURL);
```
Où SOAPLoggingHandler est (copié à partir des exemples liés) :
```package com.myfirm.util.logging.ws;
import java.io.PrintStream;
import java.util.Map;
import java.util.Set;
import javax.xml.namespace.QName;
import javax.xml.soap.SOAPMessage;
import javax.xml.ws.handler.MessageContext;
import javax.xml.ws.handler.soap.SOAPHandler;
import javax.xml.ws.handler.soap.SOAPMessageContext;
/*
 * Ce simple SOAPHandler affichera le contenu des messages entrants et sortants.
 */
public class SOAPLoggingHandler implements SOAPHandler {
    // change this to redirect output if desired
    private static PrintStream out = System.out;
    public Set getHeaders() {
        return null;
    }
    public boolean handleMessage(SOAPMessageContext smc) {
        logToSystemOut(smc);
        return true;
    }
    public boolean handleFault(SOAPMessageContext smc) {
        logToSystemOut(smc);
        return true;
    }
    // nothing to clean up
    public void close(MessageContext messageContext) {
    }
    /*
     * Vérifiez la propriété MESSAGE_OUTBOUND_PROPERTY dans le contexte
     * pour voir s'il s'agit d'un message sortant ou entrant.
     * Écrivez un bref message dans le flux d'impression et
     * affichez le message. La méthode writeTo() peut générer
     * une SOAPException ou une IOException
     */
    private void logToSystemOut(SOAPMessageContext smc) {
        Boolean outboundProperty = (Boolean)
            smc.get (MessageContext.MESSAGE_OUTBOUND_PROPERTY);
        if (outboundProperty.booleanValue()) {
            out.println("\nMessage sortant :");
        } else {
            out.println("\nMessage entrant :");
        }
        SOAPMessage message = smc.getMessage();
        try {
            message.writeTo(out);
            out.println("");   // juste pour ajouter une nouvelle ligne
        } catch (Exception e) {
            out.println("Exception dans le gestionnaire : " + e);
        }
    }
}
```