Edit report at http://bugs.php.net/bug.php?id=51475&edit=1
ID: 51475
Comment by: jstein at image dot dk
Reported by: jstein at image dot dk
Summary: setPersistance not possible with setObject
Status: Feedback
Type: Bug
Package: SOAP related
PHP Version: 5.3.2
New Comment:
SOAP server:
<?php
class Test{
private $var;
function __construct(){
$this->var=0;
}
function addOne(){
$this->var++;
return $this->getVar();
}
}
$data=$HTTP_RAW_POST_DATA;
$one=new Test();
session_start();
$server=new
SoapServer(null,array('soap_version'=>SOAP_1_2,'uri'=>"http://jsp-hotel.dk/test"));
//$server->setObject($one); // Does not work
$server->setClass('Test'); // This does work
$server->setPersistence(SOAP_PERSISTENCE_SESSION);
$server->handle($data);
?>
SOAP Client:
<?php
$client = new SoapClient(null, array('location' =>
"http://jsp-hotel.dk/test/soappersistence-setClass.php",
'uri' =>
"http://jsp-hotel.dk/test",
'trace' => true));
try {
echo $client->addOne();
echo '<hr>';
echo $client->addOne();
} catch (Exception $e) {
echo $e . '<hr>';
echo $client->__getLastRequest() . '<hr>' .
$client->__getLastRequestHeaders() . '<hr>' .
$client->__getLastResponse() . '<hr>' .
$client->__getLastResponseHeaders();
}
?>
The client prints 1 2 (as expected) when server uses "setClass", but 1 1
when server uses "setObject".
Previous Comments:
------------------------------------------------------------------------
[2010-04-24 19:14:41] [email protected]
Thank you for this bug report. To properly diagnose the problem, we
need a short but complete example script to be able to reproduce
this bug ourselves.
A proper reproducing script starts with <?php and ends with ?>,
is max. 10-20 lines long and does not require any external
resources such as databases, etc. If the script requires a
database to demonstrate the issue, please make sure it creates
all necessary tables, stored procedures etc.
Please avoid embedding huge scripts into the report.
------------------------------------------------------------------------
[2010-04-05 11:37:34] jstein at image dot dk
Description:
------------
In
http://svn.php.net/viewvc/php/php-src/trunk/ext/soap/soap.c?revision=296820&view=markup
at line 1322 "setPersistence" checks for "service->type == SOAP_CLASS",
but if you want to set an object with "setObject" instead of a class,
the service type will be SOAP_OBJECT.
I guess it should be possible to use persistence with setObject (that's
what the documentation says:
http://www.php.net/manual/en/soapserver.setpersistence.php ).
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/bug.php?id=51475&edit=1