You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@struts.apache.org by lu...@apache.org on 2012/03/31 22:39:54 UTC

svn commit: r1307897 - in /struts/struts2/trunk/plugins/json/src/main/java/org/apache/struts2/json: JSONReader.java JSONResult.java JSONUtil.java JSONWriter.java

Author: lukaszlenart
Date: Sat Mar 31 20:39:53 2012
New Revision: 1307897

URL: http://svn.apache.org/viewvc?rev=1307897&view=rev
Log:
WW-3780 makes JSON plugin more extendable

Modified:
    struts/struts2/trunk/plugins/json/src/main/java/org/apache/struts2/json/JSONReader.java
    struts/struts2/trunk/plugins/json/src/main/java/org/apache/struts2/json/JSONResult.java
    struts/struts2/trunk/plugins/json/src/main/java/org/apache/struts2/json/JSONUtil.java
    struts/struts2/trunk/plugins/json/src/main/java/org/apache/struts2/json/JSONWriter.java

Modified: struts/struts2/trunk/plugins/json/src/main/java/org/apache/struts2/json/JSONReader.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/json/src/main/java/org/apache/struts2/json/JSONReader.java?rev=1307897&r1=1307896&r2=1307897&view=diff
==============================================================================
--- struts/struts2/trunk/plugins/json/src/main/java/org/apache/struts2/json/JSONReader.java (original)
+++ struts/struts2/trunk/plugins/json/src/main/java/org/apache/struts2/json/JSONReader.java Sat Mar 31 20:39:53 2012
@@ -32,7 +32,7 @@ import java.util.Map;
  * Deserializes and object from a JSON string
  * </p>
  */
