Used the object hash in RpcLiteralResponseMessageBinder to return a same instance of an object
This commit is contained in:
parent
8cd07acc11
commit
a0a3216469
|
@ -20,6 +20,8 @@ use BeSimple\SoapBundle\ServiceDefinition\Strategy\MethodComplexType;
|
||||||
*/
|
*/
|
||||||
class RpcLiteralResponseMessageBinder implements MessageBinderInterface
|
class RpcLiteralResponseMessageBinder implements MessageBinderInterface
|
||||||
{
|
{
|
||||||
|
private $messageRefs = array();
|
||||||
|
|
||||||
public function processMessage(Method $messageDefinition, $message, array $definitionComplexTypes = array())
|
public function processMessage(Method $messageDefinition, $message, array $definitionComplexTypes = array())
|
||||||
{
|
{
|
||||||
$return = $messageDefinition->getReturn();
|
$return = $messageDefinition->getReturn();
|
||||||
|
@ -61,7 +63,13 @@ class RpcLiteralResponseMessageBinder implements MessageBinderInterface
|
||||||
throw new \InvalidArgumentException();
|
throw new \InvalidArgumentException();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$hash = spl_object_hash($message);
|
||||||
|
if (isset($this->messageRefs[$hash])) {
|
||||||
|
return $this->messageRefs[$hash];
|
||||||
|
}
|
||||||
|
|
||||||
$stdClass = new \stdClass();
|
$stdClass = new \stdClass();
|
||||||
|
$this->messageRefs[$hash] = $stdClass;
|
||||||
|
|
||||||
foreach ($definitionComplexTypes[$type] as $type) {
|
foreach ($definitionComplexTypes[$type] as $type) {
|
||||||
if ($type instanceof PropertyComplexType) {
|
if ($type instanceof PropertyComplexType) {
|
||||||
|
|
|
@ -83,6 +83,24 @@ class RpcLiteralResponseMessageBinderTest extends \PHPUnit_Framework_TestCase
|
||||||
$this->assertSame(123992, $result[1]->bar);
|
$this->assertSame(123992, $result[1]->bar);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testProcessMessageWithComplexTypeReferences()
|
||||||
|
{
|
||||||
|
$attributes = new Attributes();
|
||||||
|
$attributes->foo = 'bar';
|
||||||
|
$attributes->bar = 2929;
|
||||||
|
|
||||||
|
$message = array($attributes, $attributes);
|
||||||
|
$messageBinder = new RpcLiteralResponseMessageBinder();
|
||||||
|
$result = $messageBinder->processMessage(
|
||||||
|
new Method('complextype_argument', null, array(), new Type('\BeSimple\SoapBundle\Tests\ServiceBinding\fixtures\Attributes[]')),
|
||||||
|
$message,
|
||||||
|
$this->getDefinitionComplexTypes()
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->assertInstanceOf('stdClass', $result[0]);
|
||||||
|
$this->assertSame($result[0], $result[1]);
|
||||||
|
}
|
||||||
|
|
||||||
public function messageProvider()
|
public function messageProvider()
|
||||||
{
|
{
|
||||||
$messages = array();
|
$messages = array();
|
||||||
|
|
Loading…
Reference in New Issue