-- Jan Pieper <[EMAIL PROTECTED]> wrote
(on Thursday, 01 March 2007, 11:16 PM +0100):
> To not post so "much" code inside this mail I added some attachments.
> 
> Attachments:
> - xmlrpc_server.php
> - xmlrpc_client.php
> - result.txt
> 
> The server gets the correct request (xml) but I don´t know why this 
> request cannot be handled.
> 
> (btw.: what is i4?)

Shorthand for integer -- it's a synonym in XML-RPC syntax.

Try the following client code and let me know what you get:

    $connection = new Zend_XmlRpc_Client($URL);
    $client = $connection->getProxy();
    $result = $client->flabben->addEntry($uid, $title, $content);
    var_dump($result);

I'm curious to see if there's a subtle issue going on with parameter
ordering in the client.


> >-- 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();
> >>                }
> >>            }
> >>
> >>
> >>
> >>
> >>
> >>
> >>
> >>
> >>
> >>
> >>
> >>
> >>    
> >
> >  
> 

> ----- REQUEST 
> ------------------------------------------------------------------
> 
> <?xml version="1.0" encoding="UTF-8"?>
> <methodCall><methodName>flabben.addEntry</methodName><params><param><value><int>1</int></value></param><param><value><string>Test</string></value></param><param><value><string>Huhu</string></value></param></params></methodCall>
> 
> ----- RESPONSE 
> -----------------------------------------------------------------
> 
> <?xml version="1.0" encoding="UTF-8"?>
> <methodResponse><params><param><value><string/></value></param></params></methodResponse>



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

Reply via email to