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/01/15 12:41:59 UTC

svn commit: r612088 - /incubator/sling/whiteboard/fmeschbe/resource/sling/servlet-resolver/src/main/java/org/apache/sling/servlet/resolver/defaults/DefaultServlet.java

Author: fmeschbe
Date: Tue Jan 15 03:41:46 2008
New Revision: 612088

URL: http://svn.apache.org/viewvc?rev=612088&view=rev
Log:
Stream the resource if it is not a servlet, there is no request
extension and the resource can provide an InputStream

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

Modified: incubator/sling/whiteboard/fmeschbe/resource/sling/servlet-resolver/src/main/java/org/apache/sling/servlet/resolver/defaults/DefaultServlet.java
URL: http://svn.apache.org/viewvc/incubator/sling/whiteboard/fmeschbe/resource/sling/servlet-resolver/src/main/java/org/apache/sling/servlet/resolver/defaults/DefaultServlet.java?rev=612088&r1=612087&r2=612088&view=diff
==============================================================================
--- incubator/sling/whiteboard/fmeschbe/resource/sling/servlet-resolver/src/main/java/org/apache/sling/servlet/resolver/defaults/DefaultServlet.java (original)
+++ incubator/sling/whiteboard/fmeschbe/resource/sling/servlet-resolver/src/main/java/org/apache/sling/servlet/resolver/defaults/DefaultServlet.java Tue Jan 15 03:41:46 2008
@@ -19,6 +19,7 @@
 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;
@@ -37,6 +38,7 @@
 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;
 
 /**
@@ -64,11 +66,20 @@
 
         // check whether we have a directly addressed script
         if (extension == null) {
+            
+            // check whether the resource adapts to servlet (maybe script)
             Servlet resourceServlet = resource.adaptTo(Servlet.class);
             if (resourceServlet != null) {
                 resourceServlet.service(request, response);
                 return;
             }
+            
+            // 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)
@@ -222,6 +233,42 @@
 
     }
 
+    private void stream(HttpServletResponse response, Resource resource,
+            InputStream stream) throws IOException {
+        
+        ResourceMetadata meta = resource.getResourceMetadata();
+        
+        String contentType = (String) meta.get(ResourceMetadata.CONTENT_TYPE);
+        if (contentType == null) {
+            contentType = getServletContext().getMimeType(resource.getURI());
+        }
+        if (contentType != null) {
+            response.setContentType(contentType);
+        }
+        
+        String encoding = (String) meta.get(ResourceMetadata.CHARACTER_ENCODING);
+        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
+            }
+        }
+    }
+    
     private void printObjectJson(PrintWriter pw, Object object) {
         boolean quote = !((object instanceof Boolean) || (object instanceof Number));
         if (quote) {