/projects/connector-manager/source/java/com/google/enterprise/connector/servlet/ServletDump.java

http://google-enterprise-connector-manager.googlecode.com/ · Java · 128 lines · 82 code · 10 blank · 36 comment · 6 complexity · ee6b52f1c8172ad6965e9c77340e03ad MD5 · raw file

  1. // Copyright 2010 Google Inc.
  2. //
  3. // Licensed under the Apache License, Version 2.0 (the "License");
  4. // you may not use this file except in compliance with the License.
  5. // You may obtain a copy of the License at
  6. //
  7. // http://www.apache.org/licenses/LICENSE-2.0
  8. //
  9. // Unless required by applicable law or agreed to in writing, software
  10. // distributed under the License is distributed on an "AS IS" BASIS,
  11. // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12. // See the License for the specific language governing permissions and
  13. // limitations under the License.
  14. package com.google.enterprise.connector.servlet;
  15. import java.io.IOException;
  16. import java.io.PrintWriter;
  17. import java.io.StringWriter;
  18. import java.util.Enumeration;
  19. import java.util.logging.Level;
  20. import java.util.logging.Logger;
  21. import javax.servlet.http.HttpServletRequest;
  22. import javax.servlet.http.HttpServletResponse;
  23. /**
  24. * Utility to dump servlet request and responts packages in human-
  25. * readable form. Useful for debugging purposes, for instace, as
  26. * called from doTrace().
  27. */
  28. /* Moved out of ServletUtil, to avoid having ServletUtil depend upon
  29. * servlet-api.jar.
  30. */
  31. public class ServletDump {
  32. private static Logger LOGGER =
  33. Logger.getLogger(ServletDump.class.getName());
  34. private ServletDump() {
  35. // Prevent Instantiation.
  36. }
  37. /**
  38. * For Debugging: Write out the HttpServletRequest information.
  39. * This writes an XML stream to the response output that describes
  40. * most of the data received in the request structure. It returns
  41. * true, so that you may call it from doGet() like:
  42. * <code> if (dumpServletRequest(req, res)) return;</code>
  43. * without javac complaining about unreachable code with a straight
  44. * return.
  45. *
  46. * @param req An HttpServletRequest
  47. * @param res An HttpServletResponse
  48. * @return true
  49. */
  50. public static boolean dumpServletRequest(HttpServletRequest req,
  51. HttpServletResponse res) throws IOException {
  52. res.setContentType(ServletUtil.MIMETYPE_XML);
  53. StringWriter stringWriter = new StringWriter();
  54. PrintWriter out = new PrintWriter(stringWriter);
  55. ServletUtil.writeRootTag(out, false);
  56. ServletUtil.writeXMLTag(out, 2, "HttpServletRequest", false);
  57. ServletUtil.writeXMLElement(out, 3, "Method", req.getMethod());
  58. ServletUtil.writeXMLElement(out, 3, "AuthType", req.getAuthType());
  59. ServletUtil.writeXMLElement(out, 3, "ContextPath", req.getContextPath());
  60. ServletUtil.writeXMLElement(out, 3, "PathInfo", req.getPathInfo());
  61. ServletUtil.writeXMLElement(out, 3, "PathTranslated",
  62. req.getPathTranslated());
  63. ServletUtil.writeXMLElement(out, 3, "QueryString", req.getQueryString());
  64. ServletUtil.writeXMLElement(out, 3, "RemoteUser", req.getRemoteUser());
  65. ServletUtil.writeXMLElement(out, 3, "RequestURI", req.getRequestURI());
  66. ServletUtil.writeXMLElement(out, 3, "RequestURL",
  67. req.getRequestURL().toString());
  68. ServletUtil.writeXMLElement(out, 3, "ServletPath", req.getServletPath());
  69. ServletUtil.writeXMLTag(out, 3, "Headers", false);
  70. for (Enumeration<?> names = req.getHeaderNames(); names.hasMoreElements(); ) {
  71. String name = (String)(names.nextElement());
  72. for (Enumeration<?> e = req.getHeaders(name); e.hasMoreElements(); )
  73. ServletUtil.writeXMLElement(out, 4, name, (String)(e.nextElement()));
  74. }
  75. ServletUtil.writeXMLTag(out, 3, "Headers", true);
  76. ServletUtil.writeXMLTag(out, 2, "HttpServletRequest", true);
  77. ServletUtil.writeXMLTag(out, 2, "ServletRequest", false);
  78. ServletUtil.writeXMLElement(out, 3, "Protocol", req.getProtocol());
  79. ServletUtil.writeXMLElement(out, 3, "Scheme", req.getScheme());
  80. ServletUtil.writeXMLElement(out, 3, "ServerName", req.getServerName());
  81. ServletUtil.writeXMLElement(out, 3, "ServerPort",
  82. String.valueOf(req.getServerPort()));
  83. ServletUtil.writeXMLElement(out, 3, "RemoteAddr", req.getRemoteAddr());
  84. ServletUtil.writeXMLElement(out, 3, "RemoteHost", req.getRemoteHost());
  85. Enumeration<?> names;
  86. ServletUtil.writeXMLTag(out, 3, "Attributes", false);
  87. for (names = req.getAttributeNames(); names.hasMoreElements(); ) {
  88. String name = (String)(names.nextElement());
  89. ServletUtil.writeXMLElement(out, 4, name,
  90. req.getAttribute(name).toString());
  91. }
  92. ServletUtil.writeXMLTag(out, 3, "Attributes", true);
  93. ServletUtil.writeXMLTag(out, 3, "Parameters", false);
  94. for (names = req.getParameterNames(); names.hasMoreElements(); ) {
  95. String name = (String)(names.nextElement());
  96. String[] params = req.getParameterValues(name);
  97. for (int i = 0; i < params.length; i++)
  98. ServletUtil.writeXMLElement(out, 4, name, params[i]);
  99. }
  100. ServletUtil.writeXMLTag(out, 3, "Parameters", true);
  101. ServletUtil.writeXMLTag(out, 2, "ServletRequest", true);
  102. ServletUtil.writeRootTag(out, true);
  103. out.close();
  104. String dumpStr = stringWriter.getBuffer().toString();
  105. if (LOGGER.isLoggable(Level.FINE)) {
  106. LOGGER.fine("HttpRequest handled by "
  107. + sun.reflect.Reflection.getCallerClass(2).getName()
  108. + "\ncalled by "
  109. + sun.reflect.Reflection.getCallerClass(3).getName()
  110. + "\n" + dumpStr);
  111. }
  112. // Now stuff it out to the response.
  113. out = res.getWriter();
  114. out.write(dumpStr);
  115. out.close();
  116. return true;
  117. }
  118. }