2016-07-11 81 views
0

Hallo ich benutze Frühling ws + slf4j für die Protokollierung. Während Seife Anfrage Anmeldung & Antwort unter propertiesin mit application.propertiesSpring ws Logging-Problem mit SLF4j

logging.level.org.springframework.ws.client.MessageTracing.sent=DEBUG 
logging.level.org.springframework.ws.server.MessageTracing.sent=DEBUG 
logging.level.org.springframework.ws.client.MessageTracing.received=TRACE 
logging.level.org.springframework.ws.server.MessageTracing.received=TRACE 

Statt Protokollierung Anfrage & Antwort darauf folgendes Objekt druckt,

13:13:06.155 [main] DEBUG o.s.ws.client.MessageTracing.sent - Sent request [SaajSoapMessage {http://ws.sample.customer.com/}getCustomerDetails] 
13:13:06.411 [main] DEBUG o.s.w.client.MessageTracing.received - Received response [SaajSoapMessage {http://ws.sample.customer.com/}getCustomerDetailsResponse] for request [SaajSoapMessage {http://ws.sample.customer.com/}getCustomerDetails] 

I webservice mit folgender Weise anzurufenden:

return (JAXBElement) getWebServiceTemplate().marshalSendAndReceive(uri, request, webServiceMessage -> { 
      SoapMessage soapMessage = (SoapMessage) webServiceMessage; 
      Marshaller marshaller = getMarshaller(); 
      marshaller.marshal(jaxbElement, soapMessage.getSoapHeader().getResult()); 
     }); 

Ich weiß nicht, warum es die Anfrage & Antwort nicht druckt. Auch ich habe versucht, die Anfrage & Antwort mit "SoapEnvelopeLoggingInterceptor" oder "ClientInterceptor" abzufangen, aber nichts wird ausgelöst, aber bekam das Antwortobjekt.

public class LogbackInterceptor implements ClientInterceptor { 

private static final Logger logger = LoggerFactory.getLogger(LogbackInterceptor.class); 

public boolean handleRequest(MessageContext messageContext) throws WebServiceClientException { 
     logger.debug("Sent request by sample [" + messageContext.getRequest() + "]"); 
     return true; 
} 

public boolean handleResponse(MessageContext messageContext) throws WebServiceClientException { 
     logger.debug("Received response by sample [" + messageContext.getResponse() + "] for request [" + 
          messageContext.getRequest() + "]"); 
     return true; 
} 

@Override 
public boolean handleFault(MessageContext messageContext) throws WebServiceClientException { 
    // TODO Auto-generated method stub 
    return false; 
} 

@Override 
public void afterCompletion(MessageContext messageContext, Exception ex) throws WebServiceClientException { 
    // TODO Auto-generated method stub 

} 

}

@Component 
public class LoggingInterceptor extends SoapEnvelopeLoggingInterceptor{ 

private static final Logger logger = LoggerFactory.getLogger(LoggingInterceptor.class); 

@Override 
protected void logMessage(String message) { 
    System.out.println("Entered log message"); 
    logger.debug("LoggingInterceptor::logMessage"); 
    logger.debug(message); 
/* Example, here you could be logging to DB or whatever you want */ 
} 
} 

Es wäre toll, wenn jemand mir geholfen, dieses Problem zu beheben

Antwort

1

Schließlich fand ich die Lösung hoffen, sollte es anderen helfen,

Wir sollten registrieren " ClientInterceptor "in WebServiceTemplate wird sonst nicht" ClientInterceptor "ausgelöst. Der unten stehende Code funktioniert wie ein Charm und ich kann nun die AnfrageabfangenAntwort.

WebServiceTemplate webServiceTemplate = getWebServiceTemplate(); 
ClientInterceptor[] interceptors = new ClientInterceptor[1]; 
interceptors[0] = new LogbackInterceptor(); 
webServiceTemplate.setInterceptors(interceptors); 
+0

LogbackInterceptor ist eine Schnittstelle. Wie funktioniert dieser Code? – Ravi