Bug #73089 [ReO]: SOAP pass dictionary parameter

From: Date: Mon, 24 Oct 2016 14:58:58 +0000
Subject: Bug #73089 [ReO]: SOAP pass dictionary parameter
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-204988@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=73089&edit=1 ID: 73089 User updated by: matteo dot veggia at gmail dot com Reported by: matteo dot veggia at gmail dot com Summary: SOAP pass dictionary parameter Status: Re-Opened Type: Bug Package: SOAP related Operating System: Windows PHP Version: 7.0.12 Block user comment: N Private report: N New Comment: I test with apache and php: with your test (with some updates): <?php $client = new class(null, ['location' => '', 'uri' => 'http://example.org', 'trace' => 1]) extends SoapClient { public function __doRequest($request, $location, $action, $version, $one_way = 0) { //echo $request; return ''; } }; $argsSOAP = new StdClass(); $argsSOAP->Data = Array(); array_push($argsSOAP->Data, Array("Key"=>"A", "Value"=>"1")); array_push($argsSOAP->Data, Array("Key"=>"B", "Value"=>"2")); $res = $client->TestRoutineDictionary($argsSOAP); echo "REQUEST:<br>" . htmlspecialchars(str_ireplace('><', ">\n<", $client->__getLastRequest())) . "<br>"; ?> WORKS!!!!! BUT with "my" client: <?php $url = "http://mylink.org/myservice.svc?wsdl"; $client = new SoapClient($url, array('trace' => 1)); $argsSOAP = new StdClass(); $argsSOAP->Data = Array(); array_push($argsSOAP->Data, Array("Key"=>"A", "Value"=>"1")); array_push($argsSOAP->Data, Array("Key"=>"B", "Value"=>"2")); $res = $client->TestRoutineDictionary($argsSOAP); echo "REQUEST:<br>" . htmlspecialchars(str_ireplace('><', ">\n<", $client->__getLastRequest())) . "<br>"; //echo "Response:<br>" . htmlspecialchars(str_ireplace('><', ">\n<", $client->__getLastResponse())) . "<br>"; ?> appears the problem: <?xml version="1.0" encoding="UTF-8"?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://tempuri.org/"> <SOAP-ENV:Body> <ns1:TestRoutineDictionary> <ns1:Data/> </ns1:TestRoutineDictionary> </SOAP-ENV:Body> </SOAP-ENV:Envelope> I await your response Previous Comments: ------------------------------------------------------------------------ [2016-10-24 14:45:23] matteo dot veggia at gmail dot com Your test works! is Apache environment? I'm using Apache/2.4.23. What's your suggestions? ------------------------------------------------------------------------ [2016-10-24 14:20:55] nikic@php.net I just downloaded the PHP 7.0.12 NTS VC14 x64 build from http://windows.php.net/download/ and ran ./php.exe -dextension=pwd/ext/php_soap.dll test.php Where test.php contains: <?php $client = new class(null, ['location' => '', 'uri' => 'http://example.org']) extends SoapClient { public function __doRequest($request, $location, $action, $version, $one_way = 0) { echo $request; return ''; } }; $argsSOAP = new StdClass(); $argsSOAP->Data = Array(); array_push($argsSOAP->Data, Array("Key"=>"A", "Value"=>"1")); array_push($argsSOAP->Data, Array("Key"=>"B", "Value"=>"2")); $client->TestRoutine($argsSOAP); And received the output: <?xml version="1.0" encoding="UTF-8"?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://example.org" xmlns:ns2="http://xml.apache.org/xml-soap" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><SOAP-ENV:Body><ns1:TestRoutine><param0 xsi:type="SOAP-ENC:Struct"><Data SOAP-ENC:arrayType="ns2:Map[2]" xsi:type="SOAP-ENC:Array"><item xsi:type="ns2:Map"><item><key xsi:type="xsd:string">Key</key><value xsi:type="xsd:string">A</value></item><item><key xsi:type="xsd:string">Value</key><value xsi:type="xsd:string">1</value></item></item><item xsi:type="ns2:Map"><item><key xsi:type="xsd:string">Key</key><value xsi:type="xsd:string">B</value></item><item><key xsi:type="xsd:string">Value</key><value xsi:type="xsd:string">2</value></item></item></Data></param0></ns1:TestRoutine></SOAP-ENV:Body></SOAP-ENV:Enve! lope> Which is the expected output. Which PHP build are you using? Is it a standard windows.php.net build or from some other packager? To preclude configuration problems, can you check what result you get when running directly from CLI (w/o server)? ------------------------------------------------------------------------ [2016-10-24 12:40:42] matteo dot veggia at gmail dot com Any news? I need this fix... ------------------------------------------------------------------------ [2016-10-18 12:59:04] matteo dot veggia at gmail dot com I also tried the two methods with PHP version 5.6.9: the results are same: <?xml version="1.0" encoding="UTF-8"?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://schemas.microsoft.com/2003/10/Serialization/Arrays" xmlns:ns2="http://tempuri.org/"> <SOAP-ENV:Body> <ns2:TestRoutineDictionary> <ns2:Data> <ns1:KeyValueOfstringstring> <ns1:Key>A</ns1:Key> <ns1:Value>1</ns1:Value> </ns1:KeyValueOfstringstring> <ns1:KeyValueOfstringstring> <ns1:Key>B</ns1:Key> <ns1:Value>2</ns1:Value> </ns1:KeyValueOfstringstring> </ns2:Data> </ns2:TestRoutineDictionary> </SOAP-ENV:Body> </SOAP-ENV:Envelope> ------------------------------------------------------------------------ [2016-10-17 14:42:31] matteo dot veggia at gmail dot com Yeah, i'm running php 7.0.12 (phpinfo()... if you want more information tell me please). Using the SoapClient::__getLastRequest() routine I have these results: $soapClient->__getLastRequest() Using array_push <?xml version="1.0" encoding="UTF-8"?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://tempuri.org/"> <SOAP-ENV:Body> <ns1:TestRoutineDictionary> <ns1:Data/> </ns1:TestRoutineDictionary> </SOAP-ENV:Body> </SOAP-ENV:Envelope> Using index assign <?xml version="1.0" encoding="UTF-8"?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://schemas.microsoft.com/2003/10/Serialization/Arrays" xmlns:ns2="http://tempuri.org/"> <SOAP-ENV:Body> <ns2:TestRoutineDictionary> <ns2:Data> <ns1:KeyValueOfstringstring> <ns1:Key>A</ns1:Key> <ns1:Value>1</ns1:Value> </ns1:KeyValueOfstringstring> <ns1:KeyValueOfstringstring> <ns1:Key>B</ns1:Key> <ns1:Value>2</ns1:Value> </ns1:KeyValueOfstringstring> </ns2:Data> </ns2:TestRoutineDictionary> </SOAP-ENV:Body> </SOAP-ENV:Envelope> I think these informations can help you. Best regards Matteo V. ------------------------------------------------------------------------ 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=73089 -- Edit this bug report at https://bugs.php.net/bug.php?id=73089&edit=1

« previous php.bugs (#204988) next »