diff --git a/plugins/json/src/main/java/org/apache/struts2/json/JSONInterceptor.java b/plugins/json/src/main/java/org/apache/struts2/json/JSONInterceptor.java index 7e830d1df..86a6a4c90 100644 --- a/plugins/json/src/main/java/org/apache/struts2/json/JSONInterceptor.java +++ b/plugins/json/src/main/java/org/apache/struts2/json/JSONInterceptor.java @@ -189,8 +189,8 @@ public class JSONInterceptor extends AbstractInterceptor { // could be a numeric value response.setId(id.toString()); - // the map is going to have: 'params', 'method' and 'id' (what is the id - // for?) + // the map is going to have: 'params', 'method' and 'id' (for the + // client to identify the response) Class clazz = object.getClass(); // parameters @@ -404,6 +404,23 @@ public class JSONInterceptor extends AbstractInterceptor { } } + /** + * 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 expressions + */ + public void setExcludeWildcards(String commaDelim) { + Set excludePatterns = JSONUtil.asSet(commaDelim); + if (excludePatterns != null) { + this.excludeProperties = new ArrayList(excludePatterns.size()); + for (String pattern : excludePatterns) { + this.excludeProperties.add(WildcardUtil.compileWildcardPattern(pattern)); + } + } + } + /** * Sets a comma-delimited list of regular expressions to match properties * that should be included from the JSON output. @@ -412,24 +429,21 @@ public class JSONInterceptor extends AbstractInterceptor { * A comma-delimited list of regular expressions */ public void setIncludeProperties(String commaDelim) { - includeProperties = JSONUtil.processIncludePatterns(JSONUtil.asSet(commaDelim), JSONUtil.REGEXP_PATTERN, JSONUtil.getIncludePatternData()); + includeProperties = JSONUtil.processIncludePatterns(JSONUtil.asSet(commaDelim), JSONUtil.REGEXP_PATTERN); } /** * Sets a comma-delimited list of wildcard expressions to match - * properties that should be included from the JSON output. Since the - * patterns are only used for the JSON-RPC response, you only need to - * specify the elements inside your result object (and "result." is - * automatically prepended). + * properties that should be included from the JSON output. The + * standard boilerplate (id, error, debug) are automatically included, + * as appropriate, so you only need to provide patterns for the + * contents of "result". * * @param commaDelim - * A comma-delimited list of regular expressions + * A comma-delimited list of wildcard expressions */ public void setIncludeWildcards(String commaDelim) { - Map> includePatternData = JSONUtil.getIncludePatternData(); - includePatternData.get(JSONUtil.PATTERN_PREFIX).put(JSONUtil.WILDCARD_PATTERN, "result."); - includeProperties = JSONUtil.processIncludePatterns(JSONUtil.asSet(commaDelim), JSONUtil.WILDCARD_PATTERN, includePatternData); - + includeProperties = JSONUtil.processIncludePatterns(JSONUtil.asSet(commaDelim), JSONUtil.WILDCARD_PATTERN); if (includeProperties != null) { includeProperties.add(Pattern.compile("id")); includeProperties.add(Pattern.compile("result")); @@ -439,16 +453,17 @@ public class JSONInterceptor extends AbstractInterceptor { } /** - * Returns the appropriate set of includes. + * Returns the appropriate set of includes, based on debug setting. + * Derived classes can override if there are additional, custom + * debug-only parameters. */ - private List getIncludeProperties() - { + protected List getIncludeProperties() { if (includeProperties != null && getDebug()) { List list = new ArrayList(includeProperties); + list.add(Pattern.compile("debug")); list.add(WildcardUtil.compileWildcardPattern("error.*")); return list; - } - else { + } else { return includeProperties; } } diff --git a/plugins/json/src/main/java/org/apache/struts2/json/JSONResult.java b/plugins/json/src/main/java/org/apache/struts2/json/JSONResult.java index 2c653eb19..aa8d6ae98 100644 --- a/plugins/json/src/main/java/org/apache/struts2/json/JSONResult.java +++ b/plugins/json/src/main/java/org/apache/struts2/json/JSONResult.java @@ -148,7 +148,7 @@ public class JSONResult implements Result { * @param commaDelim A comma-delimited list of regular expressions */ public void setIncludeProperties(String commaDelim) { - includeProperties = JSONUtil.processIncludePatterns(JSONUtil.asSet(commaDelim), JSONUtil.REGEXP_PATTERN, JSONUtil.getIncludePatternData()); + includeProperties = JSONUtil.processIncludePatterns(JSONUtil.asSet(commaDelim), JSONUtil.REGEXP_PATTERN); } /** @@ -158,7 +158,7 @@ public class JSONResult implements Result { * @param commaDelim A comma-delimited list of wildcard patterns */ public void setIncludeWildcards(String commaDelim) { - includeProperties = JSONUtil.processIncludePatterns(JSONUtil.asSet(commaDelim), JSONUtil.WILDCARD_PATTERN, JSONUtil.getIncludePatternData()); + includeProperties = JSONUtil.processIncludePatterns(JSONUtil.asSet(commaDelim), JSONUtil.WILDCARD_PATTERN); } public void execute(ActionInvocation invocation) throws Exception { diff --git a/plugins/json/src/main/java/org/apache/struts2/json/JSONUtil.java b/plugins/json/src/main/java/org/apache/struts2/json/JSONUtil.java index 4e9332e31..fb9f4ec45 100644 --- a/plugins/json/src/main/java/org/apache/struts2/json/JSONUtil.java +++ b/plugins/json/src/main/java/org/apache/struts2/json/JSONUtil.java @@ -390,13 +390,12 @@ public class JSONUtil { return (header != null) && (header.indexOf("gzip") >= 0); } - /* package */ static final String REGEXP_PATTERN = "regexp"; - /* package */ static final String WILDCARD_PATTERN = "wildcard"; + public static final String REGEXP_PATTERN = "regexp"; + public static final String WILDCARD_PATTERN = "wildcard"; /* package */ static final String SPLIT_PATTERN = "split"; /* package */ static final String JOIN_STRING = "join"; /* package */ static final String ARRAY_BEGIN_STRING = "array-begin"; /* package */ static final String ARRAY_END_STRING = "array-end"; - /* package */ static final String PATTERN_PREFIX = "pattern-prefix"; /* package */ static Map> getIncludePatternData() { @@ -422,14 +421,15 @@ public class JSONUtil { data.put(WILDCARD_PATTERN, "]"); includePatternData.put(ARRAY_END_STRING, data); - data = new HashMap(); - data.put(REGEXP_PATTERN, ""); - data.put(WILDCARD_PATTERN, ""); - includePatternData.put(PATTERN_PREFIX, data); - return includePatternData; } + private static final Map> defaultIncludePatternData = getIncludePatternData(); + + public static List processIncludePatterns(Set includePatterns, String type) { + return processIncludePatterns(includePatterns, type, defaultIncludePatternData); + } + /* package */ static List processIncludePatterns(Set includePatterns, String type, Map> includePatternData) { if (includePatterns != null) { List results = new ArrayList(includePatterns.size()); @@ -479,7 +479,6 @@ public class JSONUtil { } private static void addPattern(List results, String pattern, String type, Map> includePatternData) { - pattern = includePatternData.get(PATTERN_PREFIX).get(type) + pattern; results.add( type == REGEXP_PATTERN ? Pattern.compile(pattern) : diff --git a/plugins/json/src/main/resources/struts-plugin.xml b/plugins/json/src/main/resources/struts-plugin.xml index 447987177..4082af1dd 100644 --- a/plugins/json/src/main/resources/struts-plugin.xml +++ b/plugins/json/src/main/resources/struts-plugin.xml @@ -1,8 +1,8 @@ + "-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN" + "http://struts.apache.org/dtds/struts-2.1.7.dtd">