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) {