-class JSONReader {
+public class JSONReader {
     private static final Object OBJECT_END = new Object();
     private static final Object ARRAY_END = new Object();
     private static final Object COLON = new Object();
@@ -55,13 +55,13 @@ class JSONReader {
     private Object token;
     private StringBuilder buf = new StringBuilder();
 
-    private char next() {
+    protected char next() {
         this.c = this.it.next();
 
         return this.c;
     }
 
-    private void skipWhiteSpace() {
+    protected void skipWhiteSpace() {
         while (Character.isWhitespace(this.c)) {
             this.next();
         }
@@ -74,7 +74,7 @@ class JSONReader {
         return this.read();
     }
 
-    private Object read() throws JSONException {
+    protected Object read() throws JSONException {
         Object ret;
 
         this.skipWhiteSpace();
@@ -125,7 +125,7 @@ class JSONReader {
     }
 
     @SuppressWarnings("unchecked")
-    private Map object() throws JSONException {
+    protected Map object() throws JSONException {
         Map ret = new HashMap();
         Object next = this.read();
         if (next != OBJECT_END) {
@@ -151,12 +151,12 @@ class JSONReader {
         return ret;
     }
 
-    private JSONException buildInvalidInputException() {
+    protected JSONException buildInvalidInputException() {
         return new JSONException("Input string is not well formed JSON (invalid char " + this.c + ")");
     }
 
     @SuppressWarnings("unchecked")
-    private List array() throws JSONException {
+    protected List array() throws JSONException {
         List ret = new ArrayList();
         Object value = this.read();
 
@@ -174,7 +174,7 @@ class JSONReader {
         return ret;
     }
 
-    private Object number() {
+    protected Object number() {
         this.buf.setLength(0);
         boolean toDouble = false;
 
@@ -208,7 +208,7 @@ class JSONReader {
         }
     }
 
-    private Object string(char quote) {
+    protected Object string(char quote) {
         this.buf.setLength(0);
 
         while ((this.c != quote) && (this.c != CharacterIterator.DONE)) {
@@ -234,22 +234,22 @@ class JSONReader {
         return this.buf.toString();
     }
 
-    private void add(char cc) {
+    protected void add(char cc) {
         this.buf.append(cc);
         this.next();
     }
 
-    private void add() {
+    protected void add() {
         this.add(this.c);
     }
 
-    private void addDigits() {
+    protected void addDigits() {
         while (Character.isDigit(this.c)) {
             this.add();
         }
     }
 
-    private char unicode() {
+    protected char unicode() {
         int value = 0;
 
         for (int i = 0; i < 4; ++i) {

Modified: struts/struts2/trunk/plugins/json/src/main/java/org/apache/struts2/json/JSONResult.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/json/src/main/java/org/apache/struts2/json/JSONResult.java?rev=1307897&r1=1307896&r2=1307897&view=diff
==============================================================================
--- struts/struts2/trunk/plugins/json/src/main/java/org/apache/struts2/json/JSONResult.java (original)
+++ struts/struts2/trunk/plugins/json/src/main/java/org/apache/struts2/json/JSONResult.java Sat Mar 31 20:39:53 2012
@@ -119,7 +119,7 @@ public class JSONResult implements Resul
     /**
      * Sets a comma-delimited list of wildcard expressions to match properties
      * that should be excluded from the JSON output.
-     * 
+     *
      * @param commaDelim A comma-delimited list of wildcard patterns
      */
     public void setExcludeWildcards(String commaDelim) {
@@ -174,14 +174,14 @@ public class JSONResult implements Resul
         }
     }
 
-    private Object readRootObject(ActionInvocation invocation) {
+    protected Object readRootObject(ActionInvocation invocation) {
         if (enableSMD) {
             return buildSMDObject(invocation);
         }
         return findRootObject(invocation);
     }
 
-    private Object findRootObject(ActionInvocation invocation) {
+    protected Object findRootObject(ActionInvocation invocation) {
         Object rootObject;
         if (this.root != null) {
             ValueStack stack = invocation.getStack();
@@ -192,15 +192,13 @@ public class JSONResult implements Resul
         return rootObject;
     }
 
-    private String createJSONString(HttpServletRequest request, Object rootObject) throws JSONException {
-        String json;
-        json = JSONUtil.serialize(rootObject, excludeProperties, includeProperties, ignoreHierarchy,
-                enumAsBean, excludeNullProperties);
+    protected String createJSONString(HttpServletRequest request, Object rootObject) throws JSONException {
+        String json = JSONUtil.serialize(rootObject, excludeProperties, includeProperties, ignoreHierarchy, enumAsBean, excludeNullProperties);
         json = addCallbackIfApplicable(request, json);
         return json;
     }
 
-    private boolean enableGzip(HttpServletRequest request) {
+    protected boolean enableGzip(HttpServletRequest request) {
         return enableGZIP && JSONUtil.isGzipInRequest(request);
     }
 

Modified: struts/struts2/trunk/plugins/json/src/main/java/org/apache/struts2/json/JSONUtil.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/json/src/main/java/org/apache/struts2/json/JSONUtil.java?rev=1307897&r1=1307896&r2=1307897&view=diff
==============================================================================
--- struts/struts2/trunk/plugins/json/src/main/java/org/apache/struts2/json/JSONUtil.java (original)
+++ struts/struts2/trunk/plugins/json/src/main/java/org/apache/struts2/json/JSONUtil.java Sat Mar 31 20:39:53 2012
@@ -51,7 +51,9 @@ import java.util.zip.GZIPOutputStream;
  * Wrapper for JSONWriter with some utility methods.
  */
 public class JSONUtil {
-    final static String RFC3339_FORMAT = "yyyy-MM-dd'T'HH:mm:ss";
+
+    public final static String RFC3339_FORMAT = "yyyy-MM-dd'T'HH:mm:ss";
+
     private static final Logger LOG = LoggerFactory.getLogger(JSONUtil.class);
 
     /**
@@ -64,7 +66,6 @@ public class JSONUtil {
      */
     public static String serialize(Object object) throws JSONException {
         JSONWriter writer = new JSONWriter();
-
         return writer.write(object);
     }
 
@@ -459,9 +460,9 @@ public class JSONUtil {
         if (!existingPatterns.containsKey(patternExpr)) {
             existingPatterns.put(patternExpr, patternExpr);
             if (isIndexedProperty(patternPiece, type, includePatternData)) {
-                addPattern(results, patternExpr.substring(0, patternExpr.lastIndexOf(includePatternData.get(ARRAY_BEGIN_STRING).get(type))), type, includePatternData);
+                addPattern(results, patternExpr.substring(0, patternExpr.lastIndexOf(includePatternData.get(ARRAY_BEGIN_STRING).get(type))), type);
             }
-            addPattern(results, patternExpr, type, includePatternData);
+            addPattern(results, patternExpr, type);
         }
         return patternExpr;
     }
@@ -473,13 +474,11 @@ public class JSONUtil {
         return patternPiece.endsWith(includePatternData.get(ARRAY_END_STRING).get(type));
     }
 
-    private static void addPattern(List<Pattern> results, String pattern, String type, Map<String, Map<String, String>> includePatternData) {
-        results.add(
-            type == REGEXP_PATTERN ?
-                Pattern.compile(pattern) :
-                WildcardUtil.compileWildcardPattern(pattern));
+    private static void addPattern(List<Pattern> results, String pattern, String type) {
+        results.add(REGEXP_PATTERN.equals(type) ? Pattern.compile(pattern) : WildcardUtil.compileWildcardPattern(pattern));
         if (LOG.isDebugEnabled()) {
-            LOG.debug("Adding include " + (type == REGEXP_PATTERN ? "property" : "wildcard") + " expression:  " + pattern);
+            LOG.debug("Adding include " + (REGEXP_PATTERN.equals(type) ? "property" : "wildcard") + " expression:  " + pattern);
         }
     }
+
 }

Modified: struts/struts2/trunk/plugins/json/src/main/java/org/apache/struts2/json/JSONWriter.java
URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/json/src/main/java/org/apache/struts2/json/JSONWriter.java?rev=1307897&r1=1307896&r2=1307897&view=diff
==============================================================================
--- struts/struts2/trunk/plugins/json/src/main/java/org/apache/struts2/json/JSONWriter.java (original)
+++ struts/struts2/trunk/plugins/json/src/main/java/org/apache/struts2/json/JSONWriter.java Sat Mar 31 20:39:53 2012
@@ -46,7 +46,8 @@ import java.util.regex.Pattern;
  * references are detected they will be nulled out.
  * </p>
  */
-class JSONWriter {
+public class JSONWriter {
+
     private static final Logger LOG = LoggerFactory.getLogger(JSONWriter.class);
 
     /**
@@ -99,7 +100,7 @@ class JSONWriter {
     /**
      * Detect cyclic references
      */
-    private void value(Object object, Method method) throws JSONException {
+    protected void value(Object object, Method method) throws JSONException {
         if (object == null) {
             this.add("null");
 
@@ -129,7 +130,7 @@ class JSONWriter {
     /**
      * Serialize object into json
      */
-    private void process(Object object, Method method) throws JSONException {
+    protected void process(Object object, Method method) throws JSONException {
         this.stack.push(object);
 
         if (object instanceof Class) {
@@ -157,16 +158,23 @@ class JSONWriter {
         } else if (object instanceof Enum) {
             this.enumeration((Enum) object);
         } else {
-            this.bean(object);
+            processCustom(object, method);
         }
 
         this.stack.pop();
     }
 
     /**
+     * Serialize custom object into json
+     */
+    protected void processCustom(Object object, Method method) throws JSONException {
+        this.bean(object);
+    }
+
+    /**
      * Instrospect bean and serialize its properties
      */
-    private void bean(Object object) throws JSONException {
+    protected void bean(Object object) throws JSONException {
         this.add("{");
 
         BeanInfo info;
@@ -233,7 +241,7 @@ class JSONWriter {
         this.add("}");
     }
 
-    private Object getBridgedValue(Method baseAccessor, Object value) throws InstantiationException, IllegalAccessException {
+    protected Object getBridgedValue(Method baseAccessor, Object value) throws InstantiationException, IllegalAccessException {
         JSONFieldBridge fieldBridgeAnn = baseAccessor.getAnnotation(JSONFieldBridge.class);
         if (fieldBridgeAnn != null) {
             Class impl = fieldBridgeAnn.impl();
@@ -251,7 +259,7 @@ class JSONWriter {
         return value;
     }
 
-    private Method findBaseAccessor(Class clazz, Method accessor) {
+    protected Method findBaseAccessor(Class clazz, Method accessor) {
         Method baseAccessor = null;
         if (clazz.getName().indexOf("$$EnhancerByCGLIB$$") > -1) {
             try {
@@ -279,7 +287,7 @@ class JSONWriter {
      * Instrospect an Enum and serialize it as a name/value pair or as a bean
      * including all its own properties
      */
-    private void enumeration(Enum enumeration) throws JSONException {
+    protected void enumeration(Enum enumeration) throws JSONException {
         if (enumAsBean) {
             this.bean(enumeration);
         } else {
@@ -287,7 +295,7 @@ class JSONWriter {
         }
     }
 
-    private boolean shouldExcludeProperty(PropertyDescriptor prop) throws SecurityException,
+    protected boolean shouldExcludeProperty(PropertyDescriptor prop) throws SecurityException,
             NoSuchFieldException {
         String name = prop.getName();
 
@@ -296,23 +304,23 @@ class JSONWriter {
 
     }
 
-    private String expandExpr(int i) {
+    protected String expandExpr(int i) {
         return this.exprStack + "[" + i + "]";
     }
 
-    private String expandExpr(String property) {
+    protected String expandExpr(String property) {
         if (this.exprStack.length() == 0)
             return property;
         return this.exprStack + "." + property;
     }
 
-    private String setExprStack(String expr) {
+    protected String setExprStack(String expr) {
         String s = this.exprStack;
         this.exprStack = expr;
         return s;
     }
 
-    private boolean shouldExcludeProperty(String expr) {
+    protected boolean shouldExcludeProperty(String expr) {
         if (this.excludeProperties != null) {
             for (Pattern pattern : this.excludeProperties) {
                 if (pattern.matcher(expr).matches()) {
@@ -341,7 +349,7 @@ class JSONWriter {
     /**
      * Add name/value pair to buffer
      */
-    private boolean add(String name, Object value, Method method, boolean hasData) throws JSONException {
+    protected boolean add(String name, Object value, Method method, boolean hasData) throws JSONException {
         if (excludeNullProperties && value == null) {
             return false;
         }
@@ -359,7 +367,7 @@ class JSONWriter {
     /**
      * Add map to buffer
      */
-    private void map(Map map, Method method) throws JSONException {
+    protected void map(Map map, Method method) throws JSONException {
         this.add("{");
 
         Iterator it = map.entrySet().iterator();
@@ -411,7 +419,7 @@ class JSONWriter {
     /**
      * Add date to buffer
      */
-    private void date(Date date, Method method) {
+    protected void date(Date date, Method method) {
         JSON json = null;
         if (method != null)
             json = method.getAnnotation(JSON.class);
@@ -426,7 +434,7 @@ class JSONWriter {
     /**
      * Add array to buffer
      */
-    private void array(Iterator it, Method method) throws JSONException {
+    protected void array(Iterator it, Method method) throws JSONException {
         this.add("[");
 
         boolean hasData = false;
@@ -456,7 +464,7 @@ class JSONWriter {
     /**
      * Add array to buffer
      */
-    private void array(Object object, Method method) throws JSONException {
+    protected void array(Object object, Method method) throws JSONException {
         this.add("[");
 
         int length = Array.getLength(object);
@@ -487,14 +495,14 @@ class JSONWriter {
     /**
      * Add boolean to buffer
      */
-    private void bool(boolean b) {
+    protected void bool(boolean b) {
         this.add(b ? "true" : "false");
     }
 
     /**
      * escape characters
      */
-    private void string(Object obj) {
+    protected void string(Object obj) {
         this.add('"');
 
         CharacterIterator it = new StringCharacterIterator(obj.toString());
@@ -529,14 +537,14 @@ class JSONWriter {
     /**
      * Add object to buffer
      */
-    private void add(Object obj) {
+    protected void add(Object obj) {
         this.buf.append(obj);
     }
 
     /**
      * Add char to buffer
      */
-    private void add(char c) {
+    protected void add(char c) {
         this.buf.append(c);
     }
 
@@ -545,7 +553,7 @@ class JSONWriter {
      *
      * @param c character to be encoded
      */
-    private void unicode(char c) {
+    protected void unicode(char c) {
         this.add("\\u");
 
         int n = c;
@@ -574,7 +582,7 @@ class JSONWriter {
         this.enumAsBean = enumAsBean;
     }
 
-    private static class JSONAnnotationFinder {
+    protected static class JSONAnnotationFinder {
         private boolean serialize = true;
         private Method accessor;
         private String name;