You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by db...@apache.org on 2012/02/19 04:41:44 UTC

svn commit: r1290935 - in /openejb/trunk/openejb/server/openejb-http/src/main/java/org/apache/openejb/server/httpd: HttpRequestImpl.java HttpResponseImpl.java OpenEJBHttpServer.java

Author: dblevins
Date: Sun Feb 19 03:41:43 2012
New Revision: 1290935

URL: http://svn.apache.org/viewvc?rev=1290935&view=rev
Log:
OPENEJB-1781: Ability to print HTTP messages to System.out for easy debugging

Modified:
    openejb/trunk/openejb/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/HttpRequestImpl.java
    openejb/trunk/openejb/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/HttpResponseImpl.java
    openejb/trunk/openejb/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/OpenEJBHttpServer.java

Modified: openejb/trunk/openejb/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/HttpRequestImpl.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/HttpRequestImpl.java?rev=1290935&r1=1290934&r2=1290935&view=diff
==============================================================================
--- openejb/trunk/openejb/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/HttpRequestImpl.java (original)
+++ openejb/trunk/openejb/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/HttpRequestImpl.java Sun Feb 19 03:41:43 2012
@@ -20,6 +20,7 @@ import javax.servlet.*;
 import javax.servlet.http.Cookie;
 import javax.servlet.http.HttpServletResponse;
 import javax.servlet.http.Part;
+
 import org.apache.openejb.core.security.jaas.UserPrincipal;
 import org.apache.openejb.util.ArrayEnumeration;
 
@@ -292,16 +293,24 @@ public class HttpRequestImpl implements 
 
         parameters.putAll(this.getFormParameters());
         parameters.putAll(this.getQueryParameters());
+    }
 
-        //temp-debug-------------------------------------------
-        // System.out.println("******************* HEADERS ******************");
-        // for (Map.Entry<String, String> entry : headers.entrySet()) {
-        //    System.out.println(entry);
-        // }
-        // System.out.println("**********************************************");
-        // System.out.println(new String(body));
-        // System.out.println("**********************************************");
-        //end temp-debug---------------------------------------
+    public void print(boolean formatXml) {
+
+        System.out.println("******************* REQUEST ******************");
+        System.out.println(method + " "+this.uri);
+        for (Map.Entry<String, String> entry : headers.entrySet()) {
+            System.out.println(entry);
+        }
+        System.out.println();
+
+        final String text = new String(body);
+        if (formatXml && OpenEJBHttpServer.isTextXml(headers)) {
+            System.out.println(OpenEJBHttpServer.reformat(text));
+        } else {
+            System.out.println(text);
+        }
+        System.out.println("**********************************************");
     }
 
     /**

Modified: openejb/trunk/openejb/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/HttpResponseImpl.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/HttpResponseImpl.java?rev=1290935&r1=1290934&r2=1290935&view=diff
==============================================================================
--- openejb/trunk/openejb/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/HttpResponseImpl.java (original)
+++ openejb/trunk/openejb/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/HttpResponseImpl.java Sun Feb 19 03:41:43 2012
@@ -16,6 +16,8 @@
  */
 package org.apache.openejb.server.httpd;
 
+import org.apache.openejb.loader.IO;
+
 import javax.servlet.ServletOutputStream;
 import javax.servlet.http.Cookie;
 import javax.servlet.http.HttpServletResponse;
@@ -343,7 +345,7 @@ public class HttpResponseImpl implements
      * @param output the output to send the response to
      * @throws java.io.IOException if an exception is thrown
      */
-    protected void writeMessage(OutputStream output) throws IOException{
+    protected void writeMessage(OutputStream output, boolean indent) throws IOException{
         ByteArrayOutputStream baos = new ByteArrayOutputStream();
     	DataOutputStream out = new DataOutputStream(baos);
         //DataOutput log = new DataOutputStream(System.out);
@@ -354,7 +356,7 @@ public class HttpResponseImpl implements
 //        writeBody(log);
         writeResponseLine(out);
         writeHeaders(out);
-        writeBody(out);
+        writeBody(out, indent);
         out.flush();
         output.write(baos.toByteArray());
         output.flush();
@@ -450,12 +452,18 @@ public class HttpResponseImpl implements
 
     /** writes the body out to the browser
      * @param out the output stream that writes to the browser
+     * @param indent format xml
      * @throws java.io.IOException if an exception is thrown
      */
-    private void writeBody(DataOutput out) throws IOException{
+    private void writeBody(DataOutput out, boolean indent) throws IOException{
         out.writeBytes(CRLF);
         if (content == null){
-            out.write(sosi.getOutputStream().toByteArray());
+            if (indent && OpenEJBHttpServer.isTextXml(headers)) {
+                final String xml = new String(sosi.getOutputStream().toByteArray());
+                out.write(OpenEJBHttpServer.reformat(xml).getBytes());
+            } else {
+                out.write(sosi.getOutputStream().toByteArray());
+            }
         } else {
             InputStream in = content.getInputStream();
             byte buf[] = new byte[1024];

Modified: openejb/trunk/openejb/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/OpenEJBHttpServer.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/OpenEJBHttpServer.java?rev=1290935&r1=1290934&r2=1290935&view=diff
==============================================================================
--- openejb/trunk/openejb/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/OpenEJBHttpServer.java (original)
+++ openejb/trunk/openejb/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/OpenEJBHttpServer.java Sun Feb 19 03:41:43 2012
@@ -19,15 +19,28 @@ package org.apache.openejb.server.httpd;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
+import java.io.StringWriter;
 import java.net.Socket;
 import java.net.URI;
+import java.util.Map;
 import java.util.Properties;
+import java.util.Set;
 
 import org.apache.openejb.OpenEJBException;
+import org.apache.openejb.loader.IO;
+import org.apache.openejb.loader.Options;
 import org.apache.openejb.loader.SystemInstance;
 import org.apache.openejb.server.ServiceException;
 import org.apache.openejb.util.LogCategory;
 import org.apache.openejb.util.Logger;
+import org.apache.openejb.util.OptionsLog;
+
+import javax.xml.transform.OutputKeys;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerException;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.stream.StreamResult;
+import javax.xml.transform.stream.StreamSource;
 
 /**
  * This is the main class for the web administration.  It takes care of the
@@ -39,6 +52,8 @@ public class OpenEJBHttpServer implement
     private static final Logger log = Logger.getInstance(LogCategory.HTTPSERVER, "org.apache.openejb.util.resources");
 
     private HttpListener listener;
+    private Set<Output> print;
+    private boolean indent;
 
     public OpenEJBHttpServer() {
         this(getHttpListenerRegistry());
@@ -58,6 +73,11 @@ public class OpenEJBHttpServer implement
         this.listener = listener;
     }
 
+    public static boolean isTextXml(Map<String, String> headers) {
+        final String contentType = headers.get("Content-Type");
+        return contentType != null && contentType.contains("text/xml");
+    }
+
     public HttpListener getListener() {
         return listener;
     }
@@ -100,6 +120,15 @@ public class OpenEJBHttpServer implement
     }
 
     public void init(Properties props) throws Exception {
+        final Options options = new Options(props);
+        options.setLogger(new OptionsLog(log));
+        print = options.getAll("print", OpenEJBHttpServer.Output.class);
+        indent = print.size() > 0 && options.get("indent.xml", false);
+
+    }
+
+    public static enum Output {
+        REQUEST, RESPONSE;
     }
 
     public void start() throws ServiceException {
@@ -135,7 +164,10 @@ public class OpenEJBHttpServer implement
             response = HttpResponseImpl.createError(t.getMessage(), t);
         } finally {
             try {
-                response.writeMessage(out);
+                response.writeMessage(out, false);
+                if (print.size() > 0 && print.contains(Output.RESPONSE)) {
+                    response.writeMessage(System.out, indent);
+                }
             } catch (Throwable t2) {
                 log.error("Could not write response", t2);
             }
@@ -149,6 +181,11 @@ public class OpenEJBHttpServer implement
 
         try {
             req.readMessage(in);
+
+            if (print.size() > 0 && print.contains(Output.REQUEST)) {
+                req.print(this.indent);
+            }
+
             res.setRequest(req);
         } catch (Throwable t) {
             res.setCode(400);
@@ -184,4 +221,28 @@ public class OpenEJBHttpServer implement
 
         return res;
     }
+
+
+    public static String reformat(String raw) {
+        if (raw.length() ==0) return raw;
+
+        try {
+            final TransformerFactory factory = TransformerFactory.newInstance();
+            factory.setAttribute("indent-number", 2);
+
+            final Transformer transformer = factory.newTransformer();
+            transformer.setOutputProperty(OutputKeys.INDENT, "yes");
+
+            final StreamResult result = new StreamResult(new StringWriter());
+
+            transformer.transform(new StreamSource(IO.read(raw)), result);
+
+            return result.getWriter().toString();
+        } catch (TransformerException e) {
+            e.printStackTrace();
+            return raw;
+        }
+    }
+
+
 }