Re: Multiple signatures
Jeff Tupholme <[email protected]> Thu, 16 Feb 2006 21:41:21 +0000
| Newsgroups | gmane.comp.php.xml-rpc |
|---|---|
| Message-ID | <[email protected]> |
Apologies, I didn't mean to sleight the code! I was just reading back from where my error occurred and something that was supposed to be a string was coming through as an array. I believe now that this was in fact just another reflection of my issue. Sorry. Thanks to your var_dump suggestion I've solved the problem. I could see that there was a redundant level of arrays in the middle. I can see now that I misunderstood this example: > $findstate_sig=array(array($xmlrpcString, $xmlrpcInt)); It's as you suggested on Monday; I was adding an extra array because I thought that was required for multiple signatures. I can see now that there are no extra array levels required, just more elements in the existing array. In other words, even with a single signature an array around it is still required. Thanks for hanging in there and helping me solve the issue! I would have just moved on to other things without your persistence. Thanks again, Jeff On 16 Feb 2006, at 11:59am, Gaetano Giunta wrote: > Sorry, but the spec for system.methodSignature is quite clear on the > support for multiple signatures, and the code is also a clear > indication of support for multiple signatures: > > (assuming lib version 1.2.1) > > as far as listing signatures goes: > in function _xmlrpcs_methodSignature(), on line 86 we loop on all the > possible signatures of the given method, > and on lines 88-94 we list every single sig > > as far as validating sigs goes: > in method xmlrpc_server->verifySignature(), on line 322 we loop over > every available sig, on line 326 the number of parameters is checked, > and on lines 331-347 the type of the single received param is > validated. > > To be more clear, here is an example of valid usage: > > $sig1 = array ($xmlrpcI4, $xmlrpcString); // return an int, receive a > string > $sig2 = array ($xmlrpcI4); // return an int, no input params > > $dmap1 = array ( > 'method1name' => array ( > 'function' => 'foo', > 'signature' => array($sig1) // notice that I wrap $sig1 into an > array! > ) > ) > > $dmap2 = array ( > 'method1name' => array ( > 'function' => 'foo', > 'signature' => array($sig1, $sig2) > ) > ) > > To be sure about what is going on, could you add this as line 86 of > xmlrpcs.inc: > var_dump($thesigs); > and mail back the results? > > Bye > Gaetano > >> -----Original Message----- >> From: [email protected] >> [mailto:[email protected]]On Behalf Of >> Jeff Tupholme >> Sent: Tuesday, February 14, 2006 11:13 AM >> To: <[email protected]> <[email protected]> >> Subject: Re: [phpxmlrpc] Multiple signatures >> >> >> >> Thanks. I agree, but $mysig1array and $mysig2array are just regular >> arrays. At the moment I use one of them as my (single) >> signature, so I >> know it works. >> >> From a quick look at the code it seems that 'system.methodSignature' >> doesn't (yet) support multiple signatures. That makes it hard >> to debug >> them! >> >> (Again, I'm working with 1.2.1 and this may already be fixed in 2.0) >> >> >> Jeff >> >> >> On 13 Feb 2006, at 11:41pm, Gaetano Giunta wrote: >> >>> BTW: >>> the method sig must be an array of arrays, wheter you have only one >>> valid sig or more. >>> >>> If, in your code, >>> >>> >>>>>>> $xrs = new xmlrpc_server(array( >>>>>>> 'examples.myFunc' => array( >>>>>>> 'function' => 'foo', >>>>>>> 'signature' => array($mysig1array, $mysig2array) >>>>>>> ) >>>>>>> )); >>> >>> mysigarray1 and mysigarray2 are already both an array of >> array, I see >>> how this could generate a warning. >>> >>> maybe >>> you could try with: >>> 'signature' => array($mysig1array[0], $mysig2array[0]) >>> >>> Bye >>> Gaetano >>> >>>> -----Original Message----- >>>> From: [email protected] >>>> [mailto:[email protected]]On Behalf Of >>>> Jeff Tupholme >>>> Sent: Monday, February 13, 2006 7:27 PM >>>> To: [email protected] >>>> Subject: Fwd: [phpxmlrpc] Multiple signatures >>>> >>>> >>>> >>>> I see now that such notices are a known issue when running >> on PHP 5. >>>> However, it does suggest that multiple signature support is not >>>> perfect! I'll try again when PHPXMLRPC 2.0 is final. >>>> >>>> Thanks for your help. >>>> >>>> >>>> Jeff >>>> >>>> >>>> Begin forwarded message: >>>> >>>>> From: Jeff Tupholme <[email protected]> >>>>> Date: 10 February 2006 11:39:19pm GMT >>>>> To: "<[email protected]> >>>> <[email protected]>" >>>>> <[email protected]> >>>>> Subject: Re: [phpxmlrpc] Multiple signatures >>>>> >>>>> >>>>> Thanks for the help and sorry to be so long in replying! >>>>> >>>>> I've tried calling 'system.methodSignature' with the >>>> correct (second, >>>>> below) form of my method declaration in place, and I get >>>> the following >>>>> back: >>>>> >>>>>> <br /> >>>>>> <b>Notice</b>: Array to string conversion in >>>>>> <b>xmlrpc.inc</b> on line >> <b>507</b><br >>>>>> /> >>>>>> <br /> >>>>>> <b>Notice</b>: Array to string conversion in >>>>>> <b>xmlrpc.inc</b> on line >> <b>511</b><br >>>>>> /> >>>>> ... >>>>> >>>>> This of course breaks the response. The same happens if I add my >>>>> method using add_to_map(). >>>>> >>>>> I appreciate I could suppress the error (via reporting >>>> levels) to make >>>>> it work, but I'd rather fix the problem at source. Anyone >> seen this >>>>> before, please? I don't see that I have any more arrays >> than I need! >>>>> >>>>> >>>>> Thanks, >>>>> >>>>> Jeff >>>>> >>>>> >>>>> On 31 Jan 2006, at 9:17am, Gaetano Giunta wrote: >>>>> >>>>>> The first example is wrong, by virtue of php syntax: you are >>>>>> declaring twice the value of the 'signature' member of the >>>> array. The >>>>>> second declaration wins, and the only valid signature you get is >>>>>> $mysig2array. >>>>>> >>>>>> The second declaration looks ok to me. >>>>>> Are you sure that you are not mixing up the $mysig1array and >>>>>> $mysig2array arrays or omitting the return type as first value of >>>>>> $mysig1array and $mysig2array? >>>>>> >>>>>> Your best bet is to call a system.listmethods on your >>>> server, and see >>>>>> what it declares to expose. >>>>>> >>>>>> If you upgrade to version 2.0 of the lib, you will get for free a >>>>>> debugger (same interface as you get on >>>>>> http://gggeek.damacom.it/debugger ) that will do the job >>>> for you, and >>>>>> show results of the system.listmethods call in a nicely formatted >>>>>> table - very useful for introspection! >>>>>> >>>>>> Bye >>>>>> Gaetano >>>>>> >>>>>> >>>>>>> Hi, >>>>>>> >>>>>>> I'm trying to create a method with multiple signatures >> and having >>>>>>> problems. I've tried both the following formats (for >>>> illustration, I >>>>>>> actually have four variants): >>>>>>> >>>>>>> $xrs = new xmlrpc_server(array( >>>>>>> 'examples.myFunc' => array( >>>>>>> 'function' => 'foo', >>>>>>> 'signature' => $mysig1array, >>>>>>> 'signature' => $mysig2array >>>>>>> ) >>>>>>> )); >>>>>>> >>>>>>> $xrs = new xmlrpc_server(array( >>>>>>> 'examples.myFunc' => array( >>>>>>> 'function' => 'foo', >>>>>>> 'signature' => array($mysig1array, $mysig2array) >>>>>>> ) >>>>>>> )); >>>>>>> >>>>>>> I can confirm the signature arrays themselves are OK by >> using them >>>>>>> one at a time. When I combine them in the first form I >>>> get an error >>>>>>> similar to: >>>>>>> >>>>>>>> Incorrect parameters passed to method: Wanted array, got >>>> string at >>>>>>>> param 2 >>>>>>> >>>>>>> ... as it seems to get the various signatures confused. >> The second >>>>>>> form yields: >>>>>>> >>>>>>>> Incorrect parameters passed to method: No method >>>> signature matches >>>>>>>> number of parameters >>>>>>> >>>>>>> I'm using PHPXMLRPC 1.2.1 with PHP 5.1.1. >>>>>>> >>>>>>> Thanks in anticipation of any helpful suggestions.