2016-07-11 2 views
0

Привет Я использую весну ws + slf4j для регистрации. При входе запроса мыло & ответ, используя ниже propertiesin application.propertiesПроблема с запасом ws с 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 

Вместо запроса регистрации & ответа печатает следующий объект,

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] 

Я звоню WebService, используя следующий путь:

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

Не знаю, почему он не распечатывает запрос & Ответ. Также я попытался перехватить запрос & с помощью «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

Наконец я нашел решение надеюсь, что он должен помогать другим,

Мы должны зарегистрировать " ClientInterceptor "в WebServiceTemplate, иначе пружина не будет запускать« ClientInterceptor ». Нижеприведенный код работает как шарм, и теперь я могу перехватить запрос &.

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

LogbackInterceptor - это интерфейс. Как работает этот код? – Ravi