On Thu, Feb 28, 2008 at 7:36 PM, Hans Dieter Pearcey <[EMAIL PROTECTED]> wrote: > > On Thu, Feb 28, 2008 at 05:47:20PM -0800, Ian Burrell wrote: > > We use a subclass of HTML::Mason::CGIHandler. How do we get 404 > > errors instead of fatal errors when the component is not found? It > > looks like HTML::Mason::ApacheHandler has special code to detect > > TopLevelNotFound errors and turn them into 404's (or at least comments > > about what to override). What do we need to override in CGIHandler to > > return 404's? > > I think what ApacheHandler really relies on is trying to resolve the path to > a > component before doing any execution. The TopLevelNotFound errors are > caught, > but my guess (only a guess) is that that's just a backup, for some weird edge > case. > > Doing the same thing with CGIHandler seems pretty reasonable to me. There's > nothing to override, though, because CGIHandler does less than Apache. >
For anyone that is curious, it was easy to extend our CGIHandler and Request sub-class to give 404 HTTP errors instead of going through normal mason error handling. The Request sub-class overrides _handle_error to rethrow TopLevelNotFound errors. sub _handle_error { my ($self, $err) = @_; rethrow_exception($err) if $self->is_subrequest; if (isa_mason_exception($err, 'TopLevelNotFound')) { rethrow_exception($err); } $self->SUPER::_handle_error($err); } The CGIHandler sub-class overrides handle_cgi_object to turn TopLevelNotFound into 404 status. sub handle_cgi_object { my ($self, $cgi) = @_; eval { $self->SUPER::handle_cgi_object($cgi); }; if (my $err = $@) { if (isa_mason_exception($err, 'TopLevelNotFound')) { return NOT_FOUND; } else { rethrow_exception($err); } } } Our CGI script returns the 404 status back to the browser. - Ian - Ian ------------------------------------------------------------------------- This SF.net email is sponsored by: Microsoft Defy all challenges. Microsoft(R) Visual Studio 2008. http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/ _______________________________________________ Mason-users mailing list Mason-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/mason-users