Trace SOAP Anfrage / Antworten mit JAX-WS auf der Client-Seite

Bin ich mit JAX-WS Referenzimplementierung (2.1.7) und ich möchte die Rückverfolgung von SOAP-Anfragen/- Antworten auf die client-Seite. Eigentlich ist das, was ich brauche, ist zu prüfen, einige Http-Header, wenn ich die Antwort erhalten.

Folgende die vorhergehenden Fragen ( Tracing XML request/responses mit JAX-WS und Java JAX-WS-web-service-client: wie log-Anfrage & Antwort-xml? ), ich habe meine eigene handler zu melden, wenn ich eine Anfrage zu senden und eine Antwort zu erhalten:

public class SHandler implements SOAPHandler<SOAPMessageContext>
{

  private static final Logger log = Logger.getLogger(SHandler.class);

  @Nullable
  @Override
  public Set<QName> getHeaders()
  {    
    log.debug(">>>>>>>>>>> GetHeaders");
    return null;    
  }

  @Override
  public boolean handleMessage(SOAPMessageContext soapMessageContext)
  {
    log.debug(">>>>>>>>>>> HandleMessage");
    return true;
  }

  @Override
  public boolean handleFault(SOAPMessageContext soapMessageContext)
  {
    log.debug(">>>>>>>>>>> HandleFault");
    return true;
  }

  @Override
  public void close(MessageContext messageContext)
  {
    log.debug(">>>>>>>>>>> Close");    
  }
}

und ich hinzufügen, dass der handler die handler-Kette während der service-Initialisierung:

@WebServiceClient(name = "MyService", targetNamespace = "http://www.whatever.com/", wsdlLocation = "file:/path/to/wsdl")
public class MyService extends Service
{

    public MyService(URL wsdlLocation) {
        super(...);
        initializeBinding();
    }

    @WebEndpoint(name = "MyOperation")
    public MyPort getMyPort() {
        return super.getPort(new QName("http://www.whatever.com/", "MyPort"), MyPort.class);
    }

    private void initializeBinding() {        
        MyPort port = getMyPort();
        BindingProvider bindingProvider = ((BindingProvider) port);
        List handlerChain = bindingProvider.getBinding().getHandlerChain();
        handlerChain.add(new SHandler());
        bindingProvider.getBinding().setHandlerChain(handlerChain);        
    }

    ...

}

Das problem ist, dass dies überhaupt nicht funktioniert auf der client-Seite. Ich sehe keine logs und mein handler wird nie ausgeführt, wenn ich eine Anfrage zu senden und eine Antwort zu erhalten.

Feststellen, dass es keine spezifischen WSDL-bezogen auf dieses Thema, weil ich auf einem MDA-Plattform, erzeugt die client - /server-Artefakte aus jedem WSDL. Zudem kann ich nicht tun Sie dies in der Konfiguration Ebene wie alle generiert wird, also ich kann nur programmgesteuert (ich habe schon googeln dieses und alle Lösungen, die ich finde, sind entweder in der ursprünglichen oder mit der post handler-chain.xml Konfigurations-Datei).

Bin ich etwas fehlt? Gibt es eine andere Möglichkeit, dies zu tun?

Vielen Dank im Voraus.

InformationsquelleAutor der Frage Denian | 2011-01-19

Schreibe einen Kommentar