Bug #73089 [Com]: SOAP pass dictionary parameter

From: Date: Sun, 04 Dec 2016 15:43:06 +0000
Subject: Bug #73089 [Com]: SOAP pass dictionary parameter
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-205763@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 Comment by: sjon at hortensius dot net 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.1.0 Block user comment: N Private report: N New Comment: @matteo - if the php.exe works then this is probably not a bug in php but in your apache configuration. You should verify what dll apache uses, check your configuration for the LoadModule call for php and make sure it looks like this: LoadModule php7_module "c:/php/php7apache2.dll" Obviously the php7apache2.dll you reference here should be 7.0.12 or higher. This is also explained in the "install.txt" that is in the file you download from http://windows.php.net/download Previous Comments: ------------------------------------------------------------------------ [2016-12-02 12:49:29] matteo dot veggia at gmail dot com The problem persist.... Please help. ------------------------------------------------------------------------ [2016-11-14 10:45:30] matteo dot veggia at gmail dot com The issue persists with PHP Version 7.0.13! I rewrite my code to remake the question simplified: $url = "wwwp.example.com/hello.svc?wdsl"; $options = Array("trace"=>1); //FIRST METHOD!!! (not working) $soapClient = new SoapClient($url, $options); $argsSOAP = new StdClass(); $argsSOAP->Data = Array(); array_push($argsSOAP->Data, Array("Key"=>"A", "Value"=>"1")); array_push($argsSOAP->Data, Array("Key"=>"B", "Value"=>"2")); $resSOAP = $soapClient->TestRoutineDictionary($argsSOAP); echo "REQUEST:<br>" . htmlspecialchars(str_ireplace('><', ">\n<", $soapClient->__getLastRequest())) . "<br>"; echo "Response:<br>" . htmlspecialchars(str_ireplace('><', ">\n<", $soapClient->__getLastResponse())) . "<br>"; echo "\n\n<hr>\n\n"; //SECOND METHOD (working...) $soapClient2 = new SoapClient($url, $options); $argsSOAP2 = new StdClass(); $argsSOAP2->Data = Array(); $argsSOAP2->Data[0] = Array("Key"=>"A", "Value"=>"1"); $argsSOAP2->Data[1] = Array("Key"=>"B", "Value"=>"2"); $resSOAP2 = $soapClient2->TestRoutineDictionary($argsSOAP2); echo "REQUEST:<br>" . htmlspecialchars(str_ireplace('><', ">\n<", $soapClient2->__getLastRequest())) . "<br>"; echo "Response:<br>" . htmlspecialchars(str_ireplace('><', ">\n<", $soapClient2->__getLastResponse())) . "<br>"; I execute this script with php.exe (without apache!) The results are different! In the first result is missing "http://schemas.microsoft.com/2003/10/Serialization/Arrays"... Please help me. Matteo ------------------------------------------------------------------------ [2016-10-24 14:58:56] matteo dot veggia at gmail dot com 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 ------------------------------------------------------------------------ [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)? ------------------------------------------------------------------------ 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 (#205763) next »