You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by fm...@apache.org on 2008/02/28 13:42:51 UTC

svn commit: r631943 - /incubator/sling/trunk/sling/servlet-resolver/src/main/java/org/apache/sling/servlet/resolver/defaults/DefaultServlet.java

Author: fmeschbe
Date: Thu Feb 28 04:42:50 2008
New Revision: 631943

URL: http://svn.apache.org/viewvc?rev=631943&view=rev
Log:
SLING-287 Cut down DefaultServlet to send a 404/NOT FOUND in case the URL
does not address a resource or 500/INTERNAL SERVER ERROR if no servlet
can be resolved to handle the resource

Modified:
    incubator/sling/trunk/sling/servlet-resolver/src/main/java/org/apache/sling/servlet/resolver/defaults/DefaultServlet.java

Modified: incubator/sling/trunk/sling/servlet-resolver/src/main/java/org/apache/sling/servlet/resolver/defaults/DefaultServlet.java
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/sling/servlet-resolver/src/main/java/org/apache/sling/servlet/resolver/defaults/DefaultServlet.java?rev=631943&r1=631942&r2=631943&view=diff
==============================================================================
--- incubator/sling/trunk/sling/servlet-resolver/src/main/java/org/apache/sling/servlet/resolver/defaults/DefaultServlet.java (original)
+++ incubator/sling/trunk/sling/servlet-resolver/src/main/java/org/apache/sling/servlet/resolver/defaults/DefaultServlet.java Thu Feb 28 04:42:50 2008
@@ -19,30 +19,15 @@
 package org.apache.sling.servlet.resolver.defaults;
 
 import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.io.PrintWriter;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.Properties;
-import java.util.TreeMap;
 
-import javax.jcr.Node;
-import javax.jcr.RepositoryException;
 import javax.servlet.ServletException;
 import javax.servlet.http.HttpServletResponse;
 
-import org.apache.commons.beanutils.BeanMap;
 import org.apache.sling.api.SlingHttpServletRequest;
 import org.apache.sling.api.SlingHttpServletResponse;
 import org.apache.sling.api.resource.NonExistingResource;
 import org.apache.sling.api.resource.Resource;
-import org.apache.sling.api.resource.ResourceMetadata;
 import org.apache.sling.api.servlets.SlingSafeMethodsServlet;
-import org.apache.sling.commons.json.JSONException;
-import org.apache.sling.commons.json.jcr.JsonItemWriter;
 
 /**
  * The <code>DefaultServlet</code> is a very simple default resource handler.
@@ -52,221 +37,20 @@
  */
 public class DefaultServlet extends SlingSafeMethodsServlet {
 
-    /** This optional request parameter sets the recursion level
-     *  (into chldren) when dumping a node */
-    public static final String PARAM_RECURSION_LEVEL = "maxlevels";
-
     @Override
     protected void doGet(SlingHttpServletRequest request,
-            SlingHttpServletResponse response) throws ServletException,
-            IOException {
+            SlingHttpServletResponse response) throws IOException {
 
         Resource resource = request.getResource();
 
         // cannot handle the request for missing resources
         if (resource instanceof NonExistingResource) {
-            response.sendError(HttpServletResponse.SC_NOT_FOUND,"Resource not found at path " + resource.getPath());
-            return;
-        }
-
-        String extension = request.getRequestPathInfo().getExtension();
-
-        // check whether we have a directly addressed script
-        if (extension == null) {
-
-            // check whether the resource adapts to a stream, spool then
-            InputStream stream = resource.adaptTo(InputStream.class);
-            if (stream != null) {
-                stream(response, resource, stream);
-                return;
-            }
-
-        }
-
-        // format response according to extension (use Mime mapping instead)
-        if ("html".equals(extension) || "htm".equals(extension)) {
-            this.renderContentHtml(resource, response);
-        } else if ("xml".equals(extension)) {
-            this.renderContentXML(resource, response);
-        } else if ("properties".equals(extension)) {
-            this.renderContentProperties(resource, response);
-        } else if ("json".equals(extension)) {
-            this.renderContentJson(resource, request, response);
+            response.sendError(HttpServletResponse.SC_NOT_FOUND,
+                "Resource not found at path " + resource.getPath());
         } else {
-            // default rendering as plain text
-            this.renderContentText(resource, response);
-        }
-    }
-
-    private void renderContentHtml(Resource resource,
-            SlingHttpServletResponse response) throws IOException {
-        Map<Object, Object> contentMap = new TreeMap<Object, Object>(
-            this.asMap(resource));
-
-        response.setContentType("text/html; charset=UTF-8");
-        PrintWriter pw = response.getWriter();
-
-        pw.println("<html><head><title>");
-        pw.println(resource.getPath());
-        pw.println("</title></head><body bgcolor='white' fgcolor='black'>");
-        pw.println("<h1>Contents of <code>" + resource.getPath()
-            + "</code></h1>");
-
-        pw.println("<table>");
-        pw.println("<tr><th>name</th><th>Value</th></tr>");
-
-        for (Map.Entry<Object, Object> entry : contentMap.entrySet()) {
-            pw.println("<tr><td>" + entry.getKey() + "</td><td>"
-                + entry.getValue() + "</td></tr>");
-        }
-
-        pw.println("</body></html>");
-    }
-
-    private void renderContentText(Resource resource,
-            SlingHttpServletResponse response) throws IOException {
-        Map<Object, Object> contentMap = new TreeMap<Object, Object>(
-            this.asMap(resource));
-
-        response.setContentType("text/plain; charset=UTF-8");
-        PrintWriter pw = response.getWriter();
-
-        pw.println("Contents of " + resource.getPath());
-        pw.println();
-
-        for (Map.Entry<Object, Object> entry : contentMap.entrySet()) {
-            pw.println(entry.getKey() + ": " + entry.getValue());
-        }
-    }
-
-    private void renderContentProperties(Resource resource,
-            SlingHttpServletResponse response) throws IOException {
-        Properties props = new Properties();
-
-        Map<Object, Object> contentMap = new TreeMap<Object, Object>(
-            this.asMap(resource));
-        for (Map.Entry<Object, Object> entry : contentMap.entrySet()) {
-            props.setProperty(String.valueOf(entry.getKey()),
-                String.valueOf(entry.getValue()));
-        }
-
-        response.setContentType("text/plain; charset=ISO-8859-1");
-
-        OutputStream out = response.getOutputStream();
-        props.store(out, "Contents of " + resource.getPath());
-    }
-
-    private void renderContentXML(Resource resource,
-            SlingHttpServletResponse response) throws IOException {
-        Map<Object, Object> contentMap = new TreeMap<Object, Object>(
-            this.asMap(resource));
-
-        response.setContentType("text/xml; charset=UTF-8");
-        PrintWriter pw = response.getWriter();
-
-        pw.println("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
-        pw.println("<content>");
-
-        for (Map.Entry<Object, Object> entry : contentMap.entrySet()) {
-
-            pw.println("  <property>");
-            pw.println("    <name>" + entry.getKey() + "</name>");
-
-            if (entry.getValue() instanceof Collection) {
-                pw.println("    <values>");
-                Collection<?> coll = (Collection<?>) entry.getValue();
-                for (Iterator<?> ci = coll.iterator(); ci.hasNext();) {
-                    pw.println("      <value>" + ci.next() + "</value>");
-                }
-                pw.println("    </values>");
-
-            } else {
-                pw.println("    <value>" + entry.getValue() + "</value>");
-            }
-            pw.println("  </property>");
-        }
-
-        pw.println("</content>");
-    }
-
-    private void renderContentJson(Resource resource,
-            SlingHttpServletRequest request,
-            SlingHttpServletResponse response) throws IOException {
-        // how many levels deep?
-        int maxRecursionLevels = 1;
-        if (request.getRequestPathInfo().getSelectors().length > 0) {
-            try {
-                maxRecursionLevels = Integer.parseInt(request.getRequestPathInfo().getSelectors()[0]);
-            } catch(Exception e) {
-                // TODO ignore
-            }
-        }
-
-        response.setContentType("text/x-json");
-        response.setCharacterEncoding("UTF-8");
-        final PrintWriter pw = response.getWriter();
-        final JsonItemWriter itemWriter = new JsonItemWriter(null);
-        try {
-            final Node node =resource.adaptTo(Node.class);
-            if ( node != null ) {
-                itemWriter.dump(node, pw, maxRecursionLevels);
-            }
-        } catch(JSONException je) {
-            throw new IOException(je.getMessage());
-        } catch(RepositoryException re) {
-            throw new IOException(re.getMessage());
-        }
-    }
-
-    private void stream(HttpServletResponse response, Resource resource,
-            InputStream stream) throws IOException {
-
-        ResourceMetadata meta = resource.getResourceMetadata();
-
-        String contentType = meta.getContentType();
-        if (contentType == null) {
-            contentType = getServletContext().getMimeType(resource.getPath());
-        }
-        if (contentType != null) {
-            response.setContentType(contentType);
-        }
-
-        String encoding = meta.getCharacterEncoding();
-        if (encoding != null) {
-            response.setCharacterEncoding(encoding);
-        }
-
-        try {
-            OutputStream out = response.getOutputStream();
-
-            byte[] buf = new byte[1024];
-            int rd;
-            while ( (rd=stream.read(buf)) >= 0) {
-                out.write(buf, 0, rd);
-            }
-
-        } finally {
-            try {
-                stream.close();
-            } catch (IOException ignore) {
-                // don't care
-            }
+            response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
+                "Cannot find servlet to handle resource " + resource.getPath());
         }
     }
 
-    @SuppressWarnings("unchecked")
-    private Map<Object, Object> asMap(Resource resource) {
-
-        Object object = resource.adaptTo(Object.class);
-        if (object != null) {
-            if (object instanceof Map) {
-                return (Map<Object, Object>) object; // unchecked cast
-            }
-
-            return new BeanMap(object); // unchecked cast
-        }
-
-        // no objects available
-        return Collections.EMPTY_MAP; // unchecked cast
-    }
 }