NuSOAP и ответ с Array - PullRequest
4 голосов
/ 10 июня 2009

У меня есть веб-сервер NuSOAP: ...

    $server->register('getMembersEvents',       
        array('date' => 'xsd:string'),                      
        array('Events' => 'tns:Events'),
        'urn:my',             
        false,                          
        'rpc',                          
        false,                          
        'Description'               
    );

    $server->wsdl->addComplexType(
        'Events',
        'complexType',
        'array',
        '',
        'SOAP-ENC:Array',
        array('Event' =>array ('name' => 'Event', 'type' => 'tns:Event')),
        array(
            'Event' => array('ref'=>'SOAP-ENC:arrayType','wsdl:arrayType'=>'tns:Event[]')
        ),
        'tns:Event'
    );

$server->wsdl->addComplexType(
    'Event',
    'complexType',
    'struct',
    'all',
    '',
    array(
        'field1' => array('name' => 'MemberNumber', 'type' => 'xsd:int'),
                 // ...
        'fieldN' => array('name' => 'WebMemberID', 'type' => 'xsd:int')
    )
);

Все работает нормально, но ответ выглядит так:

<SOAP-ENV:Body>
  <ns1:getMembersEventsResponse xmlns:ns1="urn:eliza">
         <Events xsi:type="SOAP-ENC:Array" SOAP-ENC:arrayType="tns:Event[2]">
            <item xsi:type="tns:Event">
               <field1 xsi:type="xsd:int">123</field1>
                  ...
               <fieldN xsi:type="xsd:int">123</fieldN>
            </item>
            <item xsi:type="tns:Event">
               <field1 xsi:type="xsd:int">123</field1>
                  ...
               <fieldN xsi:type="xsd:int">123</fieldN>
            </item>
         </Events>
      </ns1:getMembersEventsResponse>
   </SOAP-ENV:Body>

Как мне переименовать "пункт"? Я должен иметь События -> Структура узла событий.

Ответы [ 2 ]

4 голосов
/ 01 октября 2009

Я решил эту проблему, используя

$server->wsdl->addComplexType(
'Event',
'element',
'struct',
'all',
'',
array(
    'field1' => array('name' => 'MemberNumber', 'type' => 'xsd:int'),
             // ...
    'fieldN' => array('name' => 'WebMemberID', 'type' => 'xsd:int')
));

Я использую «элемент» вместо «complexType» для параметра typeClass.

2 голосов
/ 05 июня 2012

Я решаю эту проблему, выполняя v1.123 2010/04/26 20:15:08 nusoap lib.

Комментарий строки 6136:

$contents .= $this->serializeType('item', $typeDef['arrayType'], $v, $use);

И добавьте этот код:

$tag = end( explode(":" , $typeDef['arrayType'] ));
$tag = $tag==""?'item':$tag;
$contents .= $this->serializeType( $tag, $typeDef['arrayType'], $v, $use);

У меня работает! Надежда помогает!

...