You are viewing a plain text version of this content. The canonical link for it is here.
Posted to pluto-dev@portals.apache.org by "Neil Griffin (JIRA)" <ji...@apache.org> on 2016/12/29 18:05:58 UTC

[jira] [Closed] (PLUTO-654) The initParams variable in FilterImpl.java does not preserve the order in which init-params are added

     [ 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)