Calling Relocate() Causes Test Exception When onError() Present in Handler

Description

This is my first bug submission so please bear with me.
This issue only appears to occur when running Adobe ColdFusion (ACF) servers.

Here's how to replicate the error:
1. Create a new Coldbox App by typing coldbox create app in Commandbox. You can use Coldbox 5 or 6 as they both produce the same issue.
2. Open the handlers\Main.cfc file and add an onError() method that throws the original exception. Here's a simple example:

3. Start the server (remember it must be an ACF server)
4. Run the default tests (/tests/runner.cfm)

You will see that the "can do relocation" test will fail with the following: (see attached screenshot)
coldfusion.runtime.CustomException: Relocating via relocate

I've given some thought to the problem and it appears to be a result of the way ACF handles nested exceptions as opposed to Lucee.

Currently in /coldbox/system/web/Controller.cfc on line 973, Coldbox looks for an onError() method in the handler. If that method exists, it attempts to execute it. Most people probably use the `onError()` method in their handler to do exception handling for custom exception types. If the exception.type isn't what was expected, they probably want the error handler to re-throw the error, like this:

The above code works in Lucee, but not in ACF.

If this turns out to be a limitation of the ACF engine, perhaps a way to work around it would be to tweak the convention and specify that if an `onError()` method returns "false" then Controller.cfc can rethrow the error from the original try/catch block.

Here's what I mean:
Proposed change in coldbox\system\web\Controller.cfc line 971

The above workaround would also mean that my example onError() method would need to be changed as follows:

Hopefully, the information I provided helps! Let me know if you need additional details.

Assignee

Luis Majano

Reporter

David Levin

Components

Affects versions

Priority

Major
Configure