<div dir="ltr"><div>Thanks for the response Gaetano.<br></div><div><br></div><div>Using array to hold all the parameters as a single parameter is fine and easy. My potential problem is the array content is undefined until at runtime. It could be array of arrays, array of struct, array of scalars. And for array of arrays/struct, it could be nested to contain more in the worst cases. Obviously array of scalars is the easiest case, I'd just like to be able to accommodate the more complex corner cases.</div>
<div><br></div><div>Per the PHP XML-RPC docs, in all cases, whether the xmlrpcval is array, struct, or scalar, they're all of xmlrpcval types (within an array or struct, if not a scalar by itself). So in the worst case, I'd have to traverse the array tree to parse out all the arrays/structs to individual scalar elements and return them back as scalarVal() for use by PHP as native types. Just wondering what might be optimal ways to do this kind of traversal.</div>
</div><div class="gmail_extra"><br><br><div class="gmail_quote">On Sun, Jun 16, 2013 at 1:49 PM, Gaetano Giunta <span dir="ltr"><<a href="mailto:giunta.gaetano@gmail.com" target="_blank">giunta.gaetano@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div text="#000000" bgcolor="#FFFFFF">
<div>Nice to see someone still using
phpxmlrpc. Old tech never dies! :-)<br>
<br>
On a more serious note:<br>
<br>
- the phpxmlrpc lib has functions which do recursive
encoding/decoding. they are even in the manual ;-)<br>
<br>
- the simplest way to be able to serve calls with unknown number
of parameters is to actually only use 1 parameter, of type
"array". In the array then the elements will be the real
parameters for the actual call on the php side. Of course you
loose the param/type validation done for you by the lib, and might
have to rewrite some on your own<br>
<br>
- if you feel adventurous, with some introspection magic you could
even use a struct as top-level param and allow named-parameters
over xmlrpc become positional-parameters for the php calls. iirc
there is some sample code in the lib doing that - used by the
debugger<br>
<br>
- the main limitation to this scheme is that you are bound not to
pass around php objects but only php arrays/hashes. This is
generally a good idea, security-wise<br>
<br>
- if you use php_xmlrpc on both sides of the tunnel, there even is
an option for the phpxmlrpc_encode and _decode calls which allows
embedding in the produced xml some slightly-out-of-band
information.<br>
This allows the lib to tell apart php hashes from php objects. You
will then be able to basically map ANY php function to its remote
counterpart - except for the parameters which reference resources
(eg a db connection can not be serialized across the net) or the
objects with circular references (take care!)<br>
<br>
Do not hesitate to come back if there's anything I said which is
not crystal clear<br>
<br>
bye<br>
Gaetano<br>
<br>
David Luu wrote:<br>
</div>
<blockquote type="cite"><div><div class="h5">
<div dir="ltr">
<div>Hello,<br>
</div>
<div><br>
</div>
<div>Don't know if anyone has asked this before, since the
mailing list archive spans a long time, it's just easier for
me to re-ask if asked before.</div>
<div><br>
</div>
<div>I'm working on a XML-RPC service that reflects any given
PHP class. One XML-RPC method takes any number of arguments
from the XML-RPC request/call.</div>
<div><br>
</div>
<div>In the XML-RPC method, I then store all the arguments into
a PHP array of xmlrpcvals, via iterating over
xmlrpcmsg->getParam(n) for the total # of params based on
getNumParams().</div>
<div><br>
</div>
<div>I would then like to dynamically/abstractly handle
converting each element of that xmlrpcval array into its PHP
object equivalent, where the element may be a scalar, array,
or struct (generally scalar or array). And that array may
contain yet more scalars, arrays, or structs (though for
simple case most likely scalars).</div>
<div><br>
</div>
<div>How might I recursively and/or iteratively parse the
xmlrpcval array into it's PHP equivalent in a way that handles
all cases? Since we don't know until runtime (i.e. when
XML-RPC call is made) what the exact arguments are (type and
number of them).</div>
<div><br>
</div>
<div>Has anyone done something similar before? I've done similar
for other language platforms but those libraries did more
implicit conversion handling for me, so I didn't have to go
into this level of detail as with this PHP library.</div>
<div><br>
</div>
<div>I'm planning to try to work something out when I have time,
and in the meantime, handle the simple case for now where the
array will always be of scalars (not array within array), and
ignore structs. And wanted to see what feedback/tips I can get
from the community, hence this email.</div>
<div><br>
</div>
<div>Regards,</div>
<div>David</div>
</div>
<br>
<fieldset></fieldset>
<br>
</div></div><pre>_______________________________________________
phpxmlrpc mailing list
<a href="mailto:phpxmlrpc@lists.usefulinc.com" target="_blank">phpxmlrpc@lists.usefulinc.com</a>
<a href="http://lists.usefulinc.com/cgi-bin/mailman/listinfo/phpxmlrpc" target="_blank">http://lists.usefulinc.com/cgi-bin/mailman/listinfo/phpxmlrpc</a>
</pre>
</blockquote>
<br>
</div>
<br>_______________________________________________<br>
phpxmlrpc mailing list<br>
<a href="mailto:phpxmlrpc@lists.usefulinc.com">phpxmlrpc@lists.usefulinc.com</a><br>
<a href="http://lists.usefulinc.com/cgi-bin/mailman/listinfo/phpxmlrpc" target="_blank">http://lists.usefulinc.com/cgi-bin/mailman/listinfo/phpxmlrpc</a><br>
<br></blockquote></div><br></div>