Edit report at http://bugs.php.net/bug.php?id=46616&edit=1
ID: 46616
Comment by: mail2alfonso at yahoo dot com
Reported by: justin dot hendrickson at gmail dot com
Summary: Value dropped when Soap response with nodes
containing attributes and value
Status: Open
Type: Bug
Package: SOAP related
Operating System: Ubuntu 8.04
PHP Version: 5.2.6
Block user comment: N
Private report: N
New Comment:
Was this bug ever assigned to anyone?
Still reproducible in 5.3.
SOAP XML Response:
------------------
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Header/>
<soap:Body>
<GetBeeSerialSavingsClubSummaryOpenResponse xmlns="[REMOVED]">
<SerialSummaryResult>
<SerialSummaries>
<SavingsClubSerialSummary>
<SerialNumber>69956</SerialNumber>
<ExpirationDate IsNull="false"
DateTimeValue="2011-08-07T09:21:44.1400000-05:00"/>
<IssueDate IsNull="false"
DateTimeValue="2011-02-07T09:21:44.1400000-06:00"/>
<InitialValue IsNull="false" DecimalValue="100.0000"/>
<CurrentValue IsNull="false" DecimalValue="100"/>
</SavingsClubSerialSummary>
<SavingsClubSerialSummary>
<SerialNumber>77847</SerialNumber>
<ExpirationDate IsNull="false"
DateTimeValue="2011-09-04T10:23:05.5300000-05:00"/>
<IssueDate IsNull="false"
DateTimeValue="2011-03-04T10:23:05.5300000-06:00"/>
<InitialValue IsNull="false" DecimalValue="100.0000"/>
<CurrentValue IsNull="false" DecimalValue="100"/>
</SavingsClubSerialSummary>
<SavingsClubSerialSummary>
<SerialNumber>76180</SerialNumber>
<ExpirationDate IsNull="false"
DateTimeValue="2011-08-19T04:13:01.0970000-05:00"/>
<IssueDate IsNull="false"
DateTimeValue="2011-02-19T04:13:01.0970000-06:00"/>
<InitialValue IsNull="false" DecimalValue="100.0000"/>
<CurrentValue IsNull="false" DecimalValue="100"/>
</SavingsClubSerialSummary>
<SavingsClubSerialSummary>
<SerialNumber>09896</SerialNumber>
<ExpirationDate IsNull="false"
DateTimeValue="2011-07-26T10:21:46.4330000-05:00"/>
<IssueDate IsNull="false"
DateTimeValue="2011-01-26T10:21:46.4330000-06:00"/>
<InitialValue IsNull="false" DecimalValue="100.0000"/>
<CurrentValue IsNull="false" DecimalValue="100"/>
</SavingsClubSerialSummary>
<SavingsClubSerialSummary>
<SerialNumber>MG_20110405-1</SerialNumber>
<ExpirationDate IsNull="false"
DateTimeValue="2011-10-02T17:17:46.1570000-05:00"/>
<IssueDate IsNull="false"
DateTimeValue="2011-04-05T00:00:00.0000000-05:00"/>
<InitialValue IsNull="false" DecimalValue="500.0000"/>
<CurrentValue IsNull="false" DecimalValue="500"/>
</SavingsClubSerialSummary>
<SavingsClubSerialSummary>
<SerialNumber>07724</SerialNumber>
<ExpirationDate IsNull="false"
DateTimeValue="2011-07-31T22:33:00.1300000-05:00"/>
<IssueDate IsNull="false"
DateTimeValue="2011-01-31T22:33:00.1300000-06:00"/>
<InitialValue IsNull="false" DecimalValue="100.0000"/>
<CurrentValue IsNull="false" DecimalValue="100"/>
</SavingsClubSerialSummary>
</SerialSummaries>
</SerialSummaryResult>
</GetBeeSerialSavingsClubSummaryOpenResponse>
</soap:Body>
</soap:Envelope>
Object Returned by SoapClient (in print_r format):
--------------------------------------------------
stdClass Object
(
[SerialSummaries] => stdClass Object
(
[SavingsClubSerialSummary] => Array
(
[0] => stdClass Object
(
[SerialNumber] => 69956
[ExpirationDate] =>
[IssueDate] =>
[InitialValue] =>
[CurrentValue] =>
)
[1] => stdClass Object
(
[SerialNumber] => 77847
[ExpirationDate] =>
[IssueDate] =>
[InitialValue] =>
[CurrentValue] =>
)
[2] => stdClass Object
(
[SerialNumber] => 76180
[ExpirationDate] =>
[IssueDate] =>
[InitialValue] =>
[CurrentValue] =>
)
[3] => stdClass Object
(
[SerialNumber] => 09896
[ExpirationDate] =>
[IssueDate] =>
[InitialValue] =>
[CurrentValue] =>
)
[4] => stdClass Object
(
[SerialNumber] => MG_20110405-1
[ExpirationDate] =>
[IssueDate] =>
[InitialValue] =>
[CurrentValue] =>
)
[5] => stdClass Object
(
[SerialNumber] => 07724
[ExpirationDate] =>
[IssueDate] =>
[InitialValue] =>
[CurrentValue] =>
)
)
)
)
As you can see, the attributes are NOT populated with the appropriate
values.
$ php -v
PHP 5.3.2-1ubuntu4.7 with Suhosin-Patch (cli) (built: Jan 12 2011
18:36:55)
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies
with Xdebug v2.0.5, Copyright (c) 2002-2008, by Derick Rethans
Previous Comments:
------------------------------------------------------------------------
[2009-12-09 18:22:20] justin dot hendrickson at gmail dot com
No good. The descriptions are still missing the relevant information.
["descriptions"]=>
object(stdClass)#17 (1) {
["pd"]=>
array(4) {
[0]=>
object(stdClass)#18 (1) {
["t"]=>
int(1)
}
[1]=>
object(stdClass)#19 (1) {
["t"]=>
int(2)
}
[2]=>
object(stdClass)#20 (1) {
["t"]=>
int(3)
}
[3]=>
object(stdClass)#21 (1) {
["t"]=>
int(0)
}
}
}
$> php -v
PHP 5.2.12RC4-dev (cli) (built: Dec 9 2009 09:56:13)
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2009 Zend Technologies
------------------------------------------------------------------------
[2009-12-08 20:48:52] [email protected]
Please try using this snapshot:
http://snaps.php.net/php5.2-latest.tar.gz
For Windows:
http://windows.php.net/snapshots/
------------------------------------------------------------------------
[2009-06-15 09:58:06] darkservant at gmail dot com
Also happens on Windows and PHP 5.2.9 where a soap response contains a
namespace:
SOAP Response containing
<TOKEN xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:nil="false">xyz</TOKEN>
produces a
TOKEN => NULL
instead of
TOKEN => xyz
inside the response object.
------------------------------------------------------------------------
[2008-11-19 14:49:52] justin dot hendrickson at gmail dot com
Description:
------------
When casting a Soap response to a PHP value, if a node containing both
attributes and a value is encountered, the value is dropped. There's not
much information about what is suppose to happen in this case, but from
what I gathered, the value is suppose to end up in a property named "_".
Reproduce code:
---------------
The service is private, so I cannot provide the URL, but I can supply
the WSDL file upon email request.
I can provide the result of the Soap request:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soap:Body>
<SearchResult xmlns="http://com.etilize.spexlive" count="921">
<products>
<productSummary id="1011038602"><manufacturer
sku="MFC-9440CN" name="Brother Industries, Ltd" id="10328"/>
<skus>
<sku val="MFC-9440CN" type="MFGPARTNUMBER"/>
<sku val="BRT MFC9440CN" type="SP Richards
Catalog"/>
<sku val="BRTMFC9440CN" type="SP Richards"/>
<sku val="BRTMFC9440CN" type="United"/>
<sku val="BRTMFC9440CN" type="IS Group"/>
<sku val="BRTMFC9440CN" type="TriMega"/>
</skus>
<descriptions>
<pd t="2">Brother MFC-9440CN Multifunction
Printer</pd>
<pd t="1">Brother MFC-9440CN Multifunction
Printer - Color Laser - 21 ppm Mono - 21 ppm Color - 2400 x 600 dpi -
Fax, Copier, Scanner, Printer - PictBridge - Mac</pd>
<pd t="3">Multifunction Network Printer - Color
Laser - 21 ppm Mono - 21 ppm Color - 2400 x 600 dpi - Fax, Copier,
Scanner, Printer - PictBridge - Mac</pd>
<pd t="0">MFC-9440CN CLR LASER P/S/C/F USB
2400X600 64MB 21PPM</pd>
</descriptions>
</productSummary>
</products>
</SearchResult>
</soap:Body>
</soap:Envelope>
Expected result:
----------------
object(stdClass)#2 (2) {
["products"]=>
object(stdClass)#3 (1) {
["productSummary"]=>
array(1) {
[0]=>
object(stdClass)#4 (4) {
["manufacturer"]=>
object(stdClass)#5 (3) {
["id"]=>
int(10328)
["name"]=>
string(23) "Brother Industries, Ltd"
["sku"]=>
string(10) "MFC-9440CN"
}
["skus"]=>
object(stdClass)#6 (1) {
["sku"]=>
array(6) {
[0]=>
object(stdClass)#7 (2) {
["val"]=>
string(10) "MFC-9440CN"
["type"]=>
string(13) "MFGPARTNUMBER"
}
[1]=>
object(stdClass)#8 (2) {
["val"]=>
string(13) "BRT MFC9440CN"
["type"]=>
string(19) "SP Richards Catalog"
}
[2]=>
object(stdClass)#9 (2) {
["val"]=>
string(12) "BRTMFC9440CN"
["type"]=>
string(11) "SP Richards"
}
[3]=>
object(stdClass)#10 (2) {
["val"]=>
string(12) "BRTMFC9440CN"
["type"]=>
string(6) "United"
}
[4]=>
object(stdClass)#11 (2) {
["val"]=>
string(12) "BRTMFC9440CN"
["type"]=>
string(8) "IS Group"
}
[5]=>
object(stdClass)#12 (2) {
["val"]=>
string(12) "BRTMFC9440CN"
["type"]=>
string(7) "TriMega"
}
}
}
["descriptions"]=>
object(stdClass)#13 (1) {
["pd"]=>
array(4) {
[0]=>
object(stdClass)#14 (1) {
["_"]=>
"Brother MFC-9440CN Multifunction Printer"
["t"]=>
int(2)
}
[1]=>
object(stdClass)#15 (1) {
["_"]=>
"Brother MFC-9440CN Multifunction Printer - Color Laser -
21 ppm Mono - 21 ppm Color - 2400 x 600 dpi - Fax, Copier, Scanner,
Printer - PictBridge - Mac"
["t"]=>
int(1)
}
[2]=>
object(stdClass)#16 (1) {
["_"]=>
"Multifunction Network Printer - Color Laser - 21 ppm Mono
- 21 ppm Color - 2400 x 600 dpi - Fax, Copier, Scanner, Printer -
PictBridge - Mac"
["t"]=>
int(3)
}
[3]=>
object(stdClass)#17 (1) {
["_"]=>
"MFC-9440CN CLR LASER P/S/C/F USB 2400X600 64MB 21PPM"
["t"]=>
int(0)
}
}
}
["id"]=>
int(1011038602)
}
}
}
["count"]=>
int(921)
}
Actual result:
--------------
object(stdClass)#2 (2) {
["products"]=>
object(stdClass)#3 (1) {
["productSummary"]=>
array(1) {
[0]=>
object(stdClass)#4 (4) {
["manufacturer"]=>
object(stdClass)#5 (3) {
["id"]=>
int(10328)
["name"]=>
string(23) "Brother Industries, Ltd"
["sku"]=>
string(10) "MFC-9440CN"
}
["skus"]=>
object(stdClass)#6 (1) {
["sku"]=>
array(6) {
[0]=>
object(stdClass)#7 (2) {
["val"]=>
string(10) "MFC-9440CN"
["type"]=>
string(13) "MFGPARTNUMBER"
}
[1]=>
object(stdClass)#8 (2) {
["val"]=>
string(13) "BRT MFC9440CN"
["type"]=>
string(19) "SP Richards Catalog"
}
[2]=>
object(stdClass)#9 (2) {
["val"]=>
string(12) "BRTMFC9440CN"
["type"]=>
string(11) "SP Richards"
}
[3]=>
object(stdClass)#10 (2) {
["val"]=>
string(12) "BRTMFC9440CN"
["type"]=>
string(6) "United"
}
[4]=>
object(stdClass)#11 (2) {
["val"]=>
string(12) "BRTMFC9440CN"
["type"]=>
string(8) "IS Group"
}
[5]=>
object(stdClass)#12 (2) {
["val"]=>
string(12) "BRTMFC9440CN"
["type"]=>
string(7) "TriMega"
}
}
}
["descriptions"]=>
object(stdClass)#13 (1) {
["pd"]=>
array(4) {
[0]=>
object(stdClass)#14 (1) {
["t"]=>
int(2)
}
[1]=>
object(stdClass)#15 (1) {
["t"]=>
int(1)
}
[2]=>
object(stdClass)#16 (1) {
["t"]=>
int(3)
}
[3]=>
object(stdClass)#17 (1) {
["t"]=>
int(0)
}
}
}
["id"]=>
int(1011038602)
}
}
}
["count"]=>
int(921)
}
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/bug.php?id=46616&edit=1