Neil Griffin created PLUTO-654:
----------------------------------
Summary: 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)