[ 
https://issues.apache.org/jira/browse/WICKET-1132?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12638737#action_12638737
 ] 

Kent Tong commented on WICKET-1132:
-----------------------------------

I've created a ServletContextProvider for liferay using inspection, without any 
reference to the liferay portal implementation classes:

package test;

import javax.portlet.GenericPortlet;
import javax.portlet.PortletRequest;
import javax.portlet.PortletResponse;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.portals.bridges.common.ServletContextProvider;

public class MyServletContextProvider implements ServletContextProvider {
        public ServletContext getServletContext(GenericPortlet portlet) {
                return (ServletContext) callMethod(portlet.getPortletContext(),
                                "getServletContext");
        }

        private Object callMethod(Object obj, String methodName) {
                try {
                        return obj.getClass().getMethod(methodName).invoke(obj);
                } catch (Exception e) {
                        throw new RuntimeException(e);
                }
        }

        public HttpServletRequest getHttpServletRequest(GenericPortlet portlet,
                        PortletRequest portletRequest) {
                return (HttpServletRequest) callMethod(portletRequest,
                                "getHttpServletRequest");
        }

        public HttpServletResponse getHttpServletResponse(GenericPortlet 
portlet,
                        PortletResponse portletResponse) {

                return (HttpServletResponse) callMethod(portletResponse,
                                "getHttpServletResponse");
        }

}

However, when a form in the portlet is submitted, I get a NullPointerException 
in WebResponse.write(WebResponse.java:355).
The issue is that the Wicket portlet code thinks the request is an action 
request but Wicket is closing the response writer.
The HTTP request as view in WicketFilter.java is:

[method = POST, protocol = HTTP/1.1, requestURL = 
http://localhost:8080/c/portal/layout, contentType = 
application/x-www-form-urlencoded, contentLength = 46, contextPath = /portlet3, 
pathInfo = null, requestURI = /portlet3/app/, servletPath = /app, 
pathTranslated = 
/home/kent/liferay-portal-tomcat-6.0-5.1.1/webapps/ROOT/guest/home]

The stack trace is here:
request.get1651409 [http-8080-2] ERROR 
org.apache.wicket.protocol.http.WicketFilter - closing the buffer error
java.lang.NullPointerException
        at 
org.apache.wicket.protocol.http.WebResponse.write(WebResponse.java:355)
        at 
org.apache.wicket.protocol.http.BufferedWebResponse.close(BufferedWebResponse.java:73)
        at 
org.apache.wicket.protocol.http.WicketFilter.doGet(WicketFilter.java:403)
        at 
org.apache.wicket.protocol.http.WicketFilter.doFilter(WicketFilter.java:199)
        at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        at 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at 
org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:630)
        at 
org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:535)
        at 
org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:472)
        at 
org.apache.wicket.protocol.http.portlet.WicketPortlet.processRequest(WicketPortlet.java:500)
        at 
org.apache.wicket.protocol.http.portlet.WicketPortlet.processAction(WicketPortlet.java:440)
        at 
com.sun.portal.portletcontainer.appengine.filter.FilterChainImpl.doFilter(FilterChainImpl.java:93)
        at 
com.liferay.portal.kernel.portlet.PortletFilterUtil.doFilter(PortletFilterUtil.java:57)
        at 
com.liferay.portal.kernel.servlet.PortletServlet.service(PortletServlet.java:96)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
        at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
        at 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at 
org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:630)
        at 
org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:535)
        at 
org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:472)
        at com.liferay.portlet.InvokerPortlet.invoke(InvokerPortlet.java:534)
        at 
com.liferay.portlet.InvokerPortlet.invokeAction(InvokerPortlet.java:577)
        at 
com.liferay.portlet.InvokerPortlet.processAction(InvokerPortlet.java:313)
        at 
com.liferay.portal.action.LayoutAction.processPortletRequest(LayoutAction.java:618)
        at 
com.liferay.portal.action.LayoutAction.processLayout(LayoutAction.java:403)
        at com.liferay.portal.action.LayoutAction.execute(LayoutAction.java:188)
        at 
org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)
        at 
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
        at 
com.liferay.portal.struts.PortalRequestProcessor.process(PortalRequestProcessor.java:164)
        at 
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
        at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
        at 
com.liferay.portal.servlet.MainServlet.callParentService(MainServlet.java:444)
        at com.liferay.portal.servlet.MainServlet.service(MainServlet.java:709)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
        at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
        at 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at 
org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:630)
        at 
org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:436)
        at 
org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:374)
        at 
org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:302)
        at 
com.liferay.portal.servlet.FriendlyURLServlet.service(FriendlyURLServlet.java:144)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
        at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
        at 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at 
com.liferay.portal.kernel.servlet.BaseFilter.processFilter(BaseFilter.java:132)
        at 
com.liferay.portal.servlet.filters.strip.StripFilter.processFilter(StripFilter.java:117)
        at 
com.liferay.portal.kernel.servlet.BaseFilter.doFilter(BaseFilter.java:71)
        at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        at 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at 
com.liferay.portal.kernel.servlet.BaseFilter.processFilter(BaseFilter.java:132)
        at 
com.liferay.portal.servlet.filters.compression.CompressionFilter.processFilter(CompressionFilter.java:141)
        at 
com.liferay.portal.kernel.servlet.BaseFilter.doFilter(BaseFilter.java:71)
        at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        at 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at 
com.liferay.portal.kernel.servlet.BaseFilter.processFilter(BaseFilter.java:132)
        at 
com.liferay.portal.servlet.filters.secure.SecureFilter.processFilter(SecureFilter.java:282)
        at 
com.liferay.portal.kernel.servlet.BaseFilter.doFilter(BaseFilter.java:71)
        at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        at 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at 
com.liferay.portal.kernel.servlet.BaseFilter.processFilter(BaseFilter.java:132)
        at 
com.liferay.portal.kernel.servlet.BaseFilter.doFilter(BaseFilter.java:74)
        at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        at 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at 
com.liferay.portal.kernel.servlet.BaseFilter.processFilter(BaseFilter.java:132)
        at 
com.liferay.portal.servlet.filters.layoutcache.LayoutCacheFilter.processFilter(LayoutCacheFilter.java:422)
        at 
com.liferay.portal.kernel.servlet.BaseFilter.doFilter(BaseFilter.java:71)
        at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        at 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at 
com.liferay.portal.kernel.servlet.BaseFilter.processFilter(BaseFilter.java:132)
        at 
com.liferay.portal.servlet.filters.autologin.AutoLoginFilter.processFilter(AutoLoginFilter.java:199)
        at 
com.liferay.portal.kernel.servlet.BaseFilter.doFilter(BaseFilter.java:71)
        at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        at 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at 
com.liferay.portal.kernel.servlet.BaseFilter.processFilter(BaseFilter.java:132)
        at 
com.liferay.portal.servlet.filters.sso.opensso.OpenSSOFilter.processFilter(OpenSSOFilter.java:73)
        at 
com.liferay.portal.kernel.servlet.BaseFilter.doFilter(BaseFilter.java:71)
        at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        at 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at 
com.liferay.portal.kernel.servlet.BaseFilter.processFilter(BaseFilter.java:132)
        at 
com.liferay.portal.servlet.filters.virtualhost.VirtualHostFilter.doFilter(VirtualHostFilter.java:185)
        at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        at 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at 
com.liferay.portal.kernel.servlet.BaseFilter.processFilter(BaseFilter.java:132)
        at 
com.liferay.portal.kernel.servlet.BaseFilter.doFilter(BaseFilter.java:74)
        at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        at 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at 
org.tuckey.web.filters.urlrewrite.UrlRewriteFilter.doFilter(UrlRewriteFilter.java:738)
        at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        at 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at 
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
        at 
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
        at 
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:433)
        at 
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
        at 
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
        at 
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
        at 
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
        at 
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
        at 
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
        at 
org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
        at java.lang.Thread.run(Thread.java:619)


> Liferay portlet support
> -----------------------
>
>                 Key: WICKET-1132
>                 URL: https://issues.apache.org/jira/browse/WICKET-1132
>             Project: Wicket
>          Issue Type: Bug
>          Components: wicket-portlet
>    Affects Versions: 1.3.0-beta4
>         Environment: Liferay 4.3.3 on Tomcat 6
>            Reporter: Thijs Vonk
>            Assignee: Ate Douma
>         Attachments: patch-jira-wicket-1132.patch
>
>
> I created 2 simple Links a AjaxLink and a 'normal' link in a portlet. I 
> deployed this portlet on Liferay. The normal link works fine. But the Ajax 
> links doesn't work. In the generated HTML the url's look like this.
> AJAX link: 
> <a href="#" wicket:id="link" onclick="var 
> wcall=wicketAjaxGet('http://localhost:8080/web/guest/admin?p_p_id=MiniPortlet&p_p_action=1&p_p_col_id=column-1&p_p_col_count=1&;',null,null,
>  function() {return Wicket.$$(this)}.bind(this));return !wcall;" 
> id="id__MiniPortlet__WAR__MiniPortlet1____link1">
> Normal link:
> <a 
> href="http://localhost:8080/web/guest/admin?p_p_id=MiniPortlet_WAR_MiniPortlet1&amp;p_p_action=1&amp;p_p_state=normal&amp;p_p_mode=view&amp;p_p_col_id=column-1&amp;p_p_col_count=1&amp;_MiniPortlet_WAR_MiniPortlet1__wu=%2Fminiportlet%2F%3Fwicket%3Ainterface%3D%3A0%3Alink2%3A%3AILinkListener%3A%3A";
>  wicket:id="link2">
> At this moment the p_p_id is the part that I'm looking into. As you can see 
> they are different. And for Liferay this part tels it which portlet it should 
> send the request to. The normal link is the correct path to the portlet. as 
> this action actually works.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to