Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 9b575ab

Browse files
committed
Uses Symfony Serializer by default for envelope items
1 parent 0978604 commit 9b575ab

File tree

2 files changed

+43
-12
lines changed

2 files changed

+43
-12
lines changed

src/Symfony/Component/Messenger/Tests/Transport/Serialization/SerializerTest.php

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -80,24 +80,30 @@ public function testUsesTheCustomFormatAndContext()
8080
$this->assertSame($message, $decoded->getMessage());
8181
}
8282

83-
public function testEncodedWithSerializationConfiguration()
83+
public function testEncodedWithSymfonySerializerForItems()
8484
{
8585
$serializer = new Serializer(
86-
new SerializerComponent\Serializer(array(new ObjectNormalizer()), array('json' => new JsonEncoder()))
86+
new SerializerComponent\Serializer(array(new ObjectNormalizer()), array('json' => new JsonEncoder())),
87+
'json',
88+
array()
8789
);
8890

8991
$envelope = Envelope::wrap(new DummyMessage('Hello'))
90-
->with(new SerializerConfiguration(array(ObjectNormalizer::GROUPS => array('foo'))))
91-
->with(new ValidationConfiguration(array('foo', 'bar')))
92+
->with($serializerConfiguration = new SerializerConfiguration(array(ObjectNormalizer::GROUPS => array('foo'))))
93+
->with($validationConfiguration = new ValidationConfiguration(array('foo', 'bar')))
9294
;
9395

9496
$encoded = $serializer->encode($envelope);
9597

9698
$this->assertArrayHasKey('body', $encoded);
9799
$this->assertArrayHasKey('headers', $encoded);
98100
$this->assertArrayHasKey('type', $encoded['headers']);
99-
$this->assertEquals(DummyMessage::class, $encoded['headers']['type']);
100-
$this->assertArrayHasKey('X-Message-Envelope-Items', $encoded['headers']);
101-
$this->assertSame('a:2:{s:75:"Symfony\Component\Messenger\Transport\Serialization\SerializerConfiguration";O:75:"Symfony\Component\Messenger\Transport\Serialization\SerializerConfiguration":1:{s:84:"'."\0".'Symfony\Component\Messenger\Transport\Serialization\SerializerConfiguration'."\0".'context";a:1:{s:6:"groups";a:1:{i:0;s:3:"foo";}}}s:76:"Symfony\Component\Messenger\Middleware\Configuration\ValidationConfiguration";O:76:"Symfony\Component\Messenger\Middleware\Configuration\ValidationConfiguration":1:{s:84:"'."\0".'Symfony\Component\Messenger\Middleware\Configuration\ValidationConfiguration'."\0".'groups";a:2:{i:0;s:3:"foo";i:1;s:3:"bar";}}}', $encoded['headers']['X-Message-Envelope-Items']);
101+
$this->assertArrayHasKey('X-Message-Envelope-Symfony\Component\Messenger\Transport\Serialization\SerializerConfiguration', $encoded['headers']);
102+
$this->assertArrayHasKey('X-Message-Envelope-Symfony\Component\Messenger\Middleware\Configuration\ValidationConfiguration', $encoded['headers']);
103+
104+
$decoded = $serializer->decode($encoded);
105+
106+
$this->assertEquals($serializerConfiguration, $decoded->get(SerializerConfiguration::class));
107+
$this->assertEquals($validationConfiguration, $decoded->get(ValidationConfiguration::class));
102108
}
103109
}

src/Symfony/Component/Messenger/Transport/Serialization/Serializer.php

Lines changed: 30 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ public function decode(array $encodedEnvelope): Envelope
4343
throw new \InvalidArgumentException('Encoded envelope does not have a `type` header.');
4444
}
4545

46-
$envelopeItems = isset($encodedEnvelope['headers']['X-Message-Envelope-Items']) ? unserialize($encodedEnvelope['headers']['X-Message-Envelope-Items']) : array();
46+
$envelopeItems = $this->decodeEnvelopeItems($encodedEnvelope);
4747

4848
$context = $this->context;
4949
/** @var SerializerConfiguration|null $serializerConfig */
@@ -67,14 +67,39 @@ public function encode(Envelope $envelope): array
6767
$context = $serializerConfig->getContext() + $context;
6868
}
6969

70-
$headers = array('type' => \get_class($envelope->getMessage()));
71-
if ($configurations = $envelope->all()) {
72-
$headers['X-Message-Envelope-Items'] = serialize($configurations);
73-
}
70+
$headers = array('type' => \get_class($envelope->getMessage())) + $this->encodeEnvelopeItems($envelope);
7471

7572
return array(
7673
'body' => $this->serializer->serialize($envelope->getMessage(), $this->format, $context),
7774
'headers' => $headers,
7875
);
7976
}
77+
78+
private function decodeEnvelopeItems($encodedEnvelope)
79+
{
80+
$items = array();
81+
foreach ($encodedEnvelope['headers'] as $name => $value) {
82+
if (0 !== strpos($name, $prefix = 'X-Message-Envelope-')) {
83+
continue;
84+
}
85+
86+
$items[] = $this->serializer->deserialize($value, substr($name, \strlen($prefix)), $this->format, $this->context);
87+
}
88+
89+
return $items;
90+
}
91+
92+
private function encodeEnvelopeItems(Envelope $envelope)
93+
{
94+
if (!$configurations = $envelope->all()) {
95+
return array();
96+
}
97+
98+
$headers = array();
99+
foreach ($configurations as $configuration) {
100+
$headers['X-Message-Envelope-'.\get_class($configuration)] = $this->serializer->serialize($configuration, $this->format, $this->context);
101+
}
102+
103+
return $headers;
104+
}
80105
}

0 commit comments

Comments
 (0)