[ 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&p_p_action=1&p_p_state=normal&p_p_mode=view&p_p_col_id=column-1&p_p_col_count=1&_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.