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;