You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@beehive.apache.org by ri...@apache.org on 2005/05/13 22:29:26 UTC
svn commit: r170084 - in /incubator/beehive/trunk/netui:
src/pageflow/org/apache/beehive/netui/pageflow/
src/pageflow/org/apache/beehive/netui/pageflow/internal/
test/webapps/drt/coreWeb/miniTests/servletInclude/
test/webapps/drt/testRecorder/tests/
Author: rich
Date: Fri May 13 13:29:25 2005
New Revision: 170084
URL: http://svn.apache.org/viewcvs?rev=170084&view=rev
Log:
Fixes for:
- http://issues.apache.org/jira/browse/BEEHIVE-722 : NoClassDefFoundError when hitting an action with a similar name to a public class
- http://issues.apache.org/jira/browse/BEEHIVE-725 : Page inputs do not work when a Page Flow action is hit through a Servlet include
tests: bvt in netui, bvt.jsf-ri and bvt.myfaces in netui/test/webapps/jsf (WinXP)
BB: self (linux)
Modified:
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowActionServlet.java
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowPageFilter.java
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowRequestProcessor.java
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/FacesBackingBeanFactory.java
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/servletInclude/Controller.jpf
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/servletInclude/index.jsp
incubator/beehive/trunk/netui/test/webapps/drt/testRecorder/tests/ServletInclude.xml
Modified: incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowActionServlet.java
URL: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowActionServlet.java?rev=170084&r1=170083&r2=170084&view=diff
==============================================================================
--- incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowActionServlet.java (original)
+++ incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowActionServlet.java Fri May 13 13:29:25 2005
@@ -21,6 +21,7 @@
import org.apache.beehive.netui.pageflow.internal.InternalConstants;
import org.apache.beehive.netui.pageflow.internal.PageFlowRequestWrapper;
+import org.apache.beehive.netui.pageflow.internal.InternalUtils;
import org.apache.beehive.netui.pageflow.handler.Handlers;
import org.apache.beehive.netui.pageflow.handler.FlowControllerHandlerContext;
import org.apache.beehive.netui.pageflow.handler.ForwardRedirectHandler;
@@ -142,7 +143,7 @@
{
// If this is a direct request for a shared flow (.jpfs) or a Faces backing bean (.jsfb), return a 404 status.
// These are not web-addressable.
- String servletPath = request.getServletPath();
+ String servletPath = InternalUtils.getDecodedServletPath( request );
if ( servletPath.endsWith( InternalConstants.SHARED_FLOW_EXTENSION ) ||
servletPath.endsWith( InternalConstants.FACES_BACKING_EXTENSION ) )
{
Modified: incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowPageFilter.java
URL: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowPageFilter.java?rev=170084&r1=170083&r2=170084&view=diff
==============================================================================
--- incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowPageFilter.java (original)
+++ incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowPageFilter.java Fri May 13 13:29:25 2005
@@ -115,7 +115,7 @@
return;
}
- String servletPath = httpRequest.getServletPath();
+ String servletPath = InternalUtils.getDecodedServletPath( httpRequest );
String extension = FileUtils.getFileExtension( servletPath );
Set validFileExtensions = getValidFileExtensions();
Modified: incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowRequestProcessor.java
URL: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowRequestProcessor.java?rev=170084&r1=170083&r2=170084&view=diff
==============================================================================
--- incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowRequestProcessor.java (original)
+++ incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowRequestProcessor.java Fri May 13 13:29:25 2005
@@ -30,6 +30,7 @@
import org.apache.beehive.netui.pageflow.handler.ReloadableClassHandler;
import org.apache.beehive.netui.pageflow.interceptor.InterceptorException;
import org.apache.beehive.netui.pageflow.interceptor.Interceptors;
+import org.apache.beehive.netui.pageflow.interceptor.Interceptor;
import org.apache.beehive.netui.pageflow.interceptor.action.ActionInterceptorContext;
import org.apache.beehive.netui.pageflow.interceptor.action.InterceptorForward;
import org.apache.beehive.netui.pageflow.interceptor.action.internal.ActionInterceptors;
@@ -2012,9 +2013,16 @@
if ( _log.isDebugEnabled() )
{
- _log.debug( "Action interceptor " + context.getOverridingInterceptor().getClass().getName()
- + " before action " + actionName + ": forwarding to "
- + fwd != null ? fwd.getPath() : "null [no forward]" );
+
+ Interceptor overridingInterceptor = context.getOverridingInterceptor();
+ StringBuffer msg = new StringBuffer();
+ msg.append( "Action interceptor " );
+ msg.append( overridingInterceptor.getClass().getName() );
+ msg.append( " before action " );
+ msg.append( actionName );
+ msg.append( ": forwarding to " );
+ msg.append( fwd != null ? fwd.getPath() : "null [no forward]" );
+ _log.debug( msg.toString() );
}
return fwd;
Modified: incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/FacesBackingBeanFactory.java
URL: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/FacesBackingBeanFactory.java?rev=170084&r1=170083&r2=170084&view=diff
==============================================================================
--- incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/FacesBackingBeanFactory.java (original)
+++ incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/FacesBackingBeanFactory.java Fri May 13 13:29:25 2005
@@ -52,81 +52,35 @@
{
FacesBackingBean bean = null;
- try
+ if ( FileUtils.uriEndsWith( uri, FACES_EXTENSION ) || FileUtils.uriEndsWith( uri, JSF_EXTENSION ) )
{
- Class backingClass =
- Handlers.get( servletContext ).getReloadableClassHandler().loadCachedClass( backingClassName );
+ bean = loadFacesBackingBean( request, servletContext, backingClassName );
- if ( backingClass == null )
- {
- if ( _log.isTraceEnabled() )
- {
- _log.trace( "No backing bean class " + backingClassName + " found for request "
- + request.getRequestURI() );
- }
- }
- else
+ //
+ // If we didn't create (or failed to create) a backing bean, and if this is a JSF request, then create
+ // a default one. This ensures that there will be a place for things like page inputs, that get stored
+ // in the backing bean across postbacks to the same JSF.
+ //
+ if ( bean == null ) bean = new DefaultFacesBackingBean();
+
+ //
+ // If we created a backing bean, invoke its create callback, and tell it to store itself in the session.
+ //
+ if ( bean != null )
{
- AnnotationReader annReader = AnnotationReader.getAnnotationReader( backingClass, servletContext );
-
- if ( annReader.getJpfAnnotation( backingClass, "FacesBacking" ) != null )
+ try
{
- if ( _log.isDebugEnabled() )
- {
- _log.debug( "Found backing class " + backingClassName + " for request "
- + request.getRequestURI() + "; creating a new instance." );
- }
-
- bean = ( FacesBackingBean ) backingClass.newInstance();
+ bean.create( request, response, servletContext );
}
- else
+ catch ( Exception e )
{
- if ( _log.isDebugEnabled() )
- {
- _log.debug( "Found matching backing class " + backingClassName + " for request "
- + request.getRequestURI() + ", but it does not have the "
- + ANNOTATION_QUALIFIER + "FacesBacking" + " annotation." );
- }
+ _log.error( "Error while creating backing bean instance of " + backingClassName, e );
}
+
+ bean.persistInSession( request, response );
+ return bean;
}
}
- catch ( InstantiationException e )
- {
- _log.error( "Could not create backing bean instance of " + backingClassName, e );
- }
- catch ( IllegalAccessException e )
- {
- _log.error( "Could not create backing bean instance of " + backingClassName, e );
- }
-
- //
- // If we didn't create (or failed to create) a backing bean, and if this is a JSF request, then create
- // a default one. This ensures that there will be a place for things like page inputs, that get stored
- // in the backing bean across postbacks to the same JSF.
- //
- if ( bean == null &&
- ( FileUtils.uriEndsWith( uri, FACES_EXTENSION ) || FileUtils.uriEndsWith( uri, JSF_EXTENSION ) ) )
- {
- bean = new DefaultFacesBackingBean();
- }
-
- //
- // If we created a backing bean, invoke its create callback, and tell it to store itself in the session.
- //
- if ( bean != null )
- {
- try
- {
- bean.create( request, response, servletContext );
- }
- catch ( Exception e )
- {
- _log.error( "Error while creating backing bean instance of " + backingClassName, e );
- }
-
- bean.persistInSession( request, response );
- return bean;
- }
//
// We didn't create a backing bean. If there's one in the session (an inappropriate one), remove it.
@@ -146,6 +100,59 @@
}
return currentBean;
+ }
+
+ private static FacesBackingBean loadFacesBackingBean( HttpServletRequest request, ServletContext servletContext,
+ String backingClassName )
+ {
+ try
+ {
+ Class backingClass =
+ Handlers.get( servletContext ).getReloadableClassHandler().loadCachedClass( backingClassName );
+
+ if ( backingClass == null )
+ {
+ if ( _log.isTraceEnabled() )
+ {
+ _log.trace( "No backing bean class " + backingClassName + " found for request "
+ + request.getRequestURI() );
+ }
+ }
+ else
+ {
+ AnnotationReader annReader = AnnotationReader.getAnnotationReader( backingClass, servletContext );
+
+ if ( annReader.getJpfAnnotation( backingClass, "FacesBacking" ) != null )
+ {
+ if ( _log.isDebugEnabled() )
+ {
+ _log.debug( "Found backing class " + backingClassName + " for request "
+ + request.getRequestURI() + "; creating a new instance." );
+ }
+
+ return ( FacesBackingBean ) backingClass.newInstance();
+ }
+ else
+ {
+ if ( _log.isDebugEnabled() )
+ {
+ _log.debug( "Found matching backing class " + backingClassName + " for request "
+ + request.getRequestURI() + ", but it does not have the "
+ + ANNOTATION_QUALIFIER + "FacesBacking" + " annotation." );
+ }
+ }
+ }
+ }
+ catch ( InstantiationException e )
+ {
+ _log.error( "Could not create backing bean instance of " + backingClassName, e );
+ }
+ catch ( IllegalAccessException e )
+ {
+ _log.error( "Could not create backing bean instance of " + backingClassName, e );
+ }
+
+ return null;
}
private static class DefaultFacesBackingBean
Modified: incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/servletInclude/Controller.jpf
URL: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/servletInclude/Controller.jpf?rev=170084&r1=170083&r2=170084&view=diff
==============================================================================
--- incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/servletInclude/Controller.jpf (original)
+++ incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/servletInclude/Controller.jpf Fri May 13 13:29:25 2005
@@ -3,13 +3,19 @@
import org.apache.beehive.netui.pageflow.*;
import org.apache.beehive.netui.pageflow.annotations.*;
-@Jpf.Controller(
- simpleActions={
- @Jpf.SimpleAction(name="begin", path="index.jsp")
- }
-)
+@Jpf.Controller()
public class Controller extends PageFlowController
{
+ @Jpf.Action(
+ forwards={
+ @Jpf.Forward(name="index", path="index.jsp")
+ }
+ )
+ public Forward begin()
+ {
+ return new Forward( "index", "somePageInput", "got it!" );
+ }
+
@Jpf.Action(
forwards={
@Jpf.Forward(name="index", path="index.jsp")
Modified: incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/servletInclude/index.jsp
URL: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/servletInclude/index.jsp?rev=170084&r1=170083&r2=170084&view=diff
==============================================================================
--- incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/servletInclude/index.jsp (original)
+++ incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/servletInclude/index.jsp Fri May 13 13:29:25 2005
@@ -11,6 +11,9 @@
<netui:body>
<h3>${pageFlow.URI}</h3>
+ page input passed from page flow: <b>${pageInput.somePageInput}</b>
+ <br/>
+ <br/>
<netui:anchor action="begin">begin</netui:anchor>
<netui:form action="submit">
Modified: incubator/beehive/trunk/netui/test/webapps/drt/testRecorder/tests/ServletInclude.xml
URL: http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/test/webapps/drt/testRecorder/tests/ServletInclude.xml?rev=170084&r1=170083&r2=170084&view=diff
==============================================================================
--- incubator/beehive/trunk/netui/test/webapps/drt/testRecorder/tests/ServletInclude.xml (original)
+++ incubator/beehive/trunk/netui/test/webapps/drt/testRecorder/tests/ServletInclude.xml Fri May 13 13:29:25 2005
@@ -2,7 +2,7 @@
<ses:recorderSession xmlns:ses="http://beehive.apache.org/netui/tools/testrecorder/2004/session">
<ses:sessionName>ServletInclude</ses:sessionName>
<ses:tester>rich</ses:tester>
- <ses:startDate>02 Mar 2005, 12:08:22.992 AM MST</ses:startDate>
+ <ses:startDate>13 May 2005, 01:49:39.323 PM MDT</ses:startDate>
<ses:description>Sanity check of doing a Servlet include (through RequestDispatcher) of a .jpf URI.</ses:description>
<ses:tests>
<ses:test>
@@ -12,13 +12,17 @@
<ses:protocolVersion>1.1</ses:protocolVersion>
<ses:host>localhost</ses:host>
<ses:port>8080</ses:port>
- <ses:uri>/coreWeb/includejpf</ses:uri>
+ <ses:uri>/coreWeb/miniTests/servletInclude/Controller.jpf</ses:uri>
<ses:method>GET</ses:method>
<ses:parameters/>
<ses:cookies>
<ses:cookie>
<ses:name>JSESSIONID</ses:name>
- <ses:value>AAF54419C1437566485D7E59824A02B7</ses:value>
+ <ses:value>6B87C1BD0C56B964DC15FD5033AB96E1</ses:value>
+ </ses:cookie>
+ <ses:cookie>
+ <ses:name>JSESSIONID</ses:name>
+ <ses:value>CFBQTB26tGqQp3QwVHnvD2xyvLhjJ3vq2X6qVKXX6Qt4ty6LBvPL!-574685435</ses:value>
</ses:cookie>
</ses:cookies>
<ses:headers>
@@ -44,7 +48,7 @@
</ses:header>
<ses:header>
<ses:name>cookie</ses:name>
- <ses:value>JSESSIONID=AAF54419C1437566485D7E59824A02B7</ses:value>
+ <ses:value>JSESSIONID=6B87C1BD0C56B964DC15FD5033AB96E1; JSESSIONID=CFBQTB26tGqQp3QwVHnvD2xyvLhjJ3vq2X6qVKXX6Qt4ty6LBvPL!-574685435</ses:value>
</ses:header>
<ses:header>
<ses:name>host</ses:name>
@@ -56,7 +60,7 @@
</ses:header>
<ses:header>
<ses:name>user-agent</ses:name>
- <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.5) Gecko/20041107 Firefox/1.0</ses:value>
+ <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.8) Gecko/20050511 Firefox/1.0.4</ses:value>
</ses:header>
</ses:headers>
</ses:request>
@@ -73,6 +77,9 @@
<body>
<h3>/miniTests/servletInclude/Controller.jpf</h3>
+ page input passed from page flow: <b>got it!</b>
+ <br/>
+ <br/>
<a href="/coreWeb/miniTests/servletInclude/begin.do">begin</a>
<form action="/coreWeb/miniTests/servletInclude/submit.do" method="post">
@@ -85,7 +92,111 @@
</html>]]></ses:responseBody>
</ses:response>
</ses:test>
+ <ses:test>
+ <ses:testNumber>2</ses:testNumber>
+ <ses:request>
+ <ses:protocol>HTTP</ses:protocol>
+ <ses:protocolVersion>1.1</ses:protocolVersion>
+ <ses:host>localhost</ses:host>
+ <ses:port>8080</ses:port>
+ <ses:uri>/coreWeb/miniTests/servletInclude/submit.do</ses:uri>
+ <ses:method>POST</ses:method>
+ <ses:parameters>
+ <ses:parameter>
+ <ses:name>{actionForm.foo}</ses:name>
+ <ses:value>hi</ses:value>
+ </ses:parameter>
+ </ses:parameters>
+ <ses:cookies>
+ <ses:cookie>
+ <ses:name>JSESSIONID</ses:name>
+ <ses:value>6B87C1BD0C56B964DC15FD5033AB96E1</ses:value>
+ </ses:cookie>
+ <ses:cookie>
+ <ses:name>JSESSIONID</ses:name>
+ <ses:value>CFBQTB26tGqQp3QwVHnvD2xyvLhjJ3vq2X6qVKXX6Qt4ty6LBvPL!-574685435</ses:value>
+ </ses:cookie>
+ </ses:cookies>
+ <ses:headers>
+ <ses:header>
+ <ses:name>accept</ses:name>
+ <ses:value>text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5</ses:value>
+ </ses:header>
+ <ses:header>
+ <ses:name>accept-charset</ses:name>
+ <ses:value>ISO-8859-1,utf-8;q=0.7,*;q=0.7</ses:value>
+ </ses:header>
+ <ses:header>
+ <ses:name>accept-encoding</ses:name>
+ <ses:value>gzip,deflate</ses:value>
+ </ses:header>
+ <ses:header>
+ <ses:name>accept-language</ses:name>
+ <ses:value>en-us,en;q=0.5</ses:value>
+ </ses:header>
+ <ses:header>
+ <ses:name>connection</ses:name>
+ <ses:value>keep-alive</ses:value>
+ </ses:header>
+ <ses:header>
+ <ses:name>content-length</ses:name>
+ <ses:value>23</ses:value>
+ </ses:header>
+ <ses:header>
+ <ses:name>content-type</ses:name>
+ <ses:value>application/x-www-form-urlencoded</ses:value>
+ </ses:header>
+ <ses:header>
+ <ses:name>cookie</ses:name>
+ <ses:value>JSESSIONID=6B87C1BD0C56B964DC15FD5033AB96E1; JSESSIONID=CFBQTB26tGqQp3QwVHnvD2xyvLhjJ3vq2X6qVKXX6Qt4ty6LBvPL!-574685435</ses:value>
+ </ses:header>
+ <ses:header>
+ <ses:name>host</ses:name>
+ <ses:value>localhost:8080</ses:value>
+ </ses:header>
+ <ses:header>
+ <ses:name>keep-alive</ses:name>
+ <ses:value>300</ses:value>
+ </ses:header>
+ <ses:header>
+ <ses:name>referer</ses:name>
+ <ses:value>http://localhost:8080/coreWeb/miniTests/servletInclude/Controller.jpf</ses:value>
+ </ses:header>
+ <ses:header>
+ <ses:name>user-agent</ses:name>
+ <ses:value>Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.8) Gecko/20050511 Firefox/1.0.4</ses:value>
+ </ses:header>
+ </ses:headers>
+ </ses:request>
+ <ses:response>
+ <ses:statusCode>200</ses:statusCode>
+ <ses:reason/>
+ <ses:responseBody><![CDATA[<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html lang="en">
+
+ <head>
+ <base href="http://localhost:8080/coreWeb/miniTests/servletInclude/index.jsp">
+ </head>
+ <body>
+ <h3>/miniTests/servletInclude/Controller.jpf</h3>
+
+ page input passed from page flow: <b></b>
+ <br/>
+ <br/>
+ <a href="/coreWeb/miniTests/servletInclude/begin.do">begin</a>
+
+ <form action="/coreWeb/miniTests/servletInclude/submit.do" method="post">
+ foo: <input type="text" name="{actionForm.foo}" value="hi">
+ <br/>
+ <input type="submit" value="submit">
+ </form>
+ </body>
+
+</html>]]></ses:responseBody>
+ </ses:response>
+ </ses:test>
</ses:tests>
- <ses:endDate>02 Mar 2005, 12:08:49.149 AM MST</ses:endDate>
- <ses:testCount>1</ses:testCount>
+ <ses:endDate>13 May 2005, 01:50:13.492 PM MDT</ses:endDate>
+ <ses:testCount>2</ses:testCount>
</ses:recorderSession>