|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
[2006-10-10 22:42 UTC] tony2001@php.net
[2006-10-23 06:46 UTC] dmitry@php.net
[2006-10-23 15:07 UTC] sos at sokhapkin dot dyndns dot org
[2006-11-01 16:55 UTC] hpuiu at xentra dot ro
[2006-11-06 16:38 UTC] dmitry@php.net
|
|||||||||||||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Sun Oct 26 03:00:01 2025 UTC |
Description: ------------ Return soap type array needs special handling in non-wsdl mode. The return array should have numeric indexes only because all elements of returned array have the same name. Here is the pacth to fix the problem: --- php_packet_soap.c.orig 2006-01-01 07:50:13.000000000 -0500 +++ php_packet_soap.c 2006-10-10 17:50:50.000000000 -0400 @@ -338,9 +338,18 @@ if (val != NULL) { if (!node_is_equal_ex(val,"result",RPC_SOAP12_NAMESPACE)) { zval *tmp; + int isarray = 0; + if(xmlHasProp(val, "type")) { + xmlChar *type; + type = xmlGetProp(val, "type"); + if(strstr(type, ":Array")) + isarray = 1; + xmlFree(type); + } + tmp = master_to_zval(NULL, val); - if (val->name) { + if (val->name && !isarray) { add_assoc_zval(return_value, (char*)val->name, tmp); } else { add_next_index_zval(return_value, tmp); Reproduce code: --------------- Here is an example of soap return xml: <soapenc:Array soapenc:arrayType="xsd:anyType[4]" xsi:type="soapenc:Array"><item xsi:type="xsd:long">17326080650</item><item xsi:type="xsd:int">1</item><item xsi:type="xsd:float">1.99</item><item xsi:type="xsd:int">0</item></soapenc:Array><soapenc:Array soapenc:arrayType="xsd:anyType[4]" xsi:type="soapenc:Array"><item xsi:type="xsd:long">17325882599</item><item xsi:type="xsd:int">1</item><item xsi:type="xsd:float">1.99</item><item xsi:type="xsd:int">0</item></soapenc:Array> Expected result: ---------------- Array => ( [0] => Array => ( [0] => 17326080650 [1] => 1 [2] => 1.99 [3] => 0 ) [1] => Array => ( [0] => 17325882599 [1] => 1 [2] => 1.99 [3] => 0 ) ) Actual result: -------------- Array => ( [Array] => Array => ( [0] => 17325882599 [1] => 1 [2] => 1.99 [3] => 0 ) )