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