I'm rather baffled by this exception handling issue. Basically I have the following exception handling flow:
<event-handler event="exception.production.default" access="private">
<view-page name="exceptions.production.default" />
</event-handler>
<event-handler event="exception.production.noEventHandler" access="private">
<view-page name="exceptions.production.default" />
</event-handler>
<cffunction name="filterEvent" access="public" returntype="boolean" output="true" hint="Writes to log and sends email of exception.">
<cfargument name="event" type="MachII.framework.Event" required="true">
<cfargument name="eventContext" type="MachII.framework.EventContext" required="true">
<cfargument name="paramArgs" type="struct" required="false" default="#StructNew()#">
<cfset var exception = arguments.event.getArg("exception")>
<cfset var caughtException = exception.getCaughtException()>
<cfset var requestName = arguments.event.getRequestName()>
<cfset var exitEvent = "">
<!--- Decide if production handling is to be used --->
<cfif isProductionExceptionHandlingEnabled()>
<cfswitch expression="#caughtException.type#">
<!--- Announce event for "bad events" such as spammers messing with URLs or wrongly typed URLs --->
<cfcase value="MachII.framework.EventHandlerNotDefined|MachII.framework.EventHandlerNotAccessible|MachII.framework.ModuleNotDefined|MachII.framework.UrlRouteNotDefined" delimiters="|">
<cfset arguments.eventContext.addHTTPHeaderByStatus("404", "Not Found")>
<cfset exitEvent = "exception.production.noEventHandler">
</cfcase>
<!--- Announce event for completely unhandled exceptions --->
<cfdefaultcase>
<cfset arguments.eventContext.addHTTPHeaderByStatus("500", "Error")>
<cfset exitEvent = "exception.production.default">
</cfdefaultcase>
</cfswitch>
<cfset getNotificationService().sendExceptionEmail(caughtException)>
<cfelse>
<!--- Announce event with helpful developer exception info --->
<cfset arguments.eventContext.addHTTPHeaderByStatus("500", "Error")>
<cfset exitEvent = "exception.development.default">
</cfif>
<cfset announceEvent(exitEvent, arguments.event.getArgs())>
<cfreturn true>
</cffunction>