コード例 #1
0
 /**
  * Load XML and parse into request components
  *
  * @param string $request
  * @return boolean True on success, false if an error occurred.
  */
 public function loadXml($request)
 {
     if (!is_string($request)) {
         $this->_fault = new Polycast_XmlRpc_Fault(635);
         $this->_fault->setEncoding($this->getEncoding());
         return false;
     }
     try {
         $xml = @new SimpleXMLElement($request);
     } catch (Exception $e) {
         // Not valid XML
         $this->_fault = new Polycast_XmlRpc_Fault(631);
         $this->_fault->setEncoding($this->getEncoding());
         return false;
     }
     // Check for method name
     if (empty($xml->methodName)) {
         // Missing method name
         $this->_fault = new Polycast_XmlRpc_Fault(632);
         $this->_fault->setEncoding($this->getEncoding());
         return false;
     }
     $this->_method = (string) $xml->methodName;
     // Check for parameters
     if (!empty($xml->params)) {
         $types = array();
         $argv = array();
         foreach ($xml->params->children() as $param) {
             if (!isset($param->value)) {
                 $this->_fault = new Polycast_XmlRpc_Fault(633);
                 $this->_fault->setEncoding($this->getEncoding());
                 return false;
             }
             try {
                 $param = Polycast_XmlRpc_Value::getXmlRpcValue($param->value, Polycast_XmlRpc_Value::XML_STRING);
                 $types[] = $param->getType();
                 $argv[] = $param->getValue();
             } catch (Exception $e) {
                 $this->_fault = new Polycast_XmlRpc_Fault(636);
                 $this->_fault->setEncoding($this->getEncoding());
                 return false;
             }
         }
         $this->_types = $types;
         $this->_params = $argv;
     }
     $this->_xml = $request;
     return true;
 }
コード例 #2
0
 /**
  * Load a response from an XML response
  *
  * Attempts to load a response from an XMLRPC response, autodetecting if it
  * is a fault response.
  *
  * @param string $response
  * @return boolean True if a valid XMLRPC response, false if a fault
  * response or invalid input
  */
 public function loadXml($response)
 {
     if (!is_string($response)) {
         $this->_fault = new Polycast_XmlRpc_Fault(650);
         $this->_fault->setEncoding($this->getEncoding());
         return false;
     }
     try {
         $xml = @new SimpleXMLElement($response);
     } catch (Exception $e) {
         // Not valid XML
         $this->_fault = new Polycast_XmlRpc_Fault(651);
         $this->_fault->setEncoding($this->getEncoding());
         return false;
     }
     if (!empty($xml->fault)) {
         // fault response
         $this->_fault = new Polycast_XmlRpc_Fault();
         $this->_fault->setEncoding($this->getEncoding());
         $this->_fault->loadXml($response);
         return false;
     }
     if (empty($xml->params)) {
         // Invalid response
         $this->_fault = new Polycast_XmlRpc_Fault(652);
         $this->_fault->setEncoding($this->getEncoding());
         return false;
     }
     try {
         if (!isset($xml->params) || !isset($xml->params->param) || !isset($xml->params->param->value)) {
             throw new Polycast_XmlRpc_Value_Exception('Missing XML-RPC value in XML');
         }
         $valueXml = $xml->params->param->value->asXML();
         $valueXml = preg_replace('/<\\?xml version=.*?\\?>/i', '', $valueXml);
         $value = Polycast_XmlRpc_Value::getXmlRpcValue(trim($valueXml), Polycast_XmlRpc_Value::XML_STRING);
     } catch (Polycast_XmlRpc_Value_Exception $e) {
         $this->_fault = new Polycast_XmlRpc_Fault(653);
         $this->_fault->setEncoding($this->getEncoding());
         return false;
     }
     $this->setReturnValue($value->getValue());
     return true;
 }
コード例 #3
0
ファイル: Fault.php プロジェクト: polycaster/Polycast_XmlRpc
 /**
  * Constructor
  *
  * @param Exception $e
  * @return Polycast_XmlRpc_Server_Fault
  */
 public function __construct(Exception $e)
 {
     $this->_exception = $e;
     $code = 404;
     $message = 'Unknown error';
     $exceptionClass = get_class($e);
     foreach (array_keys(self::$_faultExceptionClasses) as $class) {
         if ($e instanceof $class) {
             $code = $e->getCode();
             $message = $e->getMessage();
             break;
         }
     }
     parent::__construct($code, $message);
     // Notify exception observers, if present
     if (!empty(self::$_observers)) {
         foreach (array_keys(self::$_observers) as $observer) {
             call_user_func(array($observer, 'observe'), $this);
         }
     }
 }