|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
[2007-07-16 15:37 UTC] alexander at abee dot de
[2007-08-03 18:22 UTC] misam dot abbas at gmail dot com
[2007-08-03 18:26 UTC] alexander at abee dot de
[2007-08-20 14:46 UTC] jani@php.net
[2007-08-28 01:00 UTC] php-bugs at lists dot php dot net
|
|||||||||||||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Mon Oct 27 21:00:02 2025 UTC |
Description: ------------ I wrote a very simple webservice using Axis2 in Java and deployed it using Apache Tomcat. The soap service contains just two functions, dummy and dummy2. Both functions just sleep for a second and then return an integer (42 and 43). When I execute the php client code below once, the output is as expected ($v1 is 42 and $v2 is 43) but when I hit reload before both calls are finished I only get a return value from the second call although "__getLastResponse()" returns a valid xml document which contains the expected result. It looks like the parsing of the xml response doesn't work correctly when multiple threads are running. Strangely this doesn't happen when I call the same method twice (ie. dummy and then dummy again in the same script) - then I get the same value in $v1 and $v2. As __getLastResponse() return the correct xml response I assume this is a php bug and not an Axis2 bug. I tried several versions of PHP including 5.1.2.2, 5.2.3 and the latest snapshot - all with the same result. Reproduce code: --------------- <?php function printResult($result, $soap) { print "<pre>\n"; print "Result :\n"; var_dump($result); print "\n"; print "Request :\n".htmlspecialchars($soap->__getLastRequest()) ."\n"; print "Response:\n".htmlspecialchars($soap->__getLastResponse())."\n"; print "</pre><br>"; } $soap = new SoapClient('http://127.0.0.1:8080/axis2/services/WebhandlerService?wsdl', array('trace' => 1)); $v1 = $soap->dummy(array('v' => '4')); printResult($v1, $soap); $v2 = $soap->dummy2(array('v' => '5')); printResult($v2, $soap); ?> Expected result: ---------------- This is the result I expect and which I get on the first call of the php script: <pre> Result : object(stdClass)#2 (1) { ["return"]=> int(42) } Request : <?xml version="1.0" encoding="UTF-8"?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://webhandler.zmi.de/xsd"><SOAP-ENV:Body><ns1:dummy><ns1:v>4</ns1:v></ns1:dummy></SOAP-ENV:Body></SOAP-ENV:Envelope> Response: <?xml version='1.0' encoding='utf-8'?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Body><ns:dummyResponse xmlns:ns="http://webhandler.zmi.de/xsd"><ns:return>42</ns:return></ns:dummyResponse></soapenv:Body></soapenv:Envelope> </pre><br><pre> Result : object(stdClass)#3 (1) { ["return"]=> int(43) } Request : <?xml version="1.0" encoding="UTF-8"?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://webhandler.zmi.de/xsd"><SOAP-ENV:Body><ns1:dummy2><ns1:v>5</ns1:v></ns1:dummy2></SOAP-ENV:Body></SOAP-ENV:Envelope> Response: <?xml version='1.0' encoding='utf-8'?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Body><ns:dummy2Response xmlns:ns="http://webhandler.zmi.de/xsd"><ns:return>43</ns:return></ns:dummy2Response></soapenv:Body></soapenv:Envelope> </pre><br> Actual result: -------------- This is the result I get when I hit the reload button twice: <pre> Result : NULL Request : <?xml version="1.0" encoding="UTF-8"?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://webhandler.zmi.de/xsd"><SOAP-ENV:Body><ns1:dummy><ns1:v>4</ns1:v></ns1:dummy></SOAP-ENV:Body></SOAP-ENV:Envelope> Response: <?xml version='1.0' encoding='utf-8'?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Body><ns:dummy2Response xmlns:ns="http://webhandler.zmi.de/xsd"><ns:return>42</ns:return></ns:dummy2Response></soapenv:Body></soapenv:Envelope> </pre><br><pre> Result : object(stdClass)#2 (1) { ["return"]=> int(43) } Request : <?xml version="1.0" encoding="UTF-8"?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://webhandler.zmi.de/xsd"><SOAP-ENV:Body><ns1:dummy2><ns1:v>5</ns1:v></ns1:dummy2></SOAP-ENV:Body></SOAP-ENV:Envelope> Response: <?xml version='1.0' encoding='utf-8'?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Body><ns:dummy2Response xmlns:ns="http://webhandler.zmi.de/xsd"><ns:return>43</ns:return></ns:dummy2Response></soapenv:Body></soapenv:Envelope> </pre><br>