You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jetspeed-user@portals.apache.org by "Heins, Hendrik" <he...@evodion.de> on 2004/12/07 12:45:31 UTC

Form mistakenly invokes Turbine action

Hi,

I have a problem with an application that I expose as a portlet via a ProxyPortlet. The following html-code causes the trouble :

      </p><form action="Edit.jsp?page=Main" method="post" accept-charset="ISO-8859-1">

      

      
      <input name="page" value="Main" type="hidden">
      <input name="action" value="save" type="hidden">
      <input name="edittime" value="1101230928000" type="hidden">

      

      <textarea class="editor" wrap="virtual" name="text" rows="25" cols="80" style="width: 100%;">

The hidden input field "page" seems to invoke a turbine action called "save" that is off course unknown to Jetspeed. When I rename this input field
no exceptions from Jetspeed occur ( but form the application ) and the data is passed to the portlet.

java.lang.ClassNotFoundException: 

	Requested Action not found: save
	Turbine looked in the following modules.packages path: 
	[org.apache.jetspeed.modules, org.apache.turbine.modules, org.apache.jetspeed.fusion.modules]

	at org.apache.turbine.modules.ActionLoader.getInstance(ActionLoader.java:174)
	at org.apache.turbine.modules.ActionLoader.exec(ActionLoader.java:122)
	at org.apache.turbine.modules.pages.DefaultPage.doBuild(DefaultPage.java:143)
	at org.apache.turbine.modules.Page.build(Page.java:90)
	at org.apache.turbine.modules.PageLoader.exec(PageLoader.java:123)
	at org.apache.turbine.Turbine.doGet(Turbine.java:563)
	at org.apache.turbine.Turbine.doPost(Turbine.java:658)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214)
	at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
	at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:198)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:152)
	at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137)
	at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:118)
	at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
	at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929)
	at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705)
	at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577)
	at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)
	at java.lang.Thread.run(Thread.java:534)


In turbine.log I found the following exception :

java.lang.Exception: redirecting
	at org.apache.jetspeed.fusion.modules.actions.FusionAccessController.doPerform(FusionAccessController.java:151)
	at org.apache.turbine.modules.Action.perform(Action.java:87)
	at org.apache.turbine.modules.ActionLoader.exec(ActionLoader.java:122)
	at org.apache.turbine.Turbine.doGet(Turbine.java:529)
	at org.apache.turbine.Turbine.doPost(Turbine.java:658)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214)
	at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
	at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:198)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:152)
	at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137)
	at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:118)
	at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
	at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929)
	at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705)
	at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577)
	at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)
	at java.lang.Thread.run(Thread.java:534)

After browsing through the code I found the following class :

public final class PortalReservedParameters
{
    public final static String PORTLET = "portlet";
    public final static String PORTLET_ENTITY = "entity";        
    public final static String PAGE = "page";
    public final static String PIPELINE = "pipeline";
    public final static String DEFAULT_PIPELINE = "jetspeed-pipeline";
    public final static String PORTLET_PIPELINE = "portlet-pipeline";
    public final static String ACTION_PIPELINE = "action-pipeline";
    
    // Session and Request attribute keys
    public static final String PAGE_ATTRIBUTE_KEY = "org.apache.jetspeed.Page";
    public static final String SESSION_KEY_SUBJECT = "org.apache.jetspeed.security.subject";
}

So it looks like "page" is a reserved parameter that a portlet cannot use.
Yes, a solution could be to change the name of the hidden input field to something else, but as I said, this is an existing application. Changing that would mean a lot of work.
I am not 100 % sure, but I thought I tested this form 2 weeks ago and it worked, so maybe the problem is somewehre else.
If the portal uses reserved parameters, couldn't you add a prefix to it. Like "jetspeed_page", as it is unlikely that another app uses this name ?
Please help !!!

Kind regards
Hendrik Heins