Okay, I created a new issue regarding to this problem:
http://framework.zend.com/issues/browse/ZF-1018

-- Jan


Matthew Weier O wrote:
> 
> -- Jan Pieper <[EMAIL PROTECTED]> wrote
> (on Wednesday, 07 March 2007, 08:28 AM +0100):
>> My attached files works fine on your maschine? OS? PHP-Version? I am 
>> using Windows XP and PHP5.2.0, I actually have no unix based maschine 
>> with a php version greater than 5.1.0 to test it on a unix system.
> 
> Linux running PHP 5.2.1.
> 
>> I turned display_errors and error_reporting off (*) but if I am using a 
>> namespace for my methods I´ll always get "Calling parameters do not 
>> match signature" (Exception thrown in Zend_XmlRpc_Server:511 because 
>> $sigCalled !== $tmpParams) and this is because all parameters method 
>> (not request!) are identifed as "void". It seems that the reflection 
>> can´t parse the doc-comment. If I change all to a standalone function it 
>> works fine.
> 
> Actually, I ran the code you provided, which only ran against the
> standalone function. I tried it just now against the class, and it
> worked fine. However, that said, I did find a subtle bug: More than one
> space between the '@param' and the typehint ('int' in this case) caused
> the server to fail. That's easily fixed however, and I'll put an issue
> in the tracker for it.
> 
> 
>> *) I also tested it by using a normal fsockopen() connection and there 
>> never was any notices.
>> 
>> /***********************************************************/
>> 
>> WON´T WORK:
>> 
>> class test
>> {
>>    /**
>>     * @access public
>>     * @param int $iValueA
>>     * @param int $iValueB
>>     * @return int
>>     */
>>    public function test($iValueA, $iValueB) {
>>        return $iValueA * $iValueB;
>>    }
>> }
>> 
>> $oXmlRpcServer->setClass('test', 'mytest'); // call: mytest.test
>> 
>> /***********************************************************/
>> 
>> WORKS FINE:
>> 
>> /**
>> * @access public
>> * @param int $iValueA
>> * @param int $iValueB
>> * @return int
>> */
>> function test($iValueA, $iValueB) {
>>    return $iValueA * $iValueB;
>> }
>> 
>> $oXmlRpcServer->addFunction('test'); // call: test
>> 
>> /***********************************************************/
>> 
>> -- Jan
>> 
>> >-- 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/
> 
> 

-- 
View this message in context: 
http://www.nabble.com/Zend_XmlRpc_Server---Controller-tf3323336s16154.html#a9352215
Sent from the Zend Framework mailing list archive at Nabble.com.

Reply via email to