[ 
https://issues.apache.org/jira/browse/PLUTO-677?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Neil Griffin closed PLUTO-677.
------------------------------
    Resolution: Fixed

Fixed in commit 
[b2f2f3db283d20af0f6f21a91ed9eddfbf122fec|https://github.com/apache/portals-pluto/commit/b2f2f3db283d20af0f6f21a91ed9eddfbf122fec].

> TCK: Contesting DispatcherTests3S_SPEC2_19_ForwardServletRender_dispatch4
> -------------------------------------------------------------------------
>
>                 Key: PLUTO-677
>                 URL: https://issues.apache.org/jira/browse/PLUTO-677
>             Project: Pluto
>          Issue Type: Bug
>          Components: tck
>    Affects Versions: 3.0.0
>            Reporter: Neil Griffin
>            Assignee: Scott Nicklous
>             Fix For: 3.0.1
>
>
> Section 25.1.1 of the Portlet 3.0 Specification titled "Query Strings in 
> Request Dispatcher Paths" states:
> {quote}
> The portlet container must aggregate parameters specified in the query string 
> used to create the PortletRequestDispatcher with the portlet render 
> parameters. Query string parameters take precedence over other portlet render 
> parameters of the same name passed to the servlet or JSP
> targeted by the forward or include.
> The parameters associated with a PortletRequestDispatcher are scoped to apply 
> only for the duration of the forward or include call.
> {quote}
> The DispatcherTests3S_SPEC2_19_ForwardServletRender_dispatch4 test in the 
> Portlet 3.0 TCK attempts to test the following requirement in a RenderRequest:
> {quote}
> The parameters associated with a PortletRequestDispatcher are scoped to apply 
> only for the duration of the forward or include call.
> {quote}
> It does this by creating a PortletRequestDispatcher that targets a servlet 
> and invoking the {{forward(PortletRequest,PortletResponse)}} method:
> {code:java|title=DispatcherTests3S_SPEC2_19_ForwardServletRender.java}
> String target = SERVLET_PREFIX + 
> "DispatcherTests3S_SPEC2_19_ForwardServletRender_servlet" + SERVLET_SUFFIX + 
> "?"
>             + QUERY_STRING;
> PortletRequestDispatcher rd = 
> portletConfig.getPortletContext().getRequestDispatcher(target);
> rd.forward(portletReq, portletResp);
> {code}
> It also compares the PortletRequest parameter map values before and after the 
> forward, attempting to ensure that the names and corresponding values are the 
> same. If they are different, the test attempts to write the results of the 
> comparison to the response:
> {code:java|title=DispatcherTests3S_SPEC2_19_ForwardServletRender.java}
> CompareUtils.mapsEqual("Before dispatch", oldmap, "After dispatch", newmap, 
> tr0);
> tr0.writeTo(writer);
> {code}
> The problem is that this conflicts with Section 25.5 of the Portlet 3.0 
> Specification titled "The forward Method" which states:
> {quote}
> Before the RequestDispatcher interface forward method returns, the portlet 
> container must flush any response data to the portal application and close 
> the output stream for the portlet, unless the request was put into 
> asynchronous mode. If an error occurs in the target of a request dispatcher 
> forward, the exception may be propagated back through all of the calling 
> filters and
> servlets and eventually back to the portlet container.
> {quote}
> Although the test passes on Pluto, the test fails on Liferay Portal because 
> Liferay properly properly closes the output stream of the portlet after the 
> {{forward}} method is called.
> Therefore test (as currently) designed seems to be invalid. The proposed fix 
> would be to save the comparison test results in a PortletSession attribute so 
> that it could be retrieved on a successive click of the RenderURL that is 
> output by the servlet.



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

Reply via email to