-- Jan Pieper <[EMAIL PROTECTED]> wrote
(on Thursday, 01 March 2007, 09:22 PM +0100):
> My class looks like:
> 
> class Flabben_XmlRpc_Server
> {
>     /**
>      * add entry to database and return its id
>      *
>      * @access public
>      * @param  integer $iUserId
>      * @param  string $sTitle
>      * @param  string $sContent
>      * @return integer
>      */
>     public function addEntry($iUserId, $sTitle, $sContent)
>     {
>         return 1;
>     }
> }

That looks good -- what is the data being sent to it that's causing the
error? I'm wondering if one or more items were not the right type?
Zend_XmlRpc_Server uses Zend_XmlRpc_Value to 'guess' the type; it's
possible that there's an issue in there. Give as much detail as you can,
and I'll try and track it down.


>     -- Jan Pieper <[EMAIL PROTECTED]> wrote
>     (on Thursday, 01 March 2007, 07:23 PM +0100):
> 
> 
>         The result I get ist:
> 
>         <?xml version="1.0" encoding="UTF-8"?>
>         
> <methodResponse><params><param><value><string/></value></param></params></
>         methodResponse>
>         Zend_XmlRpc_Client_FaultException caught: Calling parameters do not 
> match
>         signature
> 
>         I can“t find my mistake...
> 
> 
> 
>     Read the docs. :-)
> 
>     The Zend server classes use the Reflection API to determine the
>     dispatchable prototypes -- and determines the number and types for the
>     method parameters and return value. When an incoming request happens, it
>     checks the calling parameters against the registered prototypes. So, if
>     the calling parameters do not match, you get that message.
> 
>     The fix? Make sure that you do your docblocks thoroughly:
> 
>         /**
>          * do something with a table
>          *
>          * @param string $table
>          * @param int $id
>          * @param struct $values (Struct denotes an assoc array)
>          * @return boolean
>          */
>         public function doSomething($table, $id, $values);
> 
>     Just make sure you use valid xml-rpc types for the typehints -- struct
>     for associative arrays, int(eger), bool(ean), float/double, array,
>     string, base64, date.iso9601 (dates).
> 
>     Also, you *can* OR the types if more than one type is possible:
> 
>         /**
>          * Do something
>          *
>          * @param string $table
>          * @param int|string $id
>          * @param string|struct $values
>          * @return boolean
>          */
> 
>     (The above will have 4 valid prototypes.)
> 
> 
> 
>             -- Werner <[EMAIL PROTECTED]> wrote
>             (on Thursday, 01 March 2007, 06:42 PM +0200):
> 
> 
>                 I also want to start playing around with it for an upcoming 
> project.
> 
>                 Would you mind posting the skeleton on the list? (to me, the 
> list also
>                 serves as a repository (and archive) of code snippets, etc.
> 
>                 I love searching for keywords and topics in the list with my 
> mail
>                 client, it has proven to be a useful resource to me many 
> times before.
>                 Therefore, I would like to ask you to please put as much 
> example code in
>                 the list as possible, since you are knowledgeable and it 
> provides a
>                 general answer (or starting point) to list-subscribers.
> 
>                 Thank you for your time and effort,
>                 Werner
> 
>                 Matthew Weier O'Phinney wrote:
> 
> 
>                     I have. Contact me off-list, and I'll provide a skeleton 
> for you.
> 
> 
> 
>             Okay, it's below.
> 
>             There are some points where you'll need to modify it (require 
> service
>             classes and attach them to the server, specify path to a cache 
> file,
>             specify exception classes that may return XML-RPC faults, etc.).
>             Additionally, you may want to add some logging functionality 
> surrounding
>             the handle() call -- log the request and response, for instance, 
> or just
>             log request/response when fault responses occur.
> 
>             =============================================================
>             <?php
>             // Turn of error reporting; mucks with XML responses
>             ini_set('display_errors', false);
> 
>             /** Zend_Controller_Action */
>             require_once 'Zend/Controller/Action.php';
> 
>             /** Zend_XmlRpc_Server */
>             require_once 'Zend/XmlRpc/Server.php';
> 
>             /** Zend_XmlRpc_Server_Cache */
>             require_once 'Zend/XmlRpc/Server/Cache.php';
> 
>             /** Zend_XmlRpc_Server_Fault */
>             require_once 'Zend/XmlRpc/Server/Fault.php';
> 
>             /**
>              * Also load your service classes here:
>              * require_once 'Services/Foo.php'; // etc.
>              */
> 
>             /**
>              * XMLRPC Controller: dispatch XMLRPC requests
>              *
>              * URI route is: /xml-rpc
>              *
>              * Any additional URI components will be ignored.
>              *
>              * @uses Zend_Controller_Action
>              * @uses Zend_XmlRpc_Server
>              */
>             class XmlRpcController extends Zend_Controller_Action
>             {
>                 /**
>                  * Override and/or set this to specify a server cache file
>                  * @var string
>                  */
>                 public $cacheFile;
> 
>                 /**
>                  * Array of exception classes that can be reported as XML-RPC 
> faults.
>                  * Override or set this value.
>                  * @var array
>                  */
>                 public $validExceptionClasses = array();
> 
>                 /**
>                  * Sets the cache file to a sane default if not set
>                  *
>                  * @return void
>                  */
>                 public function init()
>                 {
>                     if (null === $this->cacheFile) {
>                         $this->cacheFile = dirname(__FILE__) . 
> '/../cache/xmlrpc.cache';
>                     }
>                 }
> 
>                 /**
>                  * Index action: dispatch xmlrpc server
>                  *
>                  * @return void
>                  */
>                 public function indexAction()
>                 {
>                     $this->dispatchXmlrpc();
>                 }
> 
>                 /**
>                  * Forward to indexAction()
>                  *
>                  * @param  string $method
>                  * @param  array $args
>                  * @return void
>                  */
>                 public function __call($method, $args)
>                 {
>                     return $this->_forward('index');
>                 }
> 
>                 /**
>                  * Dispatch XMLRPC server
>                  *
>                  * @access public
>                  * @return void
>                  */
>                 public function dispatchXmlrpc()
>                 {
>                     $server = new Zend_XmlRpc_Server();
> 
>                     // Ortus_Exceptions will be returned as fault responses
>                     foreach ($this->validExceptionClasses as $class) {
>                         
> Zend_XmlRpc_Server_Fault::attachFaultException($class);
>                     }
> 
>                     if (!Zend_XmlRpc_Server_Cache::get($this->cacheFile, 
> $server)) {
>                         /**
>                          * Attach XML-RPC classes, with optional namespaces. 
> Example:
>                          * $server->setClass('Service_Foo', 'foo');
>                          * $server->setClass('Model_Bar', 'bar');
>                          */
> 
>                         Zend_XmlRpc_Server_Cache::save($this->cacheFile, 
> $server);
>                     }
> 
>                     // Dispatch request...
>                     $response = $server->handle();
>                     $response->setEncoding('ISO-8859-1');
>                     header('Content-Type: text/xml; charset=ISO-8859-1');
>                     echo $response->saveXml();
>                 }
>             }
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 

-- 
Matthew Weier O'Phinney
PHP Developer            | [EMAIL PROTECTED]
Zend - The PHP Company   | http://www.zend.com/

Reply via email to