php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #42010 SOAP call returns null when script is executed twice simultaneously
Submitted: 2007-07-16 15:25 UTC Modified: 2007-08-28 01:00 UTC
Votes:3
Avg. Score:4.3 ± 0.9
Reproduced:2 of 2 (100.0%)
Same Version:1 (50.0%)
Same OS:1 (50.0%)
From: alexander at abee dot de Assigned:
Status: No Feedback Package: SOAP related
PHP Version: 5.2.3 OS: Windows XP SP2
Private report: No CVE-ID: None
 [2007-07-16 15:25 UTC] alexander at abee dot de
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 :
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;SOAP-ENV:Envelope xmlns:SOAP-ENV=&quot;http://schemas.xmlsoap.org/soap/envelope/&quot; xmlns:ns1=&quot;http://webhandler.zmi.de/xsd&quot;&gt;&lt;SOAP-ENV:Body&gt;&lt;ns1:dummy&gt;&lt;ns1:v&gt;4&lt;/ns1:v&gt;&lt;/ns1:dummy&gt;&lt;/SOAP-ENV:Body&gt;&lt;/SOAP-ENV:Envelope&gt;

Response:
&lt;?xml version='1.0' encoding='utf-8'?&gt;&lt;soapenv:Envelope xmlns:soapenv=&quot;http://schemas.xmlsoap.org/soap/envelope/&quot;&gt;&lt;soapenv:Body&gt;&lt;ns:dummyResponse xmlns:ns=&quot;http://webhandler.zmi.de/xsd&quot;&gt;&lt;ns:return&gt;42&lt;/ns:return&gt;&lt;/ns:dummyResponse&gt;&lt;/soapenv:Body&gt;&lt;/soapenv:Envelope&gt;
</pre><br><pre>
Result :
object(stdClass)#3 (1) {
  ["return"]=>
  int(43)
}

Request :

&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;SOAP-ENV:Envelope xmlns:SOAP-ENV=&quot;http://schemas.xmlsoap.org/soap/envelope/&quot; xmlns:ns1=&quot;http://webhandler.zmi.de/xsd&quot;&gt;&lt;SOAP-ENV:Body&gt;&lt;ns1:dummy2&gt;&lt;ns1:v&gt;5&lt;/ns1:v&gt;&lt;/ns1:dummy2&gt;&lt;/SOAP-ENV:Body&gt;&lt;/SOAP-ENV:Envelope&gt;

Response:
&lt;?xml version='1.0' encoding='utf-8'?&gt;&lt;soapenv:Envelope xmlns:soapenv=&quot;http://schemas.xmlsoap.org/soap/envelope/&quot;&gt;&lt;soapenv:Body&gt;&lt;ns:dummy2Response xmlns:ns=&quot;http://webhandler.zmi.de/xsd&quot;&gt;&lt;ns:return&gt;43&lt;/ns:return&gt;&lt;/ns:dummy2Response&gt;&lt;/soapenv:Body&gt;&lt;/soapenv:Envelope&gt;
</pre><br>

Actual result:
--------------
This is the result I get when I hit the reload button twice:

<pre>
Result :
NULL

Request :
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;SOAP-ENV:Envelope xmlns:SOAP-ENV=&quot;http://schemas.xmlsoap.org/soap/envelope/&quot; xmlns:ns1=&quot;http://webhandler.zmi.de/xsd&quot;&gt;&lt;SOAP-ENV:Body&gt;&lt;ns1:dummy&gt;&lt;ns1:v&gt;4&lt;/ns1:v&gt;&lt;/ns1:dummy&gt;&lt;/SOAP-ENV:Body&gt;&lt;/SOAP-ENV:Envelope&gt;

Response:
&lt;?xml version='1.0' encoding='utf-8'?&gt;&lt;soapenv:Envelope xmlns:soapenv=&quot;http://schemas.xmlsoap.org/soap/envelope/&quot;&gt;&lt;soapenv:Body&gt;&lt;ns:dummy2Response xmlns:ns=&quot;http://webhandler.zmi.de/xsd&quot;&gt;&lt;ns:return&gt;42&lt;/ns:return&gt;&lt;/ns:dummy2Response&gt;&lt;/soapenv:Body&gt;&lt;/soapenv:Envelope&gt;
</pre><br><pre>
Result :
object(stdClass)#2 (1) {
  ["return"]=>
  int(43)
}

Request :

&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
&lt;SOAP-ENV:Envelope xmlns:SOAP-ENV=&quot;http://schemas.xmlsoap.org/soap/envelope/&quot; xmlns:ns1=&quot;http://webhandler.zmi.de/xsd&quot;&gt;&lt;SOAP-ENV:Body&gt;&lt;ns1:dummy2&gt;&lt;ns1:v&gt;5&lt;/ns1:v&gt;&lt;/ns1:dummy2&gt;&lt;/SOAP-ENV:Body&gt;&lt;/SOAP-ENV:Envelope&gt;

Response:
&lt;?xml version='1.0' encoding='utf-8'?&gt;&lt;soapenv:Envelope xmlns:soapenv=&quot;http://schemas.xmlsoap.org/soap/envelope/&quot;&gt;&lt;soapenv:Body&gt;&lt;ns:dummy2Response xmlns:ns=&quot;http://webhandler.zmi.de/xsd&quot;&gt;&lt;ns:return&gt;43&lt;/ns:return&gt;&lt;/ns:dummy2Response&gt;&lt;/soapenv:Body&gt;&lt;/soapenv:Envelope&gt;
</pre><br>

Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2007-07-16 15:37 UTC] alexander at abee dot de
Here are the results as they appear in the browser (just to help you as the original post is not quite readable):

Expected result: (executed once)
----------------

http://www.abee.de/php/soap/expected.html

Actual result: (executed while script is already running)
----------------

http://www.abee.de/php/soap/actual.html
 [2007-08-03 18:22 UTC] misam dot abbas at gmail dot com
Interestingly I am getting exactly the same kind of error when I use axis2 on the server side and VB on the client side. So there is probably some bug in axis2 or we have both made the same error in configuration. 
Works fine on the same method call, but if different methods are called then one of them gets a NULL response.
 [2007-08-03 18:26 UTC] alexander at abee dot de
Very interesting indeed! Meanwhile I don't use axis2 anymore...
 [2007-08-28 01:00 UTC] php-bugs at lists dot php dot net
No feedback was provided for this bug for over a week, so it is
being suspended automatically. If you are able to provide the
information that was originally requested, please do so and change
the status of the bug back to "Open".
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Sat Oct 05 07:01:27 2024 UTC