// method to optimize deep searches for exception type base names static ExceptionRef _getCauseOfType(ExceptionRef& e, const char* type, int n) { ExceptionRef rval(NULL); // check this exception's type if(strncmp(e->getType(), type, n) == 0) { rval = e; } // check this exception's cause else if(!e->getCause().isNull()) { rval = _getCauseOfType(e->getCause(), type, n); } return rval; }
DynamicObject Exception::convertToDynamicObject(ExceptionRef& e) { DynamicObject dyno; dyno["message"] = e->getMessage(); dyno["type"] = e->getType(); if(!e->getCause().isNull()) { dyno["cause"] = convertToDynamicObject(e->getCause()); } if(!(*e).mDetails->isNull()) { dyno["details"] = e->getDetails(); } return dyno; }