[ http://issues.apache.org/jira/browse/BEEHIVE-158?page=history ]
carlin rogers reassigned BEEHIVE-158: ------------------------------------- Assign To: carlin rogers > IllegalArgumentException when calling an action from a Tiles Definition XML > file. > --------------------------------------------------------------------------------- > > Key: BEEHIVE-158 > URL: http://issues.apache.org/jira/browse/BEEHIVE-158 > Project: Beehive > Type: Bug > Components: NetUI > Versions: V1Alpha > Environment: Testing on Windows XP running the normal required components of > Beehive: JDK 1.5, Tomcat 5.0.25. > Reporter: Nathan Jantz > Assignee: carlin rogers > > There is a feature in tiles where you can specify an action URL within a > Tiles XML Definition file using a ‘path’ attribute like so: > <definition name="tilesDirectActionCall.page" path="/someOtherAction.do"> > <put name="title" value="Tiles Direct Action Call Page" /> > </definition> > So within a traditional Struts/Tiles app, you can have an action defined in > the struts-config to call the above definition and in turn the definition can > call yet another action. > I’ve tried this scenario in context of a Page Flow webapp and I don’t get the > expected result. I get an IllegalArgumentException (full stack trace below). > The expected result was to get a page/layout display according to the action > ‘someOtherAction.do’. > Here are some additional observations from Carlin: > -------------------------- > When the initial action forwards to the tiles definition, we call > TilesRequestProcessor.processTilesDefinition(). This method then calls > doForward() to the action given in the path attribute. > The forward processes this next action and again we process it's forward > config, calling TilesRequestProcessor.processTilesDefinition(). This time > there is a tiles ComponentContext attribute on the request which implies we > do an include (RequestProcessor.doInclude()). The ComponentContext is just a > map of the components that should be used in a given template (e.g. footer -> > footer.jsp). > The doInclude fails in servletContext.getRequestDispatcher() because the URI > argument for the JSP does not start with a '/' character, the > IllegalArgumentException. > Should we be doing something with the URI that we pass to doInlcude()? > Or do we want to be getting the RequestDispatcher from the request for page > flows? > -------------------------- > Stack Trace: > 2005-01-12 09:48:11 StandardWrapperValve[action]: Servlet.service() for > servlet > action threw exception java.lang.IllegalArgumentException: Path > main.layout-1.jsp does not start with a "/" character > at > org.apache.catalina.core.ApplicationContext.getRequestDispatcher(ApplicationContext.java:378) > at > org.apache.catalina.core.ApplicationContextFacade.getRequestDispatche > r(ApplicationContextFacade.java:196) > at > org.apache.struts.action.RequestProcessor.doInclude(RequestProcessor. > java:1080) > at > org.apache.struts.tiles.TilesRequestProcessor.processTilesDefinition( > TilesRequestProcessor.java:235) > at > org.apache.beehive.netui.pageflow.PageFlowRequestProcessor.processFor > wardConfig(PageFlowRequestProcessor.java:1431) > at > org.apache.struts.action.RequestProcessor.process(RequestProcessor.ja > va:231) > at > org.apache.beehive.netui.pageflow.PageFlowRequestProcessor.processInt > ernal(PageFlowRequestProcessor.java:571) > at > org.apache.beehive.netui.pageflow.PageFlowRequestProcessor.process(Pa > geFlowRequestProcessor.java:763) > at > org.apache.beehive.netui.pageflow.AutoRegisterActionServlet.process(A > utoRegisterActionServlet.java:607) > at > org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:397) > at javax.servlet.http.HttpServlet.service(HttpServlet.java:697) > at javax.servlet.http.HttpServlet.service(HttpServlet.java:810) > at > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appl > icationFilterChain.java:237) > at > org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationF > ilterChain.java:157) > at > org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDisp > atcher.java:703) > at > org.apache.catalina.core.ApplicationDispatcher.processRequest(Applica > tionDispatcher.java:463) > at > org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationD > ispatcher.java:398) > at > org.apache.atalina.core.ApplicationDispatcher.forward(ApplicationDis > patcher.java:312) > at > org.apache.beehive.netui.pageflow.internal.DefaultForwardRedirectHand > ler.forward(DefaultForwardRedirectHandler.java:114) > at > org.apache.beehive.netui.pageflow.PageFlowRequestProcessor.doForward( > PageFlowRequestProcessor.java:1631) > at > org.apache.struts.tiles.TilesRequestProcessor.processTilesDefinition( > TilesRequestProcessor.java:237) > at > org.apache.beehive.netui.pageflow.PageFlowRequestProcessor.processFor > wardConfig(PageFlowRequestProcessor.java:1431) > at > org.apache.struts.action.RequestProcessor.process(RequestProcessor.ja > va:231) > at > org.apache.beehive.netui.pageflow.PageFlowRequestProcessor.processInt > ernal(PageFlowRequestProcessor.java:571) > at > org.apache.beehive.netui.pageflow.PageFlowRequestProcessor.process(Pa > geFlowRequestProcessor.java:763) > at > org.apache.beehive.netui.pageflow.AutoRegisterActionServlet.process(A > utoRegisterActionServlet.java:607) > at > org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:397) > at javax.servlet.http.HttpServlet.service(HttpServlet.java:697) > at javax.servlet.http.HttpServlet.service(HttpServlet.java:810) > at > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appl > icationFilterChain.java:237) > at > org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationF > ilterChain.java:157) > at > org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperV > alve.java:214) > at > org.apache.catalina.core.StandardValveContext.invokeNext(StandardValv > eContext.java:104) > at > org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.jav > a:520) > at > org.apache.catalina.core.StandardContextValve.invokeInternal(Standard > ContextValve.java:198) > at > org.apache.catalina.core.StandardContextValve.invoke(StandardContextV > alve.java:152) > at > org.apache.catalina.core.StandardValveContext.invokeNext(StandardValv > eContext.java:104) > at > org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.jav > a:520) > at > org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.j > ava:137) > at > org.apache.catalina.core.StandardValveContext.invokeNext(StandardValv > eContext.java:104) > at > org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.j > ava:117) > at > org.apache.catalina.core.StandardValveContext.invokeNext(StandardValv > eContext.java:102) > at > org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.jav > a:520) > at > org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineVal > ve.java:109) > at > org.apache.catalina.core.StandardValveContext.invokeNext(StandardValv > eContext.java:104) > at > org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.jav > a:520) > at > org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929) > at > org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:16 > 0) > at > org.apache.coyote.http11.Http11Processor.process(Http11Processor.java > :793) > at > org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.proce > ssConnection(Http11Protocol.java:702) > at > org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java > :571) > at > org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadP > ool.java:644) > at java.lang.Thread.run(Thread.java:595) -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://issues.apache.org/jira/secure/Administrators.jspa - If you want more information on JIRA, or have a bug to report see: http://www.atlassian.com/software/jira