}
/**
- * A PHP version of the state-number server. Send me an integer and i'll sell you a state
- * @param integer $num
- * @return string
- */
+ * A PHP version of the state-number server. Send me an integer and i'll sell you a state.
+ *
+ * @param integer $num
+ * @return string
+ * @throws Exception
+ */
public static function findState($num)
{
return inner_findstate($num);
/**
* Inner code of the state-number server.
- * Used to test auto-registration of PHP functions as xmlrpc methods.
+ * Used to test wrapping of PHP functions into xmlrpc methods.
*
* @param integer $stateNo the state number
*
* @return string the name of the state (or error description)
+ *
+ * @throws Exception if state is not found
*/
function inner_findstate($stateNo)
{
return $stateNames[$stateNo - 1];
} else {
// not, there so complain
- return "I don't have a state for the index '" . $stateNo . "'";
+ throw new Exception("I don't have a state for the index '" . $stateNo . "'", PhpXmlRpc\PhpXmlRpc::$xmlrpcerruser);
}
}
*
* @param Client $client the client obj all set to query the desired server
* @param array $extraOptions list of options for wrapped code. See the ones from wrap_xmlrpc_method plus
- * - string method_filter
+ * - string method_filter regular expression
* - string new_class_name
* - string prefix
* - bool simple_client_copy set it to true to avoid copying all properties of $client into the copy made in the new class
));
$v = $this->send($f, $GLOBALS['xmlrpcerr']['server_error']);
$this->client->path = $this->args['URI'] . '?EXCEPTION_HANDLING=1';
- $v = $this->send($f, 1);
+ $v = $this->send($f, 1); // the error code of the expected exception
$this->client->path = $this->args['URI'] . '?EXCEPTION_HANDLING=2';
// depending on whether display_errors is ON or OFF on the server, we will get back a different error here,
// as php will generate an http status code of either 200 or 500...
));
$v = $this->send($f);
$this->assertEquals('Michigan', $v->scalarval());
+
+ // this generates an exception in the function which was wrapped, which is by default wrapped in a known error response
+ $f = new xmlrpcmsg('tests.getStateName.2', array(
+ new xmlrpcval(0, 'int'),
+ ));
+ $v = $this->send($f, $GLOBALS['xmlrpcerr']['server_error']);
}
public function testServerWrappedFunctionAsSource()
));
$v = $this->send($f);
$this->assertEquals('Michigan', $v->scalarval());
+
+ // this generates an exception in the function which was wrapped, which is by default wrapped in a known error response
+ $f = new xmlrpcmsg('tests.getStateName.6', array(
+ new xmlrpcval(0, 'int'),
+ ));
+ $v = $this->send($f, $GLOBALS['xmlrpcerr']['server_error']);
}
public function testServerWrappedObjectMethods()
public function testWrappedClass()
{
// make a 'deep client copy' as the original one might have many properties set
- $class = wrap_xmlrpc_server($this->client, array('simple_client_copy' => 0));
+ // also for speed only wrap one method of the whole server
+ $class = wrap_xmlrpc_server($this->client, array('simple_client_copy' => 0, 'method_filter' => '/examples\.getStateName/' ));
if ($class == '') {
$this->fail('Registration of remote server failed');
} else {