function RWSEHdlr($r_ex)
{
    abort_all_db_transactions();
    $r_inf = get_exception_info($r_ex);
    $r_msg = "\r\n-- Exception occurred --";
    $r_msg .= "\r\nmessage: {$r_inf->message}";
    $r_msg .= "\r\nerrorcode: {$r_inf->errorcode}";
    $r_msg .= "\r\nfile: " . $r_ex->getFile();
    $r_msg .= "\r\nline: " . $r_ex->getLine();
    $r_msg .= "\r\nlink: {$r_inf->link}";
    $r_msg .= "\r\nmoreinfourl: {$r_inf->moreinfourl}";
    $r_msg .= "\r\na: {$r_inf->a}";
    $r_msg .= "\r\ndebuginfo: {$r_inf->debuginfo}\r\n";
    RWSELog($r_msg);
    RWSELog("\r\nstacktrace: " . $r_ex->getTraceAsString());
    RWSSErr("2112,{$r_inf->errorcode}");
}
<?php

// Respondus 4.0 Web Service Extension For Moodle
// Copyright (c) 2009-2015 Respondus, Inc.  All Rights Reserved.
// Date: January 07, 2015.
$r_rsv = dirname(__FILE__) . "/servicelib.php";
if (is_readable($r_rsv)) {
    include_once $r_rsv;
    defined("MOODLE_INTERNAL") || die;
} else {
    header("Content-Type: text/xml");
    echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n";
    echo "<service_error>2000</service_error>\r\n";
    exit;
}
raise_memory_limit(MEMORY_EXTRA);
set_exception_handler("RWSEHdlr");
RWSCMBVer();
RWSCMVer();
RWSCMInst();
if ($RWSECAS) {
    RWSPCReqs();
}
$r_raction = RWSGSOpt("action", PARAM_ALPHANUMEXT);
if ($r_raction === false || strlen($r_raction) == 0) {
    RWSSErr("2001");
} else {
    RWSDSAct($r_raction);
}