You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by "Kent Tong (JIRA)" <ji...@apache.org> on 2008/10/11 12:28:44 UTC

[jira] Commented: (WICKET-1132) Liferay portlet support

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