package org.ovirt.engine.api.restapi.logging; import java.io.IOException; import java.io.InputStream; import java.util.List; import java.util.Map.Entry; import javax.ws.rs.ext.Provider; import javax.ws.rs.WebApplicationException; import org.jboss.resteasy.annotations.interception.DecoderPrecedence; import org.jboss.resteasy.annotations.interception.ServerInterceptor; import org.jboss.resteasy.spi.interception.MessageBodyReaderContext; import org.jboss.resteasy.spi.interception.MessageBodyReaderInterceptor; @Provider @ServerInterceptor @DecoderPrecedence public class RequestPayloadLogger extends MessageLogger implements MessageBodyReaderInterceptor { @Override public Object read(MessageBodyReaderContext context) throws IOException, WebApplicationException { InputStream old = context.getInputStream(); if (LOG.isDebugEnabled()) { logHeaders(context); context.setInputStream(new LoggingInputStream(old, LOG)); } try { return context.proceed(); } finally { context.setInputStream(old); } } protected void logHeaders(MessageBodyReaderContext context) { for (Entry<String, List<String>> entry : context.getHeaders().entrySet()) { StringBuilder header = new StringBuilder(entry.getKey()); header.append(":"); for (String value : entry.getValue()) { header.append(value).append(" "); } LOG.debug(header); } } }