/* * Copyright 2002-2006,2009 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.opensymphony.xwork2.interceptor; import com.opensymphony.xwork2.*; import com.opensymphony.xwork2.config.Configuration; import com.opensymphony.xwork2.config.ConfigurationException; import com.opensymphony.xwork2.config.ConfigurationProvider; import com.opensymphony.xwork2.config.entities.ActionConfig; import com.opensymphony.xwork2.config.entities.InterceptorConfig; import com.opensymphony.xwork2.config.entities.InterceptorMapping; import com.opensymphony.xwork2.config.entities.PackageConfig; import com.opensymphony.xwork2.config.entities.ResultConfig; import com.opensymphony.xwork2.config.providers.XmlConfigurationProvider; import com.opensymphony.xwork2.inject.ContainerBuilder; import com.opensymphony.xwork2.util.location.LocatableProperties; import java.util.*; import org.apache.struts2.TestResult; /** * Unit test for {@link ChainingInterceptor} with a configuration provider. * */ public class ChainingInterceptorWithConfigTest extends XWorkTestCase { static String CHAINED_ACTION = "chainedAction"; static String CHAINTO_ACTION = "chaintoAction"; ObjectFactory objectFactory; public void testTwoExcludesPropertiesChained() throws Exception { assertNotNull(objectFactory); ActionProxy proxy = actionProxyFactory.createActionProxy("", CHAINED_ACTION, null, null); SimpleAction chainedAction = (SimpleAction) proxy.getAction(); chainedAction.setBar(1); chainedAction.setFoo(1); chainedAction.setBlah("WW-4528"); proxy.execute(); } @Override protected void setUp() throws Exception { super.setUp(); XmlConfigurationProvider provider = new XmlConfigurationProvider("xwork-default.xml"); container.inject(provider); this.objectFactory = container.getInstance(ObjectFactory.class); loadConfigurationProviders(provider, new MockConfigurationProvider()); } private class MockConfigurationProvider implements ConfigurationProvider { private Configuration config; public void init(Configuration configuration) throws ConfigurationException { this.config = configuration; } public boolean needsReload() { return false; } public void destroy() { } public void register(ContainerBuilder builder, LocatableProperties props) throws ConfigurationException { if (!builder.contains(ObjectFactory.class)) { builder.factory(ObjectFactory.class); } if (!builder.contains(ActionProxyFactory.class)) { builder.factory(ActionProxyFactory.class, DefaultActionProxyFactory.class); } } public void loadPackages() throws ConfigurationException { HashMap<String, String> interceptorParams = new HashMap<>(); interceptorParams.put("excludes", "blah,bar"); HashMap successParams1 = new HashMap(); successParams1.put("propertyName", "baz"); successParams1.put("expectedValue", 1); HashMap successParams2 = new HashMap(); successParams2.put("propertyName", "blah"); successParams2.put("expectedValue", null); InterceptorConfig chainingInterceptorConfig = new InterceptorConfig.Builder("chainStack", ChainingInterceptor.class.getName()).build(); PackageConfig packageConfig = new PackageConfig.Builder("default") .addActionConfig(CHAINED_ACTION, new ActionConfig.Builder("defaultPackage", CHAINED_ACTION, SimpleAction.class.getName()) .addResultConfig(new ResultConfig.Builder(Action.ERROR, ActionChainResult.class.getName()).addParam("actionName", CHAINTO_ACTION).build()) .build()) .addActionConfig(CHAINTO_ACTION, new ActionConfig.Builder("defaultPackage", CHAINTO_ACTION, SimpleAction.class.getName()) .addInterceptors(Collections.singletonList(new InterceptorMapping("chainStack", objectFactory.buildInterceptor(chainingInterceptorConfig, interceptorParams)))) .addResultConfig(new ResultConfig.Builder(Action.SUCCESS, TestResult.class.getName()).addParams(successParams1).build()) .addResultConfig(new ResultConfig.Builder(Action.ERROR, TestResult.class.getName()).addParams(successParams2).build()) .build()) .build(); config.addPackageConfig("defaultPackage", packageConfig); config.addPackageConfig("default", new PackageConfig.Builder(packageConfig).name("default").build()); } } }