<html>
<head>
<meta content="text/html; charset=ISO-8859-1"
http-equiv="Content-Type">
</head>
<body text="#000000" bgcolor="#FFFFFF">
<div class="moz-cite-prefix">David Luu wrote:<br>
</div>
<blockquote
cite="mid:CA+V6+ZA0Bjnr_EX7zy7TEEti=9cmFJBYe+qfpVOWPk8ALXUWng@mail.gmail.com"
type="cite">
<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>
</blockquote>
<br>
As in my previous mail: you can use the function <span class="nf">php_xmlrpc_decode()
to do recursive decoding of arbitrarily complex xmlrpcvals (see
<a class="moz-txt-link-freetext" href="http://sourceforge.net/p/phpxmlrpc/code/HEAD/tree/trunk/xmlrpc/lib/xmlrpc.inc#l3308">http://sourceforge.net/p/phpxmlrpc/code/HEAD/tree/trunk/xmlrpc/lib/xmlrpc.inc#l3308</a>
)<br>
<br>
If you want recursive decoding done in a slightly different way,
you can create your own version of that function, taking it as
example.<br>
<br>
If you want your php server class to do the decoding of xmlrpcvals
into php values automatically for you, just set
$server->functions_parameters_types='phpvals' (see
<a class="moz-txt-link-freetext" href="http://sourceforge.net/p/phpxmlrpc/code/HEAD/tree/trunk/xmlrpc/lib/xmlrpcs.inc#l446">http://sourceforge.net/p/phpxmlrpc/code/HEAD/tree/trunk/xmlrpc/lib/xmlrpcs.inc#l446</a>
), and you will not need to do anything by yourself.<br>
<br>
Another bonus feature you might find interesting when you want to
wrap "any php function" into an xmlrpc equivalent is the one here:
<a class="moz-txt-link-freetext" href="http://sourceforge.net/p/phpxmlrpc/code/HEAD/tree/trunk/xmlrpc/lib/xmlrpc_wrappers.inc#l145">http://sourceforge.net/p/phpxmlrpc/code/HEAD/tree/trunk/xmlrpc/lib/xmlrpc_wrappers.inc#l145</a><br>
<br>
As you can see, I have played around a lot with automatic
conversion of php methods to xmlrpc calls and viceversa... ;-)<br>
<br>
</span>
<blockquote
cite="mid:CA+V6+ZA0Bjnr_EX7zy7TEEti=9cmFJBYe+qfpVOWPk8ALXUWng@mail.gmail.com"
type="cite">
<div dir="ltr">
</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 moz-do-not-send="true"
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 moz-do-not-send="true" href="mailto:phpxmlrpc@lists.usefulinc.com" target="_blank">phpxmlrpc@lists.usefulinc.com</a>
<a moz-do-not-send="true" 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 moz-do-not-send="true"
href="mailto:phpxmlrpc@lists.usefulinc.com">phpxmlrpc@lists.usefulinc.com</a><br>
<a moz-do-not-send="true"
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>
</blockquote>
<br>
</body>
</html>