ID: 41490 Updated by: [EMAIL PROTECTED] Reported By: simon at highlyillogical dot org -Status: Open +Status: Assigned Bug Type: SOAP related Operating System: Windows/Linux PHP Version: 5.2.2 -Assigned To: +Assigned To: dmitry
Previous Comments: ------------------------------------------------------------------------ [2007-05-24 13:36:13] simon at highlyillogical dot org Description: ------------ When the PHP soap client parses a SOAP response that contains multiple recurrences of an <xsd:choice maxOccurs="unbounded"> element, the ordering of elements can be lost, as the results are grouped by element type. For example, take the following complex type: <xsd:complexType name="sentence"> <xsd:choice maxOccurs="unbounded"> <xsd element name="noun" type="xsd:string" /> <xsd element name="verb" type="xsd:string" /> <xsd element name="other" type="xsd:string" /> </xsd:choice> </xsd:type> This type can describe a sentence, with one element per word. An example sentence might be: <sentence> <other>The</other> <noun>cat</noun> <other>is</other> <verb>playing</verb> <other>with</other> <noun>string</noun> </sentence> When PHP parses this, it groups the elements by type. Thus, a sentence which reads "The cat is playing with string", is mangled to read "cat string playing The is with" I've posted a wsdl to demonstrate the problem at: http://zx81.highlyillogical.org/~simon/phpbugtest/phpbugtest.wsdl A valid XML response similar to the case above is at: http://zx81.highlyillogical.org/~simon/phpbugtest/bugtest.xml To reproduce the problem, simply call the bugtest operation on the above wsdl. It will always return the above xml response. Reproduce code: --------------- $client = new SoapClient ( "http://zx81.highlyillogical.org/~simon/phpbugtest/phpbugtest.wsdl" ) ; // we're just hitting an XML file, so we don't care about the input $result = $client->bugtest ( ) ; var_dump ( $result ) ; Expected result: ---------------- An output with the resulting objects are presented in the order in which they occurred in the document. Actual result: -------------- object(stdClass)#2 (3) { ["noun"]=> array(2) { [0]=> string(3) "cat" [1]=> string(6) "string" } ["verb"]=> string(7) "playing" ["other"]=> array(3) { [0]=> string(3) "The" [1]=> string(2) "is" [2]=> string(4) "with" } } ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=41490&edit=1