bug #35480 [Messenger] Check for all serialization exceptions during message dec… (Patrick Berenschot)
This PR was merged into the 4.3 branch.
Discussion
----------
[Messenger] Check for all serialization exceptions during message dec…
| Q | A
| ------------- | ---
| Branch? | 4.4
| Bug fix? | yes
| New feature? | no
| Deprecations? | no
| Tickets | Fix #35446
| License | MIT
Makes it so that the Messenger Serializer throws a `MessageDecodingFailedException` for any serializer exception.
Commits
-------
21fffcadd5
[Messenger] Check for all serialization exceptions during message dec…
This commit is contained in:
commit
14c355548a
|
@ -207,7 +207,40 @@ class SerializerTest extends TestCase
|
|||
$encoded = $serializer->encode($envelope);
|
||||
$this->assertStringNotContainsString('DummySymfonySerializerNonSendableStamp', print_r($encoded['headers'], true));
|
||||
}
|
||||
|
||||
public function testDecodingFailedConstructorDeserialization()
|
||||
{
|
||||
$serializer = new Serializer();
|
||||
|
||||
$this->expectException(MessageDecodingFailedException::class);
|
||||
|
||||
$serializer->decode([
|
||||
'body' => '{}',
|
||||
'headers' => ['type' => DummySymfonySerializerInvalidConstructor::class],
|
||||
]);
|
||||
}
|
||||
|
||||
public function testDecodingStampFailedDeserialization()
|
||||
{
|
||||
$serializer = new Serializer();
|
||||
|
||||
$this->expectException(MessageDecodingFailedException::class);
|
||||
|
||||
$serializer->decode([
|
||||
'body' => '{"message":"hello"}',
|
||||
'headers' => [
|
||||
'type' => DummyMessage::class,
|
||||
'X-Message-Stamp-'.SerializerStamp::class => '[{}]',
|
||||
],
|
||||
]);
|
||||
}
|
||||
}
|
||||
class DummySymfonySerializerNonSendableStamp implements NonSendableStampInterface
|
||||
{
|
||||
}
|
||||
class DummySymfonySerializerInvalidConstructor
|
||||
{
|
||||
public function __construct(string $missingArgument)
|
||||
{
|
||||
}
|
||||
}
|
||||
|
|
|
@ -19,7 +19,7 @@ use Symfony\Component\Messenger\Stamp\SerializerStamp;
|
|||
use Symfony\Component\Messenger\Stamp\StampInterface;
|
||||
use Symfony\Component\Serializer\Encoder\JsonEncoder;
|
||||
use Symfony\Component\Serializer\Encoder\XmlEncoder;
|
||||
use Symfony\Component\Serializer\Exception\UnexpectedValueException;
|
||||
use Symfony\Component\Serializer\Exception\ExceptionInterface;
|
||||
use Symfony\Component\Serializer\Normalizer\ArrayDenormalizer;
|
||||
use Symfony\Component\Serializer\Normalizer\ObjectNormalizer;
|
||||
use Symfony\Component\Serializer\Serializer as SymfonySerializer;
|
||||
|
@ -81,7 +81,7 @@ class Serializer implements SerializerInterface
|
|||
|
||||
try {
|
||||
$message = $this->serializer->deserialize($encodedEnvelope['body'], $encodedEnvelope['headers']['type'], $this->format, $context);
|
||||
} catch (UnexpectedValueException $e) {
|
||||
} catch (ExceptionInterface $e) {
|
||||
throw new MessageDecodingFailedException(sprintf('Could not decode message: %s.', $e->getMessage()), $e->getCode(), $e);
|
||||
}
|
||||
|
||||
|
@ -119,7 +119,7 @@ class Serializer implements SerializerInterface
|
|||
|
||||
try {
|
||||
$stamps[] = $this->serializer->deserialize($value, substr($name, \strlen(self::STAMP_HEADER_PREFIX)).'[]', $this->format, $this->context);
|
||||
} catch (UnexpectedValueException $e) {
|
||||
} catch (ExceptionInterface $e) {
|
||||
throw new MessageDecodingFailedException(sprintf('Could not decode stamp: %s.', $e->getMessage()), $e->getCode(), $e);
|
||||
}
|
||||
}
|
||||
|
|
Reference in New Issue