ID: 39121 User updated by: sos at sokhapkin dot dyndns dot org Reported By: sos at sokhapkin dot dyndns dot org -Status: Feedback +Status: Open Bug Type: SOAP related Operating System: Gentoo linux PHP Version: 5.1.6 Assigned To: dmitry New Comment:
I emailed the soap message, the bugtracker did not accept it. Previous Comments: ------------------------------------------------------------------------ [2006-10-23 06:46:27] [EMAIL PROTECTED] I cannot analyze the report without full SOAP Envelope. I fixed one bug related to this report, but I cannot be sure that it fixes your issue. (Your pathch is completly wrong). ------------------------------------------------------------------------ [2006-10-10 22:42:36] [EMAIL PROTECTED] Assigned to the maintainer. ------------------------------------------------------------------------ [2006-10-10 22:32:38] sos at sokhapkin dot dyndns dot org 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 ) ) ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=39121&edit=1