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(""");
+ break;
+ case '\'':
+ pOut.append("'");
+ break;
+ case '&':
+ pOut.append("&");
+ break;
+ case '>':
+ pOut.append(">");
+ break;
+ case '<':
+ pOut.append("<");
+ break;
+ case ' ':
+ if (pUseNbsp) {
+ pOut.append(" ");
+ } 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);
+ }
+ }
+ }
+
+}