svn commit: r1066613 - in /struts/struts2/trunk: plugins/json/src/main/java/org/apache/struts2/json/ plugins/json/src/test/java/org/apache/struts2/json/ xwork-core/src/main/java/com/opensymphony/xwork
Author: jafl Date: Wed Feb 2 20:28:20 2011 New Revision: 1066613 URL: http://svn.apache.org/viewvc?rev=1066613&view=rev Log: WW-3514 fix/enhance support for include/exclude parameters Added: struts/struts2/trunk/plugins/json/src/test/java/org/apache/struts2/json/JSONCleanerTest.java - copied, changed from r1065873, struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/util/WildcardHelperTest.java struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/util/WildcardUtil.java struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/util/WildcardUtilTest.java - copied, changed from r1065873, struts/struts2/trunk/xwork-core/src/test/java/com/opensymphony/xwork2/util/WildcardHelperTest.java Modified: struts/struts2/trunk/plugins/json/src/main/java/org/apache/struts2/json/JSONCleaner.java struts/struts2/trunk/plugins/json/src/main/java/org/apache/struts2/json/JSONInterceptor.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 Modified: struts/struts2/trunk/plugins/json/src/main/java/org/apache/struts2/json/JSONCleaner.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/plugins/json/src/main/java/org/apache/struts2/json/JSONCleaner.java?rev=1066613&r1=1066612&r2=1066613&view=diff == --- struts/struts2/trunk/plugins/json/src/main/java/org/apache/struts2/json/JSONCleaner.java (original) +++ struts/struts2/trunk/plugins/json/src/main/java/org/apache/struts2/json/JSONCleaner.java Wed Feb 2 20:28:20 2011 @@ -21,14 +21,51 @@ package org.apache.struts2.json; import java.util.Iterator; +import java.util.Collection; import java.util.List; import java.util.Map; +import java.util.TreeMap; +import java.util.HashMap; + +import java.util.regex.Pattern; +import java.util.regex.Matcher; + +import com.opensymphony.xwork2.util.TextParseUtil; +import com.opensymphony.xwork2.util.WildcardUtil; +import com.opensymphony.xwork2.util.logging.Logger; +import com.opensymphony.xwork2.util.logging.LoggerFactory; /** - * Isolate the process of cleaning JSON data from the Interceptor class itself. + * Isolate the process of cleaning JSON data from the Interceptor class + * itself. + * + * The allowed and blocked wildcard patterns, combined with + * defaultBlock, let you filter out values that should not be injected, in + * the same way that ParameterFilterInterceptor does. Note that you can + * only remove values from a Map. Removing values from a List is dangerous + * because it could change the meaning of the data! */ public abstract class JSONCleaner { +private static final Logger LOG = LoggerFactory.getLogger(JSONCleaner.class); + +public static class Filter +{ +public Pattern pattern; +public boolean allow; + +public Filter(String pattern, boolean allow) +{ +this.pattern = WildcardUtil.compileWildcardPattern(pattern); +this.allow = allow; +} +} + +private boolean defaultBlock = false; +private Collection allowed; +private Collection blocked; +private Map includesExcludesMap; + public Object clean(String ognlPrefix, Object data) throws JSONException { if (data == null) return null; @@ -54,11 +91,172 @@ public abstract class JSONCleaner { Iterator iter = map.entrySet().iterator(); while (iter.hasNext()) { Map.Entry e = (Map.Entry) iter.next(); -e.setValue(clean((ognlPrefix.length() > 0 ? ognlPrefix + "." : "") + e.getKey(), e.getValue())); +String key = (ognlPrefix.length() > 0 ? ognlPrefix + "." : "") + e.getKey(); +if (allow(key)) { +e.setValue(clean(key, e.getValue())); +} else { +LOG.debug("blocked: " + key); +iter.remove(); +} } return map; } protected abstract Object cleanValue(String ognlName, Object data) throws JSONException; +private boolean allow(String ognl) { +Map includesExcludesMap = getIncludesExcludesMap(); + +boolean allow = !isDefaultBlock(); + +if (includesExcludesMap != null) { +for (String currRule : includesExcludesMap.keySet()) { +Filter f = includesExcludesMap.get(currRule); +if (f.pattern.matcher(ognl).matches()) { +allow = f.allow; +} +} +} + +return allow; +} + +/** + * @return the compiled list of includes and excludes + */ +public Map getIncludesExcludesMap() { +if (allowed == null && blocked == null) { +return includesExcludesMap; +} + +if (includesExcludesMap == null) { +includesExcludesMap
svn commit: r1066628 - in /struts/struts2/trunk: core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java xwork-core/src/main/java/com/opensymphony/xwork2/config/ConfigurationManager.java
Author: jafl Date: Wed Feb 2 21:13:23 2011 New Revision: 1066628 URL: http://svn.apache.org/viewvc?rev=1066628&view=rev Log: WW-3513 allow derived classes to create derived classes of some objects Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/config/ConfigurationManager.java Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java?rev=1066628&r1=1066627&r2=1066628&view=diff == --- struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java (original) +++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java Wed Feb 2 21:13:23 2011 @@ -321,9 +321,9 @@ public class Dispatcher { for (String file : files) { if (file.endsWith(".xml")) { if ("xwork.xml".equals(file)) { -configurationManager.addConfigurationProvider(new XmlConfigurationProvider(file, false)); + configurationManager.addConfigurationProvider(createXmlConfigurationProvider(file, false)); } else { -configurationManager.addConfigurationProvider(new StrutsXmlConfigurationProvider(file, false, servletContext)); + configurationManager.addConfigurationProvider(createStrutsXmlConfigurationProvider(file, false, servletContext)); } } else { throw new IllegalArgumentException("Invalid configuration file name"); @@ -331,6 +331,14 @@ public class Dispatcher { } } +protected XmlConfigurationProvider createXmlConfigurationProvider(String filename, boolean errorIfMissing) { +return new XmlConfigurationProvider(filename, errorIfMissing); +} + +protected XmlConfigurationProvider createStrutsXmlConfigurationProvider(String filename, boolean errorIfMissing, ServletContext ctx) { +return new StrutsXmlConfigurationProvider(filename, errorIfMissing, ctx); +} + private void init_CustomConfigurationProviders() { String configProvs = initParams.get("configProviders"); if (configProvs != null) { @@ -402,7 +410,7 @@ public class Dispatcher { public void init() { if (configurationManager == null) { - configurationManager = new ConfigurationManager(BeanSelectionProvider.DEFAULT_BEAN_NAME); + configurationManager = createConfigurationManager(BeanSelectionProvider.DEFAULT_BEAN_NAME); } try { @@ -430,6 +438,10 @@ public class Dispatcher { } } +protected ConfigurationManager createConfigurationManager(String name) { +return new ConfigurationManager(name); +} + /** * Load Action class for mapping and invoke the appropriate Action method, or go directly to the Result. * Modified: struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/config/ConfigurationManager.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/config/ConfigurationManager.java?rev=1066628&r1=1066627&r2=1066628&view=diff == --- struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/config/ConfigurationManager.java (original) +++ struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/config/ConfigurationManager.java Wed Feb 2 21:13:23 2011 @@ -61,7 +61,7 @@ public class ConfigurationManager { */ public synchronized Configuration getConfiguration() { if (configuration == null) { -setConfiguration(new DefaultConfiguration(defaultFrameworkBeanName)); +setConfiguration(createConfiguration(defaultFrameworkBeanName)); try { configuration.reloadContainer(getContainerProviders()); } catch (ConfigurationException e) { @@ -75,6 +75,10 @@ public class ConfigurationManager { return configuration; } +protected Configuration createConfiguration(String beanName) { +return new DefaultConfiguration(beanName); +} + public synchronized void setConfiguration(Configuration configuration) { this.configuration = configuration; }
svn commit: r1066692 - /struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/config/entities/
Author: jafl Date: Wed Feb 2 23:27:33 2011 New Revision: 1066692 URL: http://svn.apache.org/viewvc?rev=1066692&view=rev Log: XW-387 enable derived classes of config and derived classes of config bulders Modified: struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/config/entities/ActionConfig.java struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/config/entities/ExceptionMappingConfig.java struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/config/entities/InterceptorConfig.java struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/config/entities/InterceptorStackConfig.java struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/config/entities/PackageConfig.java struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/config/entities/ResultConfig.java struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/config/entities/ResultTypeConfig.java Modified: struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/config/entities/ActionConfig.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/config/entities/ActionConfig.java?rev=1066692&r1=1066691&r2=1066692&view=diff == --- struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/config/entities/ActionConfig.java (original) +++ struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/config/entities/ActionConfig.java Wed Feb 2 23:27:33 2011 @@ -214,7 +214,7 @@ public class ActionConfig extends Locate */ public static class Builder implements InterceptorListHolder{ -private ActionConfig target; +protected ActionConfig target; public Builder(ActionConfig toClone) { target = new ActionConfig(toClone); @@ -240,12 +240,12 @@ public class ActionConfig extends Locate } public Builder defaultClassName(String name) { - if (StringUtils.isEmpty(target.className)) { - target.className = name; - } +if (StringUtils.isEmpty(target.className)) { +target.className = name; +} return this; } - + public Builder methodName(String method) { target.methodName = method; return this; @@ -326,14 +326,18 @@ public class ActionConfig extends Locate } public ActionConfig build() { +embalmTarget(); +ActionConfig result = target; +target = new ActionConfig(target); +return result; +} + +protected void embalmTarget() { target.params = Collections.unmodifiableMap(target.params); target.results = Collections.unmodifiableMap(target.results); target.interceptors = Collections.unmodifiableList(target.interceptors); target.exceptionMappings = Collections.unmodifiableList(target.exceptionMappings); target.allowedMethods = Collections.unmodifiableSet(target.allowedMethods); -ActionConfig result = target; -target = new ActionConfig(target); -return result; } } } Modified: struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/config/entities/ExceptionMappingConfig.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/config/entities/ExceptionMappingConfig.java?rev=1066692&r1=1066691&r2=1066692&view=diff == --- struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/config/entities/ExceptionMappingConfig.java (original) +++ struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/config/entities/ExceptionMappingConfig.java Wed Feb 2 23:27:33 2011 @@ -32,11 +32,10 @@ import java.util.Map; */ public class ExceptionMappingConfig extends Located implements Serializable { -private String name; -private String exceptionClassName; -private String result; -private Map params; - +protected String name; +protected String exceptionClassName; +protected String result; +protected Map params; protected ExceptionMappingConfig(String name, String exceptionClassName, String result) { this.name = name; @@ -68,7 +67,6 @@ public class ExceptionMappingConfig exte return params; } - @Override public boolean equals(Object o) { if (this == o) { @@ -121,7 +119,7 @@ public class ExceptionMappingConfig exte */ public static class Builder{ -private ExceptionMappingConfig target; +protected ExceptionMappingConfig target; public Builder(ExceptionMappingConfig toClone) {
[CONF] Confluence Changes in the last 24 hours
This is a daily summary of all recent changes in Confluence. - Updated Spaces: - Apache ActiveMQ (https://cwiki.apache.org/confluence/display/ACTIVEMQ) Pages - AMQ Message Store edited by dejanb (07:41 AM) https://cwiki.apache.org/confluence/display/ACTIVEMQ/AMQ+Message+Store Apache Bean Validation (https://cwiki.apache.org/confluence/display/BeanValidation) Pages - Samples edited by allee8...@gmail.com (02:02 PM) https://cwiki.apache.org/confluence/display/BeanValidation/Samples Apache Camel (https://cwiki.apache.org/confluence/display/CAMEL) Pages - OnCompletion edited by ericjohnson (03:44 PM) https://cwiki.apache.org/confluence/display/CAMEL/OnCompletion User Guide edited by davsclaus (02:32 AM) https://cwiki.apache.org/confluence/display/CAMEL/User+Guide Apache CXF (https://cwiki.apache.org/confluence/display/CXF) Pages - FAQ edited by dkulp (08:28 PM) https://cwiki.apache.org/confluence/display/CXF/FAQ Support edited by dkulp (08:26 PM) https://cwiki.apache.org/confluence/display/CXF/Support Commercial CXF Offerings created by dkulp (08:22 PM) https://cwiki.apache.org/confluence/display/CXF/Commercial+CXF+Offerings Automated Builds created by dkulp (05:47 PM) https://cwiki.apache.org/confluence/display/CXF/Automated+Builds Navigation edited by dkulp (05:41 PM) https://cwiki.apache.org/confluence/display/CXF/Navigation Apache CXF Documentation (https://cwiki.apache.org/confluence/display/CXF20DOC) Pages - Index edited by dkulp (08:42 PM) https://cwiki.apache.org/confluence/display/CXF20DOC/Index JAX-RS Advanced Features edited by sergey_beryozkin (08:18 AM) https://cwiki.apache.org/confluence/display/CXF20DOC/JAX-RS+Advanced+Features JAX-RS edited by sergey_beryozkin (08:06 AM) https://cwiki.apache.org/confluence/display/CXF20DOC/JAX-RS WSDL to Java edited by mazzag (07:48 AM) https://cwiki.apache.org/confluence/display/CXF20DOC/WSDL+to+Java Developing a Service edited by mazzag (07:47 AM) https://cwiki.apache.org/confluence/display/CXF20DOC/Developing+a+Service OODT (https://cwiki.apache.org/confluence/display/OODT) Pages - Release Process edited by pramirez (12:54 PM) https://cwiki.apache.org/confluence/display/OODT/Release+Process OpenJPA (https://cwiki.apache.org/confluence/display/openjpa) Pages - Downloads edited by michael.d.d...@gmail.com (05:18 PM) https://cwiki.apache.org/confluence/display/openjpa/Downloads Documentation edited by michael.d.d...@gmail.com (05:11 PM) https://cwiki.apache.org/confluence/display/openjpa/Documentation Apache Roller (https://cwiki.apache.org/confluence/display/ROLLER) Pages - How to debug Roller created by shela...@gmail.com (04:41 AM) https://cwiki.apache.org/confluence/display/ROLLER/How+to+debug+Roller Apache Santuario (https://cwiki.apache.org/confluence/display/SANTUARIO) Pages - Navigation edited by cohei...@apache.org (05:42 AM) https://cwiki.apache.org/confluence/display/SANTUARIO/Navigation - Users - md.irfanulla https://cwiki.apache.org/confluence/display/~md.irfanulla Change your notification preferences: https://cwiki.apache.org/confluence/users/viewnotifications.action