/** * Copyright 2015 Nortal Licensed under the Apache License, Version 2.0 (the "License"); you may not use * this file except in compliance with the License. You may obtain a copy of the License at * http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, * either express or implied. See the License for the specific language governing permissions and limitations under the * License. **/ package com.nortal.jroad.client.util; import java.io.ByteArrayOutputStream; import java.io.OutputStream; import org.apache.log4j.Logger; import org.springframework.ws.WebServiceMessage; import org.springframework.ws.client.WebServiceClientException; import org.springframework.ws.client.support.interceptor.ClientInterceptor; import org.springframework.ws.context.MessageContext; import org.springframework.ws.soap.saaj.SaajSoapMessage; /** * Simple logging interceptor that logs all the web service invocation results on 'debug' level. * * @author Rando Mihkelsaar * @author Roman Tekhov */ public class WSConsumptionLoggingInterceptor implements ClientInterceptor { private final static Logger log = Logger.getLogger(WSConsumptionLoggingInterceptor.class); private static enum MessageType { REQUEST, RESPONSE, FAULT; } /** * X-tee soap fault messages are different than ordinary SOAP fault messages. */ public boolean handleFault(MessageContext mc) throws WebServiceClientException { return logMessage(mc, MessageType.FAULT); } public boolean handleRequest(MessageContext mc) throws WebServiceClientException { return logMessage(mc, MessageType.REQUEST); } public boolean handleResponse(MessageContext mc) throws WebServiceClientException { return logMessage(mc, MessageType.RESPONSE); } private boolean logMessage(MessageContext mc, MessageType messageType) { if (log.isDebugEnabled()) { WebServiceMessage message = MessageType.REQUEST.equals(messageType) ? mc.getRequest() : mc.getResponse(); if (message instanceof SaajSoapMessage) { OutputStream out = new ByteArrayOutputStream(); try { ((SaajSoapMessage) message).writeTo(out); log.debug(messageType + " message follows:\n" + out.toString()); } catch (Exception e) { throw new RuntimeException(e); } } } return true; } public void afterCompletion(MessageContext arg0, Exception arg1) throws WebServiceClientException {} }