[ https://issues.apache.org/jira/browse/PLUTO-654?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Neil Griffin closed PLUTO-654. ------------------------------ Resolution: Fixed > The initParams variable in FilterImpl.java does not preserve the order in > which init-params are added > ----------------------------------------------------------------------------------------------------- > > Key: PLUTO-654 > URL: https://issues.apache.org/jira/browse/PLUTO-654 > Project: Pluto > Issue Type: Bug > Components: portlet container > Reporter: Neil Griffin > Assignee: Neil Griffin > Fix For: 3.0.0 > > > The FilterImpl.java class contains an in-memory representation of the filter > configuration found in the portlet.xml descriptor. Here is an example from > the TCK: > {code:xml|title=portlet.xml} > <filter> > <filter-name>AddlFilterTests_SPEC2_20_Filter1</filter-name> > > <filter-class>javax.portlet.tck.portlets.AddlFilterTests_SPEC2_20_Filter</filter-class> > <lifecycle>ACTION_PHASE</lifecycle> > <lifecycle>EVENT_PHASE</lifecycle> > <lifecycle>RESOURCE_PHASE</lifecycle> > <init-param> > <name>tr2</name> > <value>true</value> > </init-param> > <init-param> > <name>tr3</name> > <value>true</value> > </init-param> > </filter> > {code} > The following TCK test case assumes that the "tr2" and "tr3" init-params > appear in the order in which they appear in the portlet.xml descriptor: > {code:java|title=AddlFilterTests_SPEC2_20_Filter.java} > /* TestCase: V2AddlFilterTests_SPEC2_20_Action_filter11 */ > /* Details: "For multiple filter declarations for a single filter */ > /* class, the filter instance must receive only initialization */ > /* parameters defined in the filter declaration" */ > if (portletNameAction != null && > portletNameAction.equals("AddlFilterTests_SPEC2_20_Action") > && filterName.equals("AddlFilterTests_SPEC2_20_Filter1")) { > Enumeration<String> initParams = config.getInitParameterNames(); > if (initParams.nextElement().equals("tr2") && > initParams.nextElement().equals("tr3")) { > ... > } > } > {code} > The problem is that FilterImpl.java defines the initParams as > java.util.HashMap which does not guarantee order: > {code:java|title=FilterImpl.java} > public class FilterImpl implements Filter { > ... > private final Map<String, InitParam> initParams = new HashMap<String, > InitParam>(); > {code} > In order for this test case to pass on all operating systems and JVMs, the > initParams variable should be java.util.LinkedHashMap. -- This message was sent by Atlassian JIRA (v6.3.4#6332)