当我使用addComplexType函数时,如何定义嵌套数组结构?

时间:2013-01-31 02:32:35

标签: php nusoap

我搜索了许多例子。

但我找不到如何定义嵌套数组结构,这不是key =>值类型。

客户端使用数组调用'hello'函数,该函数不是key =>值类型。

我无法触及客户端的输入参数。

客户端。

$client = new soapclient('http://localhost/Ex.php?wsdl', 'wsdl');

$ddd = array($id, $pw);
$parameter = array($aaa, $bbb, $ccc, $ddd);

// Call the SOAP method
$result = $client->call('hello',$parameter);

服务器端。

$server->wsdl->addComplexType(
    'noKey',
    'complexType',
    'struct',
    'all',
    '',
array(
    '0'=>array( 'name'=> '0', 'type' => 'xsd:string'),
    '1'=>array( 'name'=> '1', 'type' => 'xsd:string')       
    //this definition occurred error.
    )
);

$server->register('hello', // method name
    array(
        'aaa' =>'xsd:string',
        'bbb' =>'xsd:string',
        'ccc' =>'xsd:string',
        'ddd' =>'tns:noKey'
    ), // input parameters

    array('return' => 'xsd:string'), // output parameters
    'urn:Exwsdl', // namespace
    false, // soapaction
    'rpc', // style
    'encoded', // use
    'Greet a person entering the sweepstakes' // documentation
 );

 function hello($aaa, $bbb, $ccc, $ddd) {
     return $aaa.", ".$bbb.", ".$ccc.", ".$ddd[0].", ".$ddd[1];
 }

错误

Array
(
    [faultcode] => SOAP-ENV:Client
    [faultactor] => 
    [faultstring] => error in msg parsing:
    XML error parsing SOAP payload on line 1: XML_ERR_NAME_REQUIRED
    [detail] => 
)

帮助我T.T

1 个答案:

答案 0 :(得分:0)

尝试不要在复杂类型的定义中使用数字作为数组元素的名称。

以下版本的代码对我来说很好:

$server->register('hello', // method name
    array(
        'aaa' =>'xsd:string',
        'bbb' =>'xsd:string',
        'ccc' =>'xsd:string',
        'ddd' =>'tns:noKey'
    ), // input parameters

    array('return' => 'xsd:string'), // output parameters
    'urn:Exwsdl', // namespace
    false, // soapaction
    'rpc', // style
    'encoded', // use
    'Greet a person entering the sweepstakes' // documentation
);

$server->wsdl->addComplexType(
    'noKey',
    'complexType',
    'struct',
    'all',
    '',
    array(
        'forename'=>array( 'name'=> 'forename', 'type' => 'xsd:string'),
        'surname'=>array( 'name'=> 'surname', 'type' => 'xsd:string')
        )
);

function hello($aaa, $bbb, $ccc, $ddd) {
    return $aaa.", ".$bbb.", ".$ccc.", ".$ddd['forename'].", ".$ddd['surname'];
}