/******************************************************************************* * Copyright (c) 2006-2010 eBay Inc. All Rights Reserved. * 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 *******************************************************************************/ package org.ebayopensource.turmeric.runtime.tests.common.jetty; import java.io.IOException; import java.util.Collections; import java.util.List; import java.util.Map; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.lang.SystemUtils; import org.apache.commons.lang.WordUtils; import org.mortbay.jetty.Request; import org.mortbay.log.Log; public class DebugHandler extends org.mortbay.jetty.handler.HandlerWrapper { private static boolean enabled = false; public static void enable() { enabled = true; } public DebugHandler() { super(); DebugHandler.enabled = false; // by default } @Override public void handle(String target, HttpServletRequest request, HttpServletResponse response, int dispatch) throws IOException, ServletException { if(!enabled) { super.handle(target, request, response, dispatch); return; } Log.info(String.format("handle(\"%s\", HttpServletRequest, HttpServletResponse, %d)", target, dispatch)); DebugHttpServletRequest debugRequest = new DebugHttpServletRequest(request); DebugHttpServletResponse debugResponse = new DebugHttpServletResponse(response); try { super.handle(target, debugRequest, debugResponse, dispatch); } finally { logRequest((Request) request); logResponse(debugResponse); } } private void logResponse(DebugHttpServletResponse debugResponse) { String ln = SystemUtils.LINE_SEPARATOR; byte responseBody[] = debugResponse.getCapturedBody(); StringBuilder dbg = new StringBuilder(); dbg.append(ln).append(" Status: ").append(debugResponse.getStatusCode()); dbg.append(ln).append(" Reason: ").append(debugResponse.getStatusReason()); dbg.append(ln).append(" Content-Length: ").append(debugResponse.getContentLength()); Map<String,String> headers = debugResponse.getHeaders(); dbg.append(ln).append(" Headers (").append(headers.size()).append(")"); for(String name: headers.keySet()) { dbg.append(ln).append(" ").append(name).append(": "); dbg.append(headers.get(name)); } dbg.append(ln).append(" Body.length: ").append(responseBody.length); dbg.append(ln).append(WordUtils.wrap(new String(responseBody, 0, responseBody.length), 70)); Log.info("Response: " + dbg.toString()); } private void logRequest(Request request) { String ln = SystemUtils.LINE_SEPARATOR; StringBuilder dbg = new StringBuilder(); dbg.append(ln).append(" Method: ").append(request.getMethod()); dbg.append(ln).append(" Request URI: ").append(request.getRequestURI()); if(request.getQueryString() != null) { dbg.append("?").append(request.getQueryString()); } @SuppressWarnings("unchecked") List<String> headerNames = Collections.list(request.getHeaderNames()); dbg.append(ln).append(" HTTP Request Headers (").append(headerNames.size()).append(")"); for(String name: headerNames) { dbg.append(ln).append(" ").append(name).append(": "); dbg.append(request.getHeader(name)); } @SuppressWarnings("unchecked") List<String> paramNames = Collections.list(request.getParameterNames()); dbg.append(ln).append(" Request Parameters (").append(paramNames.size()).append(")"); for(String name: paramNames) { dbg.append(ln).append(" ").append(name).append(" = "); dbg.append(request.getParameter(name)); } Log.info("Request: " + dbg.toString()); } }