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;
+ }
+ }
+
+
}