You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by kn...@apache.org on 2008/02/19 00:48:47 UTC

svn commit: r628924 - in /wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket: RequestCycle.java protocol/http/MockWebApplication.java protocol/http/WebRequestCycleProcessor.java protocol/http/WicketFilter.java protocol/http/WicketServlet.java

Author: knopp
Date: Mon Feb 18 15:48:39 2008
New Revision: 628924

URL: http://svn.apache.org/viewvc?rev=628924&view=rev
Log:
WICKET-1356
revert setMetaData change

Modified:
    wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/RequestCycle.java
    wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/MockWebApplication.java
    wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/WebRequestCycleProcessor.java
    wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/WicketFilter.java
    wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/WicketServlet.java

Modified: wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/RequestCycle.java
URL: http://svn.apache.org/viewvc/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/RequestCycle.java?rev=628924&r1=628923&r2=628924&view=diff
==============================================================================
--- wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/RequestCycle.java (original)
+++ wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/RequestCycle.java Mon Feb 18 15:48:39 2008
@@ -1227,8 +1227,10 @@
 					// has to result in a request target
 					if (target == null)
 					{
-						throw new WicketRuntimeException(
-							"the processor did not resolve to any request target");
+						this.handled = false;
+						currentStep = DONE;
+						//throw new WicketRuntimeException(
+						//	"the processor did not resolve to any request target");
 					}
 					// Add (inserting at the bottom) in case before or during
 					// target resolving one or more request targets were pushed
@@ -1288,6 +1290,18 @@
 	}
 
 	/**
+	 * INTERNAL. This method is not part of public Wicket Api. Do not call it.
+	 * Returns whether wicket handled this request or not (i.e. when no request target was found). 
+	 * @return true if wicket handled this request, false otherwise
+	 */
+	public boolean wasHandled()
+	{
+		return handled;
+	}
+	
+	private boolean handled = true;
+	
+	/**
 	 * Loop through the processing steps starting from the current one.
 	 */
 	private final void steps()
@@ -1427,15 +1441,6 @@
 	 * MetaDataEntry array.
 	 */
 	private MetaDataEntry[] metaData;
-
-	/**
-	 * 
-	 * @param key
-	 * @param object
-	 */
-	public final void setMetaData(final MetaDataKey key, final Serializable object) {
-		setMetaData(key, (Object)object);
-	}
 	
 	/**
 	 * Sets the metadata for this request cycle using the given key. If the metadata object is not
@@ -1449,7 +1454,8 @@
 	 * @throws IllegalArgumentException
 	 * @see MetaDataKey
 	 */
-	public final void setMetaData(final MetaDataKey key, final Object object)
+	// TODO: Replace the Serializable type with Object for next wicket version
+	public final void setMetaData(final MetaDataKey key, final Serializable object)
 	{
 		metaData = key.set(metaData, object);
 	}
@@ -1462,8 +1468,8 @@
 	 * @return The metadata or null if no metadata was found for the given key
 	 * @see MetaDataKey
 	 */
-	public final Object getMetaData(final MetaDataKey key)
+	public final Serializable getMetaData(final MetaDataKey key)
 	{
-		return key.get(metaData);
+		return (Serializable)key.get(metaData);
 	}
 }

Modified: wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/MockWebApplication.java
URL: http://svn.apache.org/viewvc/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/MockWebApplication.java?rev=628924&r1=628923&r2=628924&view=diff
==============================================================================
--- wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/MockWebApplication.java (original)
+++ wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/MockWebApplication.java Mon Feb 18 15:48:39 2008
@@ -17,6 +17,7 @@
 package org.apache.wicket.protocol.http;
 
 import java.io.File;
+import java.io.IOException;
 import java.util.Enumeration;
 import java.util.HashMap;
 import java.util.Map;
@@ -24,6 +25,7 @@
 import javax.servlet.FilterConfig;
 import javax.servlet.ServletContext;
 import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletResponse;
 
 import org.apache.wicket.Application;
 import org.apache.wicket.Component;
@@ -32,6 +34,7 @@
 import org.apache.wicket.PageParameters;
 import org.apache.wicket.Session;
 import org.apache.wicket.markup.html.pages.ExceptionErrorPage;
+import org.apache.wicket.protocol.http.request.WebErrorCodeResponseTarget;
 import org.apache.wicket.request.target.component.BookmarkablePageRequestTarget;
 import org.apache.wicket.request.target.component.IBookmarkablePageRequestTarget;
 import org.apache.wicket.request.target.component.IPageRequestTarget;
@@ -382,6 +385,10 @@
 		try
 		{
 			cycle.request();
+			if (cycle.wasHandled() == false) 
+			{
+				cycle.setRequestTarget(new WebErrorCodeResponseTarget(HttpServletResponse.SC_NOT_FOUND));
+			}
 			createRequestCycle();
 		}
 		finally

Modified: wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/WebRequestCycleProcessor.java
URL: http://svn.apache.org/viewvc/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/WebRequestCycleProcessor.java?rev=628924&r1=628923&r2=628924&view=diff
==============================================================================
--- wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/WebRequestCycleProcessor.java (original)
+++ wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/WebRequestCycleProcessor.java Mon Feb 18 15:48:39 2008
@@ -201,6 +201,9 @@
 			}
 		}
 
+		// (WICKET-1356) in case no target was found, return null here. RequestCycle will deal with it
+		// possible letting wicket filter to pass the request down the filter chain		
+		/*
 		if (target == null)
 		{
 			// if we get here, we have no recognized Wicket target, and thus
@@ -208,6 +211,7 @@
 			// this server
 			return resolveExternalResource(requestCycle);
 		}
+		*/
 
 		return target;
 	}

Modified: wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/WicketFilter.java
URL: http://svn.apache.org/viewvc/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/WicketFilter.java?rev=628924&r1=628923&r2=628924&view=diff
==============================================================================
--- wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/WicketFilter.java (original)
+++ wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/WicketFilter.java Mon Feb 18 15:48:39 2008
@@ -191,7 +191,10 @@
 				{
 					// servlet doesn't support if-modified-since, no reason
 					// to go through further expensive logic
-					doGet(httpServletRequest, httpServletResponse);
+					if (doGet(httpServletRequest, httpServletResponse) == false)
+					{
+						chain.doFilter(request, response);
+					}
 				}
 				else
 				{
@@ -239,11 +242,12 @@
 	 *            Servlet request object
 	 * @param servletResponse
 	 *            Servlet response object
+	 * @return true if the request was handled by wicket, false otherwise
 	 * @throws ServletException
 	 *             Thrown if something goes wrong during request handling
 	 * @throws IOException
 	 */
-	public void doGet(final HttpServletRequest servletRequest,
+	public boolean doGet(final HttpServletRequest servletRequest,
 		final HttpServletResponse servletResponse) throws ServletException, IOException
 	{
 		String relativePath = getRelativePath(servletRequest);
@@ -254,7 +258,7 @@
 		{
 			final String redirectUrl = servletRequest.getRequestURI() + "/";
 			servletResponse.sendRedirect(servletResponse.encodeRedirectURL(redirectUrl));
-			return;
+			return true;
 		}
 
 		final ClassLoader previousClassLoader = Thread.currentThread().getContextClassLoader();
@@ -320,7 +324,7 @@
 						bufferedResponse.writeTo(servletResponse);
 						// redirect responses are ignored for the request
 						// logger...
-						return;
+						return true;
 					}
 				}
 			}
@@ -352,6 +356,8 @@
 				{
 					// Process request
 					cycle.request();
+					
+					return cycle.wasHandled();
 				}
 				catch (AbortException e)
 				{
@@ -383,6 +389,7 @@
 				Thread.currentThread().setContextClassLoader(previousClassLoader);
 			}
 		}
+		return true;
 	}
 
 	/**

Modified: wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/WicketServlet.java
URL: http://svn.apache.org/viewvc/wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/WicketServlet.java?rev=628924&r1=628923&r2=628924&view=diff
==============================================================================
--- wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/WicketServlet.java (original)
+++ wicket/trunk/jdk-1.4/wicket/src/main/java/org/apache/wicket/protocol/http/WicketServlet.java Mon Feb 18 15:48:39 2008
@@ -17,6 +17,7 @@
 package org.apache.wicket.protocol.http;
 
 import java.io.IOException;
+import java.io.InputStream;
 import java.util.Enumeration;
 
 import javax.servlet.FilterConfig;
@@ -26,6 +27,8 @@
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
+import org.apache.wicket.protocol.http.servlet.ServletWebRequest;
+import org.apache.wicket.util.io.Streams;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -118,7 +121,10 @@
 	public final void doGet(final HttpServletRequest servletRequest,
 			final HttpServletResponse servletResponse) throws ServletException, IOException
 	{
-		wicketFilter.doGet(servletRequest, servletResponse);
+		if (wicketFilter.doGet(servletRequest, servletResponse) == false) 
+		{
+			fallback(servletRequest, servletResponse);
+		}
 	}
 
 	/**
@@ -136,9 +142,43 @@
 	public final void doPost(final HttpServletRequest servletRequest,
 			final HttpServletResponse servletResponse) throws ServletException, IOException
 	{
-		wicketFilter.doGet(servletRequest, servletResponse);
+		if (wicketFilter.doGet(servletRequest, servletResponse) == false) 
+		{
+			fallback(servletRequest, servletResponse);
+		}
 	}
 
+	private void fallback(HttpServletRequest request, HttpServletResponse response) throws IOException 
+	{
+		
+		// The ServletWebRequest is created here to avoid code duplication. The getURL
+		// call doesn't depend on anything wicket specific 
+		ServletWebRequest req = new ServletWebRequest(request);
+		String url = req.getURL();
+		
+		// Get the relative URL we need for loading the resource from
+		// the servlet context
+		// NOTE: we NEED to put the '/' in front as otherwise some versions
+		// of application servers (e.g. Jetty 5.1.x) will fail for requests
+		// like '/mysubdir/myfile.css'
+		
+		if ((url.length() > 0 && url.charAt(0) != '/') || url.length() == 0)
+		{
+			url = '/' + url;
+		}
+		
+		InputStream stream = getServletContext().getResourceAsStream(url);
+						
+		if (stream == null) 
+		{
+			response.sendError(HttpServletResponse.SC_NOT_FOUND);
+		} 
+		else 
+		{
+			Streams.copy(stream, response.getOutputStream());
+		}
+	}
+	
 	/**
 	 * Servlet initialization
 	 */