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 */