2016-07-11 20 views
0

こんにちは私は、ロギングにspring ws + slf4jを使用しています。SLF4jを使用したSpring wsログの問題

return (JAXBElement) getWebServiceTemplate().marshalSendAndReceive(uri, request, webServiceMessage -> { 
      SoapMessage soapMessage = (SoapMessage) webServiceMessage; 
      Marshaller marshaller = getMarshaller(); 
      marshaller.marshal(jaxbElement, soapMessage.getSoapHeader().getResult()); 
     }); 
:SOAP要求をログに記録しながらpropertiesinの下に使用して&応答は、代わりにそれは私が次の方法を使用してWebサービスを呼び出しています

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] 

、次のオブジェクトを印刷し、ロギング要求&応答の

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 

をapplication.properties

私はなぜそれが要求&応答を印刷していないのかわかりません。また、 "SoapEnvelopeLoggingInterceptor"または "ClientInterceptor"を使用して応答&を傍受しようとしましたが、何もトリガーされませんが応答オブジェクトを取得しました。

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 */ 
} 
} 

誰かがこの問題に

答えて

1

を解決するために私を助けた。最後に、私は解決策は、 "我々は、登録すべき

、それは他の人を助けるべき願っていた場合、それは素晴らしいことですWebServiceTemplateで "ClientInterceptor"を呼び出す必要があります。それ以外の場合、Springは "ClientInterceptor"をトリガーしません。以下のコードは魅力的に機能し、今はリクエストを傍受することができます&の応答。

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

LogbackInterceptorはインターフェイスです。このコードはどのように機能していますか? – Ravi

関連する問題