Author: gvanmatre Date: Tue May 2 10:40:40 2006 New Revision: 398979 URL: http://svn.apache.org/viewcvs?rev=398979&view=rev Log: If a clay full template (XML or HTML) was not found, an incorrect HTTP status code of 500 was reported. A status code of 404 is now returned if the missing resource is the entry point of the view root.
Added: struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/config/beans/PageNotFoundException.java (with props) Modified: struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/config/beans/ComponentConfigBean.java struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/faces/ClayViewHandler.java Modified: struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/config/beans/ComponentConfigBean.java URL: http://svn.apache.org/viewcvs/struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/config/beans/ComponentConfigBean.java?rev=398979&r1=398978&r2=398979&view=diff ============================================================================== --- struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/config/beans/ComponentConfigBean.java (original) +++ struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/config/beans/ComponentConfigBean.java Tue May 2 10:40:40 2006 @@ -227,7 +227,7 @@ } else { URL url = context.getResource(configFile.toString()); if (url == null) { - throw new RuntimeException(messages.getMessage("file.notfound", new Object[] {configFile.toString()})); + throw new PageNotFoundException(messages.getMessage("file.notfound", new Object[] {configFile.toString()}), configFile.toString()); } urls.add(url); } Added: struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/config/beans/PageNotFoundException.java URL: http://svn.apache.org/viewcvs/struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/config/beans/PageNotFoundException.java?rev=398979&view=auto ============================================================================== --- struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/config/beans/PageNotFoundException.java (added) +++ struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/config/beans/PageNotFoundException.java Tue May 2 10:40:40 2006 @@ -0,0 +1,62 @@ +/* + * Copyright 2006 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * $Id$ + */ + +package org.apache.shale.clay.config.beans; + +/** + * <p>This is an unchecked exception used to identify that + * a [EMAIL PROTECTED] org.apache.shale.clay.component.Clay} template + * could not be found. The exception captures the requested + * resource to be compared to the view root. This is done + * by the [EMAIL PROTECTED] org.apache.shale.clay.faces.ClayViewHandler} + * in the <code>renderView</code> method. If the missing + * template and the <code>viewId</code> are the same, a + * HTTP 404 status code is sent to the client. If the + * missing template resource is nested in the page composition, + * the standard 500 status code will be returned. + *</p> + */ +public class PageNotFoundException extends RuntimeException { + + private static final long serialVersionUID = 3258689897039672375L; + /** + * <p>The requested resource.</p> + */ + private String resource = null; + + /** + * <p>Overloaded constructor requires an error message + * and the missing resource.</p> + * + * @param message error message + * @param resource missing resource + */ + public PageNotFoundException(String message, String resource) { + super(message); + this.resource = resource; + } + + /** + * <p>Returns the missing resource.</p> + */ + public String getResource() { + return resource; + } + + +} Propchange: struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/config/beans/PageNotFoundException.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/config/beans/PageNotFoundException.java ------------------------------------------------------------------------------ svn:keywords = Date Author Id Revision HeadURL Modified: struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/faces/ClayViewHandler.java URL: http://svn.apache.org/viewcvs/struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/faces/ClayViewHandler.java?rev=398979&r1=398978&r2=398979&view=diff ============================================================================== --- struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/faces/ClayViewHandler.java (original) +++ struts/shale/trunk/clay-plugin/src/java/org/apache/shale/clay/faces/ClayViewHandler.java Tue May 2 10:40:40 2006 @@ -29,12 +29,13 @@ import javax.faces.component.UIViewRoot; import javax.faces.context.FacesContext; import javax.faces.context.ResponseWriter; -import javax.servlet.ServletResponse; +import javax.servlet.http.HttpServletResponse; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.shale.clay.component.Clay; import org.apache.shale.clay.config.Globals; +import org.apache.shale.clay.config.beans.PageNotFoundException; import org.apache.shale.view.Constants; import org.apache.shale.view.ViewController; import org.apache.shale.view.ViewControllerMapper; @@ -329,7 +330,7 @@ } //get the response - ServletResponse response = (ServletResponse) context.getExternalContext().getResponse(); + HttpServletResponse response = (HttpServletResponse) context.getExternalContext().getResponse(); //set the locale (response).setLocale(context.getViewRoot().getLocale()); @@ -342,8 +343,18 @@ //start a document buffResponsewriter.startDocument(); - recursiveRender(view, context); - + try { + recursiveRender(view, context); + } catch (PageNotFoundException e) { + //look to see if the page not found is a top level page + if (e.getResource().equals(view.getViewId())) { + response.sendError(HttpServletResponse.SC_NOT_FOUND, e.getResource()); + context.responseComplete(); + return; + } + + throw e; + } //end the document buffResponsewriter.endDocument();