2009-06-10 5 views
4

J'ai NuSOAP serveur web: ...NuSOAP et la réponse avec Array

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

Everyting fonctionne très bien, mais la réponse semble être:

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

Comment taxi renommer « l'article "? Je dois avoir des événements -> structure de noeud d'événement.

Répondre

4

J'ai résolu ce problème en utilisant cette

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

J'utilise « élément » au lieu de « complexType » pour le paramètre classe de types.

2

Je résous le problème en faisant cela dans le v1.123 2010/04/26 20:15:08 nusoap lib.

Commentaire la ligne 6136:

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

Et ajoutez ce code:

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

Works pour moi! L'espoir aide!