You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by bd...@apache.org on 2008/02/06 10:37:47 UTC
svn commit: r618936 - in /incubator/sling/trunk:
commons/json/src/main/java/org/apache/sling/commons/json/io/
launchpad/launchpad-servlets/src/main/java/org/apache/sling/launchpad/renderers/
launchpad/launchpad-webapp/src/test/java/org/apache/sling/lau...
Author: bdelacretaz
Date: Wed Feb 6 01:37:45 2008
New Revision: 618936
URL: http://svn.apache.org/viewvc?rev=618936&view=rev
Log:
SLING-167 - 'infinity' recursion level implemented for JSON output
Modified:
incubator/sling/trunk/commons/json/src/main/java/org/apache/sling/commons/json/io/JSONWriter.java
incubator/sling/trunk/launchpad/launchpad-servlets/src/main/java/org/apache/sling/launchpad/renderers/JsonRendererServlet.java
incubator/sling/trunk/launchpad/launchpad-webapp/src/test/java/org/apache/sling/launchpad/webapp/integrationtest/JsonRenderingTest.java
Modified: incubator/sling/trunk/commons/json/src/main/java/org/apache/sling/commons/json/io/JSONWriter.java
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/commons/json/src/main/java/org/apache/sling/commons/json/io/JSONWriter.java?rev=618936&r1=618935&r2=618936&view=diff
==============================================================================
--- incubator/sling/trunk/commons/json/src/main/java/org/apache/sling/commons/json/io/JSONWriter.java (original)
+++ incubator/sling/trunk/commons/json/src/main/java/org/apache/sling/commons/json/io/JSONWriter.java Wed Feb 6 01:37:45 2008
@@ -60,7 +60,9 @@
* @version 2
*/
public class JSONWriter {
- private static final int maxdepth = 20;
+ // This was previously 20 - increased while creating
+ // the JsonRenderingTest.testRecursiveInfinity test
+ private static final int maxdepth = 50;
/**
* The comma flag determines if a comma should be output before the next
@@ -267,7 +269,7 @@
*/
private void push(char c) throws JSONException {
if (this.top >= maxdepth) {
- throw new JSONException("Nesting too deep.");
+ throw new JSONException("Nesting too deep (maximum is " + maxdepth + " levels)");
}
this.stack[this.top] = c;
this.mode = c;
Modified: incubator/sling/trunk/launchpad/launchpad-servlets/src/main/java/org/apache/sling/launchpad/renderers/JsonRendererServlet.java
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/launchpad/launchpad-servlets/src/main/java/org/apache/sling/launchpad/renderers/JsonRendererServlet.java?rev=618936&r1=618935&r2=618936&view=diff
==============================================================================
--- incubator/sling/trunk/launchpad/launchpad-servlets/src/main/java/org/apache/sling/launchpad/renderers/JsonRendererServlet.java (original)
+++ incubator/sling/trunk/launchpad/launchpad-servlets/src/main/java/org/apache/sling/launchpad/renderers/JsonRendererServlet.java Wed Feb 6 01:37:45 2008
@@ -46,6 +46,9 @@
private static final long serialVersionUID = 5577121546674133317L;
private final String responseContentType;
private final JsonItemWriter itemWriter;
+
+ /** Recursion level selector that means "all levels" */
+ public static final String INFINITY = "infinity";
public JsonRendererServlet(String responseContentTypeHeaderValue) {
this.responseContentType = responseContentTypeHeaderValue;
@@ -97,12 +100,16 @@
final String [] selectors = req.getRequestPathInfo().getSelectors();
if(selectors != null && selectors.length > 0) {
String level = selectors[selectors.length - 1];
- try {
- maxRecursionLevels = Integer.parseInt(level);
- } catch(NumberFormatException nfe) {
- resp.sendError(HttpServletResponse.SC_BAD_REQUEST,
- "Invalid recursion selector value '" + level + "'");
- return;
+ if(INFINITY.equals(level)) {
+ maxRecursionLevels = -1;
+ } else {
+ try {
+ maxRecursionLevels = Integer.parseInt(level);
+ } catch(NumberFormatException nfe) {
+ resp.sendError(HttpServletResponse.SC_BAD_REQUEST,
+ "Invalid recursion selector value '" + level + "'");
+ return;
+ }
}
}
Modified: incubator/sling/trunk/launchpad/launchpad-webapp/src/test/java/org/apache/sling/launchpad/webapp/integrationtest/JsonRenderingTest.java
URL: http://svn.apache.org/viewvc/incubator/sling/trunk/launchpad/launchpad-webapp/src/test/java/org/apache/sling/launchpad/webapp/integrationtest/JsonRenderingTest.java?rev=618936&r1=618935&r2=618936&view=diff
==============================================================================
--- incubator/sling/trunk/launchpad/launchpad-webapp/src/test/java/org/apache/sling/launchpad/webapp/integrationtest/JsonRenderingTest.java (original)
+++ incubator/sling/trunk/launchpad/launchpad-webapp/src/test/java/org/apache/sling/launchpad/webapp/integrationtest/JsonRenderingTest.java Wed Feb 6 01:37:45 2008
@@ -103,6 +103,17 @@
}
}
+ /** Test the "infinity" recursion level */
+ public void testRecursiveInfinity() throws IOException {
+ final Map<String,String> props = new HashMap<String,String>();
+ props.put("text", testText);
+ props.put("a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y", "yes");
+ final String url = testClient.createNode(postUrl, props);
+ final String json = getContent(url + ".infinity.json", CONTENT_TYPE_JSON);
+ assertJavascript(testText, json, "out.print(data.text)");
+ assertJavascript("yes", json, "out.print(data.a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.w.x.y)");
+ }
+
public void testInvalidLevel() throws IOException {
assertHttpStatus(createdNodeUrl + ".notAnIntegerOnPurpose.json", HttpServletResponse.SC_BAD_REQUEST);
}