NuSOAP - 函数参数未正确映射

时间:2011-08-29 16:50:53

标签: php soap parameters nusoap

我正在使用PHP中的NuSOAP编写Web服务。为了测试它,我写了一个服务器和一个客户端。在服务器端,我注册了这样的函数:

$server->register(
    "testFunction",
    array("param1" => "xsd:string", "param2" => "xsd:string"),
    array("result" => "xsd:string"),
    "http://localhost/testApp"
);

客户端看起来像这样:

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

我称之为

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

它工作正常,但如果我切换param1和param2并说

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

然后param1获取值value2,param2获取值value1。显然,它只是按参数的顺序而不是名称。

我认为,因为我使用特定的参数名称注册了函数,然后调用了函数,指定了这些参数名称,它们将被相应地分配。

我错过了什么吗?如果参数名称只是被抛出并以您输入的顺序分配,那么指定参数名称有什么意义呢?有没有办法让它能以任何顺序输入参数并让它们正确映射?

1 个答案:

答案 0 :(得分:0)

可能会在客户端中找到默认地图:

    $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 );

简单的黑客,即使它没有“真正”回答你的问题。

请注意,如果您希望客户端了解正在进行的调用的格式,那么您传递给客户端的URL必须是SOAP WSDL。是你的 ? (我已经很久没有使用nuSoap,但我记得只是在服务器URL中添加“?wsdl”param足以让服务器响应有效的wsdl)