我是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>
我如何重命名“项目”?我必须有活动 - &gt;事件节点结构。
答案 0 :(得分:4)
我使用此
解决了这个问题$server->wsdl->addComplexType(
'Event',
'element',
'struct',
'all',
'',
array(
'field1' => array('name' => 'MemberNumber', 'type' => 'xsd:int'),
// ...
'fieldN' => array('name' => 'WebMemberID', 'type' => 'xsd:int')
));
我对typeClass参数使用“element”而不是“complexType”。
答案 1 :(得分:2)
我在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);
适合我! 希望有所帮助!