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


Reply via email to