SLING-1496 fixes missing content type on directory listings where there is a resource.
git-svn-id: https://svn.apache.org/repos/asf/sling/trunk@936614 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/src/main/java/org/apache/sling/servlets/get/impl/helpers/StreamRendererServlet.java b/src/main/java/org/apache/sling/servlets/get/impl/helpers/StreamRendererServlet.java
index 5045cd3..23f6f71 100644
--- a/src/main/java/org/apache/sling/servlets/get/impl/helpers/StreamRendererServlet.java
+++ b/src/main/java/org/apache/sling/servlets/get/impl/helpers/StreamRendererServlet.java
@@ -176,38 +176,7 @@
// set various response headers, unless the request is included
if (!included) {
- final ResourceMetadata meta = resource.getResourceMetadata();
- final long modifTime = meta.getModificationTime();
- if (modifTime > 0) {
- response.setDateHeader(HEADER_LAST_MODIFIED, modifTime);
- }
-
- final String defaultContentType = "application/octet-stream";
- String contentType = meta.getContentType();
- if (contentType == null || defaultContentType.equals(contentType)) {
- // if repository doesn't provide a content-type, or
- // provides the
- // default one,
- // try to do better using our servlet context
- final String ct = getServletContext().getMimeType(
- resource.getPath());
- if (ct != null) {
- contentType = ct;
- }
- }
- if (contentType != null) {
- response.setContentType(contentType);
- }
-
- String encoding = meta.getCharacterEncoding();
- if (encoding != null) {
- response.setCharacterEncoding(encoding);
- }
-
- long length = meta.getContentLength();
- if (length > 0 && length < Integer.MAX_VALUE) {
- response.setContentLength((int) length);
- }
+ setHeaders(resource, response);
}
OutputStream out = response.getOutputStream();
@@ -260,6 +229,8 @@
dispatcher = request.getRequestDispatcher(fileRes, rdo);
}
+ setHeaders(fileRes, response);
+
dispatcher.include(request, response);
return;
}
@@ -273,6 +244,49 @@
}
+ /**
+ * @param resource
+ * @param request
+ * @param response
+ */
+ private void setHeaders(Resource resource,
+ SlingHttpServletResponse response) {
+
+ final ResourceMetadata meta = resource.getResourceMetadata();
+ final long modifTime = meta.getModificationTime();
+ if (modifTime > 0) {
+ response.setDateHeader(HEADER_LAST_MODIFIED, modifTime);
+ }
+
+ final String defaultContentType = "application/octet-stream";
+ String contentType = meta.getContentType();
+ if (contentType == null || defaultContentType.equals(contentType)) {
+ // if repository doesn't provide a content-type, or
+ // provides the
+ // default one,
+ // try to do better using our servlet context
+ final String ct = getServletContext().getMimeType(
+ resource.getPath());
+ if (ct != null) {
+ contentType = ct;
+ }
+ }
+ if (contentType != null) {
+ response.setContentType(contentType);
+ }
+
+ String encoding = meta.getCharacterEncoding();
+ if (encoding != null) {
+ response.setCharacterEncoding(encoding);
+ }
+
+ long length = meta.getContentLength();
+ if (length > 0 && length < Integer.MAX_VALUE) {
+ response.setContentLength((int) length);
+ }
+
+ }
+
private void renderIndex(Resource resource,
SlingHttpServletResponse response) throws IOException {