You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by jo...@apache.org on 2012/12/07 15:05:15 UTC

svn commit: r1418319 - in /commons/sandbox/jndi/trunk/commons-jndi-browser/src: ./ main/ main/java/ main/java/org/ main/java/org/apache/ main/java/org/apache/commons/ main/java/org/apache/commons/jndi/ main/java/org/apache/commons/jndi/browser/ main/we...

Author: jochen
Date: Fri Dec  7 14:05:13 2012
New Revision: 1418319

URL: http://svn.apache.org/viewvc?rev=1418319&view=rev
Log: (empty)

Added:
    commons/sandbox/jndi/trunk/commons-jndi-browser/src/
    commons/sandbox/jndi/trunk/commons-jndi-browser/src/main/
    commons/sandbox/jndi/trunk/commons-jndi-browser/src/main/java/
    commons/sandbox/jndi/trunk/commons-jndi-browser/src/main/java/org/
    commons/sandbox/jndi/trunk/commons-jndi-browser/src/main/java/org/apache/
    commons/sandbox/jndi/trunk/commons-jndi-browser/src/main/java/org/apache/commons/
    commons/sandbox/jndi/trunk/commons-jndi-browser/src/main/java/org/apache/commons/jndi/
    commons/sandbox/jndi/trunk/commons-jndi-browser/src/main/java/org/apache/commons/jndi/browser/
    commons/sandbox/jndi/trunk/commons-jndi-browser/src/main/java/org/apache/commons/jndi/browser/JndiBrowserHelper.java
    commons/sandbox/jndi/trunk/commons-jndi-browser/src/main/java/org/apache/commons/jndi/browser/JndiBrowserServlet.java
    commons/sandbox/jndi/trunk/commons-jndi-browser/src/main/java/org/apache/commons/jndi/browser/MultiplexingOutputStream.java
    commons/sandbox/jndi/trunk/commons-jndi-browser/src/main/java/org/apache/commons/jndi/browser/Strings.java
    commons/sandbox/jndi/trunk/commons-jndi-browser/src/main/webapp/
    commons/sandbox/jndi/trunk/commons-jndi-browser/src/main/webapp/WEB-INF/
    commons/sandbox/jndi/trunk/commons-jndi-browser/src/main/webapp/WEB-INF/web.xml
    commons/sandbox/jndi/trunk/commons-jndi-browser/src/test/
    commons/sandbox/jndi/trunk/commons-jndi-browser/src/test/java/
    commons/sandbox/jndi/trunk/commons-jndi-browser/src/test/java/org/
    commons/sandbox/jndi/trunk/commons-jndi-browser/src/test/java/org/apache/
    commons/sandbox/jndi/trunk/commons-jndi-browser/src/test/java/org/apache/commons/
    commons/sandbox/jndi/trunk/commons-jndi-browser/src/test/java/org/apache/commons/jndi/
    commons/sandbox/jndi/trunk/commons-jndi-browser/src/test/java/org/apache/commons/jndi/browser/
    commons/sandbox/jndi/trunk/commons-jndi-browser/src/test/java/org/apache/commons/jndi/browser/JndiBrowserTest.java

Added: commons/sandbox/jndi/trunk/commons-jndi-browser/src/main/java/org/apache/commons/jndi/browser/JndiBrowserHelper.java
URL: http://svn.apache.org/viewvc/commons/sandbox/jndi/trunk/commons-jndi-browser/src/main/java/org/apache/commons/jndi/browser/JndiBrowserHelper.java?rev=1418319&view=auto
==============================================================================
--- commons/sandbox/jndi/trunk/commons-jndi-browser/src/main/java/org/apache/commons/jndi/browser/JndiBrowserHelper.java (added)
+++ commons/sandbox/jndi/trunk/commons-jndi-browser/src/main/java/org/apache/commons/jndi/browser/JndiBrowserHelper.java Fri Dec  7 14:05:13 2012
@@ -0,0 +1,188 @@
+package org.apache.commons.jndi.browser;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.OutputStreamWriter;
+import java.io.PrintWriter;
+import java.lang.reflect.UndeclaredThrowableException;
+import java.util.Properties;
+
+import javax.naming.Binding;
+import javax.naming.Context;
+import javax.naming.InitialContext;
+import javax.naming.NamingEnumeration;
+import javax.naming.NamingException;
+import javax.naming.spi.NamingManager;
+import javax.servlet.http.HttpServletRequest;
+
+public class JndiBrowserHelper {
+	private String ctxFactory;
+	private String providerURL;
+	private String properties;
+	private String initialization;
+	private Properties env;
+	private Throwable th;
+	private Context javaEnvCtx;
+
+	public JndiBrowserHelper(HttpServletRequest pRequest) {
+		if (pRequest != null) {
+			ctxFactory = Strings.notNull(pRequest.getParameter("context-factory"), System.getProperty(Context.INITIAL_CONTEXT_FACTORY));
+			providerURL = Strings.notNull(pRequest.getParameter("provider-url"), System.getProperty(Context.PROVIDER_URL));
+			properties = pRequest.getParameter("properties");
+			initialization = pRequest.getParameter("initialization");
+			if (Strings.isEmpty(initialization)) {
+				initialization = "NamingManager";
+			}
+		}
+	}
+
+	public Context getInitialContext() {
+		Context ctx = null;
+		try {
+			env = new Properties();
+			if (properties != null  &&  properties.trim().length() > 0) {
+				final byte[] propBytes = properties.getBytes("ISO-8859-1");
+				ByteArrayInputStream bais = new ByteArrayInputStream(propBytes);
+				env.load(bais);
+				bais.close();
+			} 
+			if (!Strings.isTrimmedEmpty(ctxFactory)) {
+				env.put(Context.INITIAL_CONTEXT_FACTORY, ctxFactory.trim());
+			}
+			if (!Strings.isTrimmedEmpty(providerURL)) {
+				env.put(Context.PROVIDER_URL, providerURL.trim());
+			}
+			if ("NamingManager".equals(initialization)) {
+				ctx = NamingManager.getInitialContext(env);
+			} else if ("InitialContext".equals(initialization)) {
+				ctx = new InitialContext(env);
+			} else {
+				ctx = NamingManager.getInitialContext(env);
+			}
+			if (ctx != null) {
+				javaEnvCtx = (Context) ctx.lookup("java:comp/env");
+			}
+		} catch (RuntimeException e) {
+			th = e;
+			throw e;
+		} catch (Error e) {
+			th = e;
+			throw e;
+		} catch (Throwable t) {
+			th = t;
+			throw new UndeclaredThrowableException(t);
+		}
+		return ctx;		
+	}
+
+
+	public void showState(OutputStream pStream, Context pContext, String pUri) throws IOException, NamingException {
+		final OutputStreamWriter osw = new OutputStreamWriter(pStream, "UTF8");
+		final PrintWriter ps = new PrintWriter(osw);
+		ps.println("<html><head><title>JNDI Browser</title>");
+		ps.println("<meta http-equiv='Content-Type' content='text/html; charset=utf-8'></head>");
+		ps.println("<body><h1>JNDI Browser</h1>");
+		ps.println("<form action=\"" + pUri + "\" method=\"post\">");
+		ps.println("  <table border='1'>");
+		final String namingManagerLink = link("http://docs.oracle.com/javase/6/docs/api/javax/naming/spi/NamingManager.html#getInitialContext%28java.util.Hashtable%29",
+											  "NamingManager.getInitialContext(Hashtable)");
+		final String initialContextLink = link("http://docs.oracle.com/javase/6/docs/api/javax/naming/InitialContext.html#InitialContext%28java.util.Hashtable%29",
+				                               "new InitialContext(Hashtable)");
+		tableRow(ps, "Initialization",
+				radio("initialization", "NamingManager", initialization, namingManagerLink) +
+				radio("initialization", "InitialContext", initialization, initialContextLink));
+		tableRow(ps, "Initial Context Factory",
+				"<input type='text' name='context-factory' value='" +
+				        (ctxFactory == null ? "" : Strings.asHtml(ctxFactory)) + "'></input>");
+		tableRow(ps, "Provider URL:",
+				"<input type='text' name='context-factory' value='" +
+				        (providerURL == null ? "" :Strings.asHtml(providerURL)) + "'></input>");
+		if (env != null) {
+			env.remove(Context.INITIAL_CONTEXT_FACTORY);
+			env.remove(Context.PROVIDER_URL);
+			tableRow(ps, "Properties:",
+					 "<textarea name='properties'>"
+					+ asString(env) + "</textarea>");
+		}
+		if (th != null) {
+			tableRow(ps, "Error:",
+					"<div style='color: red'><pre>"
+			         + Strings.asHtml(Strings.asString(th))
+			         + "</pre></div>");
+		}
+		ps.println("</table>");
+		ps.println("<input type='submit' value='Retry'></form>");
+		if (pContext != null) {
+			ps.print("<pre>");
+			ps.println(asHtml(pContext, "/", ""));
+			ps.println("</pre>");
+		}
+		if (javaEnvCtx != null) {
+			ps.println(asHtml(javaEnvCtx, "java:comp/env", ""));
+		}
+		ps.println("</body></html>");
+		ps.flush();
+	}
+
+	private void tableRow(PrintWriter pStream, String pHeader, String pData) {
+		pStream.print("  <tr><th>");
+		pStream.print(pHeader);
+		pStream.print("</th><td>");
+		pStream.print(pData);
+		pStream.println("</td></tr>");
+	}
+
+	private String asString(Properties pProperties) throws IOException {
+		if (pProperties.isEmpty()) {
+			return "";
+		}
+		final ByteArrayOutputStream baos = new ByteArrayOutputStream();
+		final Properties props = new Properties();
+		props.putAll(env);
+		props.store(baos, null);
+		final String s = baos.toString("ISO-8859-1");
+		return Strings.asHtml(s);
+	}
+	
+	private String asHtml(Context pContext, String pName, String pIndent) throws NamingException {
+		final StringBuilder sb = new StringBuilder();
+		sb.append(pIndent);
+		if (pContext == null) {
+			sb.append(pName + "  null<br>");
+		} else {
+			sb.append(pName + " " + pContext.getClass().getName() + "<br>");
+			final NamingEnumeration<Binding> en = pContext.listBindings("");
+			sb.append(pIndent + "+<br>");
+			while(en.hasMoreElements()) {
+				final Binding o = en.nextElement();
+				sb.append(pIndent + "|");
+				if ( o == null) {
+					sb.append(null+ "<br>");
+				} else if (o.getObject() == null) {
+					sb.append(o.getName() + " null<br>");
+				} else if (o.getObject() instanceof Context) {
+					sb.append(asHtml((Context) o.getObject(), o.getName(), pIndent + "  "));
+				} else {
+					sb.append(o.getName()+ " " + o.getObject().getClass().getName() + "<br>");
+				}
+				sb.append(o == null ? "null" : o.getClass().getName() + "<br>");
+			}
+			sb.append(pIndent + "-<br>");
+		}
+		return sb.toString();
+	}
+
+	private String link(String pUrl, String pValue) {
+		return "<a href=\"" + pUrl + "\">" + pValue + "</a>";
+	}
+
+	private String radio(String pName, String pValue, String pCurrentValue, String pDescription) {
+		return "<input type=\"radio\" name=\"" + pName
+			+ "\" value=\"" + pValue
+		    +  "\" checked=\""
+			+ (pValue.equals(pCurrentValue) ? "checked" : "")
+		    + "\">" + pDescription + "<br>";
+	}
+}

Added: commons/sandbox/jndi/trunk/commons-jndi-browser/src/main/java/org/apache/commons/jndi/browser/JndiBrowserServlet.java
URL: http://svn.apache.org/viewvc/commons/sandbox/jndi/trunk/commons-jndi-browser/src/main/java/org/apache/commons/jndi/browser/JndiBrowserServlet.java?rev=1418319&view=auto
==============================================================================
--- commons/sandbox/jndi/trunk/commons-jndi-browser/src/main/java/org/apache/commons/jndi/browser/JndiBrowserServlet.java (added)
+++ commons/sandbox/jndi/trunk/commons-jndi-browser/src/main/java/org/apache/commons/jndi/browser/JndiBrowserServlet.java Fri Dec  7 14:05:13 2012
@@ -0,0 +1,49 @@
+package org.apache.commons.jndi.browser;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+
+import javax.naming.Context;
+import javax.naming.NamingException;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+public class JndiBrowserServlet extends HttpServlet {
+	private static final long serialVersionUID = 787657L;
+
+	@Override
+	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
+			throws ServletException, IOException {
+		doGet(req, resp);
+	}
+
+	@Override
+	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
+			throws ServletException, IOException {
+		final JndiBrowserHelper helper = new JndiBrowserHelper(req);
+		Context ctx1 = null;
+		try {
+			ctx1 = helper.getInitialContext();
+		} catch (Throwable t) {
+			log(t.getMessage(), t);
+		}
+		resp.setContentType("text/html; charset=ISO-8859-1");
+		resp.setCharacterEncoding("UTF8");
+		try {
+			final ByteArrayOutputStream baos = new ByteArrayOutputStream();
+			OutputStream os = resp.getOutputStream();
+			helper.showState(baos, ctx1, Strings.notNull(req.getRequestURI(), "."));
+			resp.flushBuffer();
+			baos.writeTo(os);
+			baos.writeTo(System.out);
+			os.close();
+		} catch (NamingException e) {
+			throw new ServletException(e);
+		} catch (IOException e) {
+			throw new ServletException(e);
+		}
+	}
+}

Added: commons/sandbox/jndi/trunk/commons-jndi-browser/src/main/java/org/apache/commons/jndi/browser/MultiplexingOutputStream.java
URL: http://svn.apache.org/viewvc/commons/sandbox/jndi/trunk/commons-jndi-browser/src/main/java/org/apache/commons/jndi/browser/MultiplexingOutputStream.java?rev=1418319&view=auto
==============================================================================
--- commons/sandbox/jndi/trunk/commons-jndi-browser/src/main/java/org/apache/commons/jndi/browser/MultiplexingOutputStream.java (added)
+++ commons/sandbox/jndi/trunk/commons-jndi-browser/src/main/java/org/apache/commons/jndi/browser/MultiplexingOutputStream.java Fri Dec  7 14:05:13 2012
@@ -0,0 +1,65 @@
+package org.apache.commons.jndi.browser;
+
+import java.io.IOException;
+import java.io.OutputStream;
+
+public class MultiplexingOutputStream extends OutputStream {
+	private final OutputStream[] targets;
+
+	public MultiplexingOutputStream(OutputStream[] pTargets) {
+		super();
+		targets = pTargets;
+	}
+
+
+
+
+	@Override
+	public void write(int b) throws IOException {
+		for (OutputStream os : targets) {
+			os.write(b);
+		}
+	}
+
+
+
+
+	@Override
+	public void write(byte[] buf) throws IOException {
+		for (OutputStream os : targets) {
+			os.write(buf);
+		}
+	}
+
+
+
+
+	@Override
+	public void write(byte[] buf, int off, int len) throws IOException {
+		for (OutputStream os : targets) {
+			os.write(buf, off, len);
+		}
+	}
+
+
+
+
+	@Override
+	public void flush() throws IOException {
+		for (OutputStream os : targets) {
+			os.flush();
+		}
+	}
+
+
+
+
+	@Override
+	public void close() throws IOException {
+		for (OutputStream os : targets) {
+			os.close();
+		}
+	}
+
+	
+}

Added: commons/sandbox/jndi/trunk/commons-jndi-browser/src/main/java/org/apache/commons/jndi/browser/Strings.java
URL: http://svn.apache.org/viewvc/commons/sandbox/jndi/trunk/commons-jndi-browser/src/main/java/org/apache/commons/jndi/browser/Strings.java?rev=1418319&view=auto
==============================================================================
--- commons/sandbox/jndi/trunk/commons-jndi-browser/src/main/java/org/apache/commons/jndi/browser/Strings.java (added)
+++ commons/sandbox/jndi/trunk/commons-jndi-browser/src/main/java/org/apache/commons/jndi/browser/Strings.java Fri Dec  7 14:05:13 2012
@@ -0,0 +1,117 @@
+package org.apache.commons.jndi.browser;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import java.lang.reflect.UndeclaredThrowableException;
+
+/** Utility class providing static helper methods.
+ */
+public class Strings {
+	/* Private constructor, to prevent accidental instantiation.
+	 */
+	private Strings() {
+		// Does nothing.
+	}
+
+	/** Returns the string @pString, if not null, otherwise @pDefault.
+	 * @param pString The string to check for null, or not null.
+	 * @param pDefault The default value to return, if pString is null.
+	 * @return Returns @pDefault, if @pString is null. Returns @pString
+	 *   otherwise.
+	 */
+	public static String notNull(String pString, String pDefault) {
+		return pString == null ? pDefault : pString;
+	}
+
+	/** Checks, whether the given string is null, or empty.
+	 * @param pValue
+	 * @return True, if @pValue is null, or the empty string. Returns
+	 *   false otherwise.
+	 */
+	public static boolean isEmpty(String pValue) {
+		return pValue == null  ||  pValue.length() > 0;
+	}
+
+	/** Checks, whether the given string is null, or empty (after
+	 * trimming).
+	 * @param pValue
+	 * @return True, if @pValue is null, or the empty string (after
+	 *   trimming). Returns false otherwise.
+	 */
+	public static boolean isTrimmedEmpty(String pValue) {
+		return pValue == null  ||  pValue.trim().length() > 0;
+	}
+
+	public static String asHtml(String pValue) {
+		final StringBuilder sb = new StringBuilder();
+		try {
+			toHtml(sb, pValue, "&'\"><", false, false);
+		} catch (IOException e) {
+			throw new UndeclaredThrowableException(e);
+		}
+		return sb.toString();
+	}
+
+	public static void toHtml(Appendable pOut, String pValue, String pCharsToConvert, boolean pUseNbsp,
+			boolean pUseBr) throws IOException {
+		if (pOut == null)
+            throw new IllegalArgumentException("The output must not be null.");
+        if (pValue == null) {
+            pOut.append("null");
+        }
+        for (int i = 0;  i < pValue.length();  i++) {
+            char c = pValue.charAt(i);
+            if (pCharsToConvert.indexOf(c) != -1) {
+            	switch (c) {
+	                case '"':
+	                    pOut.append("&quot;");
+	                    break;
+	                case '\'':
+	                    pOut.append("&#39;");
+	                    break;
+	                case '&':
+	                    pOut.append("&amp;");
+	                    break;
+	                case '>':
+	                    pOut.append("&gt;");
+	                    break;
+	                case '<':
+	                    pOut.append("&lt;");
+	                    break;
+	                case ' ':
+	                    if (pUseNbsp) {
+	                        pOut.append("&nbsp;");
+	                    } else {
+	                        pOut.append(c);
+	                    }
+	                    break;
+	                case '\n':
+	                    if (pUseBr) {
+	                        pOut.append("<br></br>\n");
+	                    } else {
+	                        pOut.append(c);
+	                    }
+	                    break;
+	                default:
+	                	pOut.append(c);
+	                	break;
+            	}
+            } else {
+            	pOut.append(c);
+            }
+        }
+	}
+
+	/** Returns the given exceptions stack trace as a string.
+	 * @param pThr The exception to convert into a stack trace.
+	 * @return
+	 */
+	public static String asString(Throwable pThr) {
+		final StringWriter sw = new StringWriter();
+		final PrintWriter pw = new PrintWriter(sw);
+		pThr.printStackTrace(pw);
+		pw.close();
+		return sw.toString();
+	}
+}

Added: commons/sandbox/jndi/trunk/commons-jndi-browser/src/main/webapp/WEB-INF/web.xml
URL: http://svn.apache.org/viewvc/commons/sandbox/jndi/trunk/commons-jndi-browser/src/main/webapp/WEB-INF/web.xml?rev=1418319&view=auto
==============================================================================
--- commons/sandbox/jndi/trunk/commons-jndi-browser/src/main/webapp/WEB-INF/web.xml (added)
+++ commons/sandbox/jndi/trunk/commons-jndi-browser/src/main/webapp/WEB-INF/web.xml Fri Dec  7 14:05:13 2012
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<!DOCTYPE web-app
+    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
+    "http://java.sun.com/dtd/web-app_2_3.dtd">
+
+<web-app id="WebApp_1213263339424">
+  <display-name>xDWS</display-name>
+
+    <servlet>
+        <servlet-name>JndiBrowserServlet</servlet-name>
+        <servlet-class>jndi.tomcat.demo.JndiBrowserServlet</servlet-class>
+    </servlet>
+
+	<servlet-mapping>
+		<servlet-name>JndiBrowserServlet</servlet-name>
+		<url-pattern>/jndi</url-pattern>
+	</servlet-mapping>
+
+    <resource-ref>
+      <description>DB Connection</description>
+      <res-ref-name>jdbc/xdws</res-ref-name>
+      <res-type>javax.sql.DataSource</res-type>
+      <res-auth>Container</res-auth>
+    </resource-ref>
+</web-app>

Added: commons/sandbox/jndi/trunk/commons-jndi-browser/src/test/java/org/apache/commons/jndi/browser/JndiBrowserTest.java
URL: http://svn.apache.org/viewvc/commons/sandbox/jndi/trunk/commons-jndi-browser/src/test/java/org/apache/commons/jndi/browser/JndiBrowserTest.java?rev=1418319&view=auto
==============================================================================
--- commons/sandbox/jndi/trunk/commons-jndi-browser/src/test/java/org/apache/commons/jndi/browser/JndiBrowserTest.java (added)
+++ commons/sandbox/jndi/trunk/commons-jndi-browser/src/test/java/org/apache/commons/jndi/browser/JndiBrowserTest.java Fri Dec  7 14:05:13 2012
@@ -0,0 +1,27 @@
+package org.apache.commons.jndi.browser;
+import java.io.InputStream;
+import java.net.HttpURLConnection;
+import java.net.URL;
+
+
+public class JndiBrowserTest {
+
+	/**
+	 * @param args
+	 */
+	public static void main(String[] args) throws Exception {
+		final URL url = new URL("http://127.0.0.1:8080/xdws/jndi");
+		final HttpURLConnection conn = (HttpURLConnection) url.openConnection();
+		final InputStream is = conn.getInputStream();
+		final byte[] buffer = new byte[4096];
+		for (;;) {
+			int res = is.read(buffer);
+			if (res == -1) {
+				break;
+			} else if ( res > 0) {
+				System.out.write(buffer, 0, res);
+			}
+		}
+	}
+
+}