как изменить объект исключения в Railo - PullRequest
1 голос
/ 28 июля 2011
try {
    // some error
} catch (any e) {
    e.extendedInfo = 'New extended info';
    //throw(e);
    //cfcatch.extendedInfo = 'New extended info';
    rethrow;
}

Когда я (пере) ловлю это исключение, расширенная информация не отображается. Я хочу, чтобы возбужденное исключение сохраняло все свои свойства pre-catch, включая исходный tagContext, номера строк и т. Д., Но получает новое значение для extendedInfo.

Я попытался скопировать атрибуты e в новый атрибут attributeCollection и выбросить его с помощью throw(e) или <cfthrow attributeCollection="#e#" />, но затем контекст изменился, и ошибка отображает неправильную строку исходного кода.

Пока я в этом, есть способ отбросить самый верхний объект стека, так что исключение, похоже, было выброшено из вызывающего контекста. то есть:

function myRethrow(e) (
   throw(e); // <!-- error is actually throw here BUT ...
)
myRethrow(e); // <-- error should appear to have 'happened' here

Использование Railo 3.2

1 Ответ

1 голос
/ 28 июля 2011

Я думаю, что вы можете использовать функцию throw следующим образом:

try {

    try {
        // some error
    }
    catch (any e) {
        e.extendedInfo = 'New extended info';
        throw(argumentCollection = e);
    }

}
catch (any e) {
    WriteDump(e);
}

У меня работает.

...