Bug #47492 [Com]: SOAP_SINGLE_ELEMENT_ARRAYS has no effect
Edit report at https://bugs.php.net/bug.php?id=47492&edit=1
ID: 47492
Comment by: jboffel at gmail dot com
Reported by: florian dot eberle at gmail dot com
Summary: SOAP_SINGLE_ELEMENT_ARRAYS has no effect
Status: Feedback
Type: Bug
Package: SOAP related
Operating System: Debian Lenny
PHP Version: 5.2CVS-2009-02-24 (CVS)
Block user comment: N
Private report: N
New Comment:
Hi all,
I think for people without WSDL, you shouldn't expect SOAP_SINGLE_ELEMENT_ARRAYS to work.
To know it, SoapClient need a XSD saying it could be or not more than one result to decide it must
be in array or not.
Just with SOAP answer it is technically impossible to make a difference between an anwser that is
just 1 element but could have N and an answer that is known to be only 1.
Exemple :
<body>
<brotherdetail>age: 17</brotherdetail>
</body>
<body>
<brotherdetail>age: 17</brotherdetail>
<brotherdetail>sister : 1</brotherdetail>
</body>
In first case, if you don't have a XSD to say brotherdetail is a type and have rule maxOccurs =
unbounded, how do you expect SoapClient will know it could have been more than one detail ?
Of course with second example, SoapClient will now it could be because it'll find more than one
so it will naturally make an array...
Previous Comments:
------------------------------------------------------------------------
[2010-11-04 08:08:54] timothee dot groleau at mig33global dot com
Oh duh, I forgot to add some version information:
$ php -version
PHP 5.3.3 (cli) (built: Oct 29 2010 14:24:39)
Copyright (c) 1997-2010 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies
I'm on Mac OS, php was installed from macports
------------------------------------------------------------------------
[2010-11-04 07:55:50] timothee dot groleau at mig33global dot com
Same problem here. xsi:type="ns2:Vector" entries are not translated to arrays if there is
only one element inside. Example below:
soap client created like so:
============================================================
$client = new soapclient(null, array(
'location' => $soap_ejb_service_url,
'uri' => $soap_ejb_service_name,
'features' => SOAP_SINGLE_ELEMENT_ARRAYS | SOAP_USE_XSI_ARRAY_TYPE,
'trace' => true)
);
$response = $client->__soapCall($function, $parameters);
============================================================
raw soap response:
============================================================
<?xml version='1.0' encoding='UTF-8'?>
<SOAP-ENV:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Body>
<ns1:searchChatroomResponse xmlns:ns1="urn:fusion" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<return xmlns:ns2="http://xml.apache.org/xml-soap"
xsi:type="ns2:Map">
<item>
<key xsi:type="xsd:string">totalpages</key>
<value xsi:type="xsd:double">1.0</value>
</item>
<item>
<key xsi:type="xsd:string">totalresults</key>
<value xsi:type="xsd:int">1</value>
</item>
<item>
<key xsi:type="xsd:string">chatrooms</key>
<value xsi:type="ns2:Vector">
<item xsi:type="ns2:Map">
<item>
<key xsi:type="xsd:string">name</key>
<value xsi:type="xsd:string">tim_test</value>
</item>
<item>
<key xsi:type="xsd:string">id</key>
<value xsi:type="xsd:string">6</value>
</item>
<item>
<key xsi:type="xsd:string">status</key>
<value xsi:type="xsd:string">ACTIVE</value>
</item>
<item>
<key xsi:type="xsd:string">language</key>
<value xsi:type="xsd:string">ENG</value>
</item>
</item>
</value>
</item>
<item>
<key xsi:type="xsd:string">page</key>
<value xsi:type="xsd:int">1</value>
</item>
</return>
</ns1:searchChatroomResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
============================================================
$response returned by php client:
============================================================
array(4) {
["totalpages"]=>
float(1)
["totalresults"]=>
int(1)
["chatrooms"]=>
object(stdClass)#2 (1) {
["item"]=>
array(16) {
["name"]=>
string(8) "tim_test"
["id"]=>
string(1) "6"
["status"]=>
string(6) "ACTIVE"
["language"]=>
string(3) "ENG"
}
}
["page"]=>
int(1)
}
============================================================
------------------------------------------------------------------------
[2010-06-20 21:27:41] felipe@php.net
Thank you for this bug report. To properly diagnose the problem, we
need a short but complete example script to be able to reproduce
this bug ourselves.
A proper reproducing script starts with <?php and ends with ?>,
is max. 10-20 lines long and does not require any external
resources such as databases, etc. If the script requires a
database to demonstrate the issue, please make sure it creates
all necessary tables, stored procedures etc.
Please avoid embedding huge scripts into the report.
------------------------------------------------------------------------
[2009-11-27 13:45:55] niek at signet dot nl
This bug was filed a long time ago, still no replies. Is there going to be some kind of fix for
this?
------------------------------------------------------------------------
[2009-11-27 08:35:52] niek at signet dot nl
I've the same problem; but I use WSDL with my SOAP.
------------------------------------------------------------------------
The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
https://bugs.php.net/bug.php?id=47492
--
Edit this bug report at https://bugs.php.net/bug.php?id=47492&edit=1
Thread (8 messages)