Example #1
0
 /**
  * Process thrown exception
  * Generate and set HTTP response code, error message to Response object
  *
  * @param Exception $exception
  * @param Mage_Api2_Model_Renderer_Interface $renderer
  * @param Mage_Api2_Model_Response $response
  * @return Mage_Api2_Model_Server
  */
 protected function _renderException(Exception $exception, Mage_Api2_Model_Renderer_Interface $renderer, Mage_Api2_Model_Response $response)
 {
     if ($exception instanceof Mage_Api2_Exception && $exception->getCode()) {
         $httpCode = $exception->getCode();
     } else {
         $httpCode = self::HTTP_INTERNAL_ERROR;
     }
     try {
         //add last error to stack
         $response->setException($exception);
         $messages = array();
         /** @var Exception $exception */
         foreach ($response->getException() as $exception) {
             $message = array('code' => $exception->getCode(), 'message' => $exception->getMessage());
             if (Mage::getIsDeveloperMode()) {
                 $message['trace'] = $exception->getTraceAsString();
             }
             $messages['messages']['error'][] = $message;
         }
         //set HTTP Code of last error, Content-Type and Body
         $response->setBody($renderer->render($messages));
         $response->setHeader('Content-Type', sprintf('%s; charset=%s', $renderer->getMimeType(), Mage_Api2_Model_Response::RESPONSE_CHARSET));
     } catch (Exception $e) {
         //tunnelling of 406(Not acceptable) error
         $httpCode = $e->getCode() == self::HTTP_NOT_ACCEPTABLE ? self::HTTP_NOT_ACCEPTABLE : self::HTTP_INTERNAL_ERROR;
         //if error appeared in "error rendering" process then show it in plain text
         $response->setBody($e->getMessage());
         $response->setHeader('Content-Type', 'text/plain; charset=' . Mage_Api2_Model_Response::RESPONSE_CHARSET);
     }
     $response->setHttpResponseCode($httpCode);
     return $this;
 }