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 2013/10/23 00:26:09 UTC
svn commit: r1534825 - in /sling/trunk/bundles/servlets/post/src:
main/java/org/apache/sling/servlets/post/AbstractPostResponse.java
test/java/org/apache/sling/servlets/post/JsonResponseTest.java
Author: fmeschbe
Date: Tue Oct 22 22:26:08 2013
New Revision: 1534825
URL: http://svn.apache.org/r1534825
Log:
SLING-3201 Redirect after post not possible
Make sure the Location header is set not only for the
201/CREATED status but also for any of the 3xx stati.
Modified:
sling/trunk/bundles/servlets/post/src/main/java/org/apache/sling/servlets/post/AbstractPostResponse.java
sling/trunk/bundles/servlets/post/src/test/java/org/apache/sling/servlets/post/JsonResponseTest.java
Modified: sling/trunk/bundles/servlets/post/src/main/java/org/apache/sling/servlets/post/AbstractPostResponse.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/servlets/post/src/main/java/org/apache/sling/servlets/post/AbstractPostResponse.java?rev=1534825&r1=1534824&r2=1534825&view=diff
==============================================================================
--- sling/trunk/bundles/servlets/post/src/main/java/org/apache/sling/servlets/post/AbstractPostResponse.java (original)
+++ sling/trunk/bundles/servlets/post/src/main/java/org/apache/sling/servlets/post/AbstractPostResponse.java Tue Oct 22 22:26:08 2013
@@ -317,8 +317,8 @@ public abstract class AbstractPostRespon
int statusCode = ((Number) status).intValue();
response.setStatus(statusCode);
- // special treatment of 201/CREATED: Requires Location
- if (statusCode == HttpServletResponse.SC_CREATED) {
+ // special treatment of 201/CREATED and 3xx: Requires Location
+ if (statusCode == HttpServletResponse.SC_CREATED || statusCode / 100 == 3) {
response.setHeader("Location", getLocation());
}
}
Modified: sling/trunk/bundles/servlets/post/src/test/java/org/apache/sling/servlets/post/JsonResponseTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/servlets/post/src/test/java/org/apache/sling/servlets/post/JsonResponseTest.java?rev=1534825&r1=1534824&r2=1534825&view=diff
==============================================================================
--- sling/trunk/bundles/servlets/post/src/test/java/org/apache/sling/servlets/post/JsonResponseTest.java (original)
+++ sling/trunk/bundles/servlets/post/src/test/java/org/apache/sling/servlets/post/JsonResponseTest.java Tue Oct 22 22:26:08 2013
@@ -18,6 +18,8 @@
package org.apache.sling.servlets.post;
import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
import javax.servlet.http.HttpServletResponse;
@@ -75,6 +77,33 @@ public class JsonResponseTest extends Te
assertEquals(JSONResponse.RESPONSE_CHARSET, response.getCharacterEncoding());
}
+ public void testSend_201() throws Exception {
+ final String location = "http://example.com/test_location";
+ res.onChange("modified", "argument1");
+ res.setStatus(HttpServletResponse.SC_CREATED, "Created");
+ res.setLocation(location);
+ MockResponseWithHeader response = new MockResponseWithHeader();
+ res.send(response, true);
+ JSONObject result = new JSONObject(response.getOutput().toString());
+ assertProperty(result, HtmlResponse.PN_STATUS_CODE, HttpServletResponse.SC_CREATED);
+ assertEquals(location, response.getHeader("Location"));
+ }
+
+ public void testSend_3xx() throws Exception {
+ final String location = "http://example.com/test_location";
+ res.onChange("modified", "argument1");
+
+ for (int status = 300; status < 308; status++) {
+ res.setStatus(status, "3xx Status");
+ res.setLocation(location);
+ MockResponseWithHeader response = new MockResponseWithHeader();
+ res.send(response, true);
+ JSONObject result = new JSONObject(response.getOutput().toString());
+ assertProperty(result, HtmlResponse.PN_STATUS_CODE, status);
+ assertEquals(location, response.getHeader("Location"));
+ }
+ }
+
private static <T> T assertProperty(JSONObject obj, String key, Class<T> clazz) throws JSONException {
assertTrue("JSON object does not have property " + key, obj.has(key));
return assertInstanceOf(obj.get(key), clazz);
@@ -97,4 +126,23 @@ public class JsonResponseTest extends Te
}
}
+ private static class MockResponseWithHeader extends MockSlingHttpServletResponse {
+ private final Map<String, Object> headers = new HashMap<String, Object>();
+
+ @Override
+ public void setHeader(String name, String value) {
+ this.headers.put(name, value);
+ }
+
+ public String getHeader(String name) {
+ Object result = this.headers.get(name);
+ if (result instanceof String) {
+ return (String) result;
+ } else if (result instanceof String[]) {
+ return ((String[]) result)[0];
+ } else {
+ return null;
+ }
+ }
+ }
}