-- Jan Pieper <[EMAIL PROTECTED]> wrote
(on Wednesday, 07 March 2007, 12:27 AM +0100):
> The problem is, that $tmpParams always contains "void" entries and so my 
> sent
> request cannot be handled because no signature matchs.
> 
> I hope you´ll test my attached code so you´ll see whats my fault. I am
> searching a few days for the error, tested it in many completly different
> test-applications but it only works with standalone functions and that 
> is not
> that what I want to use.

I just tried on my machine, and it worked fine... after I changed the
display_errors setting to off in both scripts. 

In particular, you'll want display_errors off in the server script as
any notices or warnings that get emitted by your code will mess with the
XML it returns.

> > -- 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