开发者

NuSOAP - Function parameters don't map correctly

I'm writing a web service using NuSOAP in PHP. To test it, I have written both a server and a client. On the server end, I register the function like so:

$server->register(
    "testFunction",
    array("param1" => "xsd:string", "param2" => "xsd:string"),
    array("result" => 开发者_运维问答"xsd:string"),
    "http://localhost/testApp"
);

And on the client looks like this:

require_once("./lib/nusoap.php");

$client = new soapclient("http://localhost/testApp/server.php");
$function = $_GET["function"];
unset($_GET["function"]);
$result = $client->call($function, $_GET);

echo "<pre>". print_r($result, true) ."</pre>";

When I call it like

http://localhost/testApp/client.php?function=testFunction&param1=value1&param2=value2

it works fine, but if I switch param1 and param2 and say

http://localhost/testApp/client.php?function=testFunction&param2=value2&param1=value1

then param1 gets the value value2 and param2 gets the value value1. So obviously, it just goes by the order of the parameters, not the names.

I figured that since I registered the function with specific parameter names and then called the function, specifying those parameter names, that they would be assigned accordingly.

Am I missing something? What's the point of specifying the parameter names if they will just be thrown out and assigned in whatever order you entered them? Is there a way to make it so that I can enter the parameters in any order and have them map correctly?


maybe go for a default map in the client:

    $default = array(
        'param1' => '',
        'param2' => 'test',
    );
    $params = $defaults;
    foreach ( $_GET as $param_name => $param_value ) {
        if ( isset( $params[ $param_name ] ) ) $params[$param_name] = $param_value;
    }
    $client->call( $function, $params );

Simple hack, even though it doesnt "really" answer your questions.

One note, the url you're passing to the client MUST be a SOAP WSDL if you expect the client to know anything about the format of the calls being made. Is yours ? ( It's been a long time I've used nuSoap, but i recall simply adding "?wsdl" param to the server url was enough to have the server respond with a valid wsdl )

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