8000 Add ChainNormalizer and ChainDenormalizer · symfony/symfony@98bdcb8 · GitHub
[go: up one dir, main page]

Skip to content

Commit 98bdcb8

Browse files
committed
Add ChainNormalizer and ChainDenormalizer
1 parent 85e0742 commit 98bdcb8

File tree

50 files changed

+970
-492
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

50 files changed

+970
-492
lines changed

src/Symfony/Bridge/Twig/Tests/Extension/SerializerExtensionTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ public static function serializerDataProvider(): \Generator
5050
private function getTwig(string $template): Environment
5151
{
5252
$meta = new ClassMetadataFactory(new AttributeLoader());
53-
$runtime = new SerializerRuntime(new Serializer([new ObjectNormalizer($meta)], [new JsonEncoder(), new YamlEncoder()]));
53+
$runtime = new SerializerRuntime(new Serializer([], [new JsonEncoder(), new YamlEncoder()], new ObjectNormalizer($meta), new ObjectNormalizer($meta)));
5454

5555
$mockRuntimeLoader = $this->createMock(RuntimeLoaderInterface::class);
5656
$mockRuntimeLoader

src/Symfony/Bridge/Twig/Tests/Mime/TemplatedEmailTest.php

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717
use Symfony\Component\PropertyInfo\Extractor\PhpDocExtractor;
1818
use Symfony\Component\Serializer\Encoder\JsonEncoder;
1919
use Symfony\Component\Serializer\Normalizer\ArrayDenormalizer;
20+
use Symfony\Component\Serializer\Normalizer\ChainDenormalizer;
21+
use Symfony\Component\Serializer\Normalizer\ChainNormalizer;
2022
use Symfony\Component\Serializer\Normalizer\MimeMessageNormalizer;
2123
use Symfony\Component\Serializer\Normalizer\ObjectNormalizer;
2224
use Symfony\Component\Serializer\Normalizer\PropertyNormalizer;
@@ -105,12 +107,23 @@ public function testSymfonySerialize()
105107

106108
$extractor = new PhpDocExtractor();
107109
$propertyNormalizer = new PropertyNormalizer(null, null, $extractor);
108-
$serializer = new Serializer([
110+
$normalizers = [
111+
new MimeMessageNormalizer($propertyNormalizer),
112+
new ObjectNormalizer(null, null, null, $extractor),
113+
$propertyNormalizer,
114+
];
115+
$denormalizers = [
109116
new ArrayDenormalizer(),
110117
new MimeMessageNormalizer($propertyNormalizer),
111118
new ObjectNormalizer(null, null, null, $extractor),
112119
$propertyNormalizer,
113-
], [new JsonEncoder()]);
120+
];
121+
$serializer = new Serializer(
122+
[],
123+
[new JsonEncoder()],
124+
new ChainNormalizer($normalizers),
125+
new ChainDenormalizer($denormalizers),
126+
);
114127

115128
$serialized = $serializer->serialize($e, 'json', [ObjectNormalizer::IGNORED_ATTRIBUTES => ['cachedBody']]);
116129
$this->assertStringMatchesFormat($expectedJson, json_encode(json_decode($serialized), \JSON_PRETTY_PRINT | \JSON_UNESCAPED_SLASHES));

src/Symfony/Bridge/Twig/composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@
4343
"symfony/security-core": "^6.4|^7.0",
4444
"symfony/security-csrf": "^6.4|^7.0",
4545
"symfony/security-http": "^6.4|^7.0",
46-
"symfony/serializer": "^6.4.3|^7.0.3",
46+
"symfony/serializer": "^7.1",
4747
"symfony/stopwatch": "^6.4|^7.0",
4848
"symfony/console": "^6.4|^7.0",
4949
"symfony/expression-language": "^6.4|^7.0",

src/Symfony/Bundle/FrameworkBundle/Resources/config/serializer.php

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@
3333
use Symfony\Component\Serializer\NameConverter\MetadataAwareNameConverter;
3434
use Symfony\Component\Serializer\Normalizer\ArrayDenormalizer;
3535
use Symfony\Component\Serializer\Normalizer\BackedEnumNormalizer;
36+
use Symfony\Component\Serializer\Normalizer\ChainDenormalizer;
37+
use Symfony\Component\Serializer\Normalizer\ChainNormalizer;
3638
use Symfony\Component\Serializer\Normalizer\ConstraintViolationListNormalizer;
3739
use Symfony\Component\Serializer\Normalizer\DataUriNormalizer;
3840
use Symfony\Component\Serializer\Normalizer\DateIntervalNormalizer;
@@ -58,12 +60,16 @@
5860
;
5961

6062
$container->services()
63+
->set('serializer.normalizer', ChainNormalizer::class)
64+
->args([[]])
65+
->set('serializer.denormalizer', ChainDenormalizer::class)
66+
->args([[]])
6167
->set('serializer', Serializer::class)
62-
->args([[], []])
68+
->args([[], [], service('serializer.normalizer'), service('serializer.denormalizer')])
6369

6470
->alias(SerializerInterface::class, 'serializer')
65-
->alias(NormalizerInterface::class, 'serializer')
66-
->alias(DenormalizerInterface::class, 'serializer')
71+
->alias(NormalizerInterface::class, 'serializer.normalizer')
72+
->alias(DenormalizerInterface::class, 'serializer.denormalizer')
6773
->alias(EncoderInterface::class, 'serializer')
6874
->alias(DecoderInterface::class, 'serializer')
6975

src/Symfony/Bundle/FrameworkBundle/composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@
5959
"symfony/scheduler": "^6.4.3|^7.0.3",
6060
"symfony/security-bundle": "^6.4|^7.0",
6161
"symfony/semaphore": "^6.4|^7.0",
62-
"symfony/serializer": "^6.4|^7.0",
62+
"symfony/serializer": "^7.1",
6363
"symfony/stopwatch": "^6.4|^7.0",
6464
"symfony/string": "^6.4|^7.0",
6565
"symfony/translation": "^6.4|^7.0",

src/Symfony/Component/ErrorHandler/Tests/ErrorRenderer/SerializerErrorRendererTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ public function testSerializerContent()
3030
{
3131
$exception = new \RuntimeException('Foo');
3232
$errorRenderer = new SerializerErrorRenderer(
33-
new Serializer([new ProblemNormalizer()], [new JsonEncoder()]),
33+
new Serializer([], [new JsonEncoder()], new ProblemNormalizer()),
3434
fn () => 'json'
3535
);
3636

src/Symfony/Component/ErrorHandler/composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
},
2323
"require-dev": {
2424
"symfony/http-kernel": "^6.4|^7.0",
25-
"symfony/serializer": "^6.4|^7.0",
25+
"symfony/serializer": "^7.1",
2626
"symfony/deprecation-contracts": "^2.5|^3"
2727
},
2828
"conflict": {

src/Symfony/Component/HttpKernel/Tests/Controller/ArgumentResolver/RequestPayloadValueResolverTest.php

Lines changed: 41 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@
2525
use Symfony\Component\Serializer\Encoder\XmlEncoder;
2626
use Symfony\Component\Serializer\Exception\NotNormalizableValueException;
2727
use Symfony\Component\Serializer\Exception\PartialDenormalizationException;
28+
use Symfony\Component\Serializer\Normalizer\ChainDenormalizer;
29+
use Symfony\Component\Serializer\Normalizer\ChainNormalizer;
2830
use Symfony\Component\Serializer\Normalizer\DenormalizerInterface;
2931
use Symfony\Component\Serializer\Normalizer\ObjectNormalizer;
3032
use Symfony\Component\Serializer\Serializer;
@@ -202,7 +204,10 @@ public function testQueryNullPayloadAndNotDefaultOrNullableArgument()
202204
}
203205
}
204206

205-
public function testWithoutValidatorAndCouldNotDenormalize()
207+
/**
208+
* @group legacy
209+
*/
210+
public function testWithoutValidatorAndCouldNotDenormalizeWithLegacySerializer()
206211
{
207212
$content = '{"price": 50, "title": ["not a string"]}';
208213
$serializer = new Serializer([new ObjectNormalizer()], ['json' => new JsonEncoder()]);
@@ -226,10 +231,34 @@ public function testWithoutValidatorAndCouldNotDenormalize()
226231
}
227232
}
228233

234+
public function testWithoutValidatorAndCouldNotDenormalize()
235+
{
236+
$content = '{"price": 50, "title": ["not a string"]}';
237+
$serializer = new Serializer([], ['json' => new JsonEncoder()], new ChainNormalizer([new ObjectNormalizer()]), new ChainDenormalizer([new ObjectNormalizer()]));
238+
239+
$resolver = new RequestPayloadValueResolver($serializer);
240+
241+
$argument = new ArgumentMetadata('invalid', RequestPayload::class, false, false, null, false, [
242+
MapRequestPayload::class => new MapRequestPayload(),
243+
]);
244+
$request = Request::create('/', 'POST', server: ['CONTENT_TYPE' => 'application/json'], content: $content);
245+
246+
$kernel = $this->createMock(HttpKernelInterface::class);
247+
$arguments = $resolver->resolve($request, $argument);
248+
$event = new ControllerArgumentsEvent($kernel, function () {}, $arguments, $request, HttpKernelInterface::MAIN_REQUEST);
249+
250+
try {
251+
$resolver->onKernelControllerArguments($event);
252+
$this->fail(sprintf('Expected "%s" to be thrown.', HttpException::class));
253+
} catch (HttpException $e) {
254+
$this->assertInstanceOf(PartialDenormalizationException::class, $e->getPrevious());
255+
}
256+
}
257+
229258
public function testValidationNotPassed()
230259
{
231260
$content = '{"price": 50, "title": ["not a string"]}';
232-
$serializer = new Serializer([new ObjectNormalizer()], ['json' => new JsonEncoder()]);
261+
$serializer = new Serializer([], ['json' => new JsonEncoder()], new ChainNormalizer([new ObjectNormalizer()]), new ChainDenormalizer([new ObjectNormalizer()]));
233262

234263
$validator = $this->createMock(ValidatorInterface::class);
235264
$validator->expects($this->never())
@@ -260,7 +289,7 @@ public function testValidationNotPassed()
260289
public function testValidationNotPerformedWhenPartialDenormalizationReturnsViolation()
261290
{
262291
$content = '{"password": "abc"}';
263-
$serializer = new Serializer([new ObjectNormalizer()], ['json' => new JsonEncoder()]);
292+
$serializer = new Serializer([], ['json' => new JsonEncoder()], new ObjectNormalizer(), new ObjectNormalizer());
264293

265294
$validator = $this->createMock(ValidatorInterface::class);
266295
$validator->expects($this->never())
@@ -314,7 +343,7 @@ public function testRequestContentValidationPassed()
314343
{
315344
$content = '{"price": 50}';
316345
$payload = new RequestPayload(50);
317-
$serializer = new Serializer([new ObjectNormalizer()], ['json' => new JsonEncoder()]);
346+
$serializer = new Serializer([], ['json' => new JsonEncoder()], new ChainNormalizer([new ObjectNormalizer()]), new ChainDenormalizer([new ObjectNormalizer()]));
318347

319348
$validator = $this->createMock(ValidatorInterface::class);
320349
$validator->expects($this->once())
@@ -370,7 +399,7 @@ public function testQueryStringValidationPassed()
370399
$payload = new RequestPayload(50);
371400
$query = ['price' => '50'];
372401

373-
$serializer = new Serializer([new ObjectNormalizer()], ['json' => new JsonEncoder()]);
402+
$serializer = new Serializer([], ['json' => new JsonEncoder()], new ChainNormalizer([new ObjectNormalizer()]), new ChainDenormalizer([new ObjectNormalizer()]));
374403

375404
$validator = $this->createMock(ValidatorInterface::class);
376405
$validator->expects($this->once())
@@ -398,7 +427,7 @@ public function testRequestInputValidationPassed()
398427
$input = ['price' => '50'];
399428
$payload = new RequestPayload(50);
400429

401-
$serializer = new Serializer([new ObjectNormalizer()], ['json' => new JsonEncoder()]);
430+
$serializer = new Serializer([], ['json' => new JsonEncoder()], new ChainNormalizer([new ObjectNormalizer()]), new ChainDenormalizer([new ObjectNormalizer()]));
402431

403432
$validator = $this->createMock(ValidatorInterface::class);
404433
$validator->expects($this->once())
@@ -443,7 +472,7 @@ public function testItThrowsOnVariadicArgument()
443472
public function testAcceptFormatPassed(mixed $acceptFormat, string $contentType, string $content)
444473
{
445474
$encoders = ['json' => new JsonEncoder(), 'xml' => new XmlEncoder()];
446-
$serializer = new Serializer([new ObjectNormalizer()], $encoders);
475+
$serializer = new Serializer([], $encoders, new ObjectNormalizer(), new ObjectNormalizer());
447476
$validator = (new ValidatorBuilder())->getValidator();
448477
$resolver = new RequestPayloadValueResolver($serializer, $validator);
449478

@@ -506,7 +535,7 @@ public static function provideMatchedFormatContext(): iterable
506535
*/
507536
public function testAcceptFormatNotPassed(mixed $acceptFormat, string $contentType, string $content, string $expectedExceptionMessage)
508537
{
509-
$serializer = new Serializer([new ObjectNormalizer()]);
538+
$serializer = new Serializer([], [], new ObjectNormalizer(), new ObjectNormalizer());
510539
$validator = (new ValidatorBuilder())->getValidator();
511540
$resolver = new RequestPayloadValueResolver($serializer, $validator);
512541

@@ -577,7 +606,7 @@ public function testValidationGroupsPassed(string $method, ValueResolver $attrib
577606
$payload = new RequestPayload(50);
578607
$payload->title = 'A long title, so the validation passes';
579608

580-
$serializer = new Serializer([new ObjectNormalizer()]);
609+
$serializer = new Serializer([], [], new ObjectNormalizer(), new ObjectNormalizer());
581610
$validator = (new ValidatorBuilder())->enableAttributeMapping()->getValidator();
582611
$resolver = new RequestPayloadValueResolver($serializer, $validator);
583612

@@ -603,7 +632,7 @@ public function testValidationGroupsNotPassed(string $method, ValueResolver $att
603632
{
604633
$input = ['price' => '50', 'title' => 'Too short'];
605634

606-
$serializer = new Serializer([new ObjectNormalizer()]);
635+
$serializer = new Serializer([], [], new ObjectNormalizer(), new ObjectNormalizer());
607636
$validator = (new ValidatorBuilder())->enableAttributeMapping()->getValidator();
608637
$resolver = new RequestPayloadValueResolver($serializer, $validator);
609638

@@ -662,7 +691,7 @@ public static function provideValidationGroupsOnManyTypes(): iterable
662691

663692
public function testQueryValidationErrorCustomStatusCode()
664693
{
665-
$serializer = new Serializer([new ObjectNormalizer()], []);
694+
$serializer = new Serializer([], [], new ObjectNormalizer(), new ObjectNormalizer());
666695

667696
$validator = $this->createMock(ValidatorInterface::class);
668697

@@ -695,7 +724,7 @@ public function testQueryValidationErrorCustomStatusCode()
695724
public function testRequestPayloadValidationErrorCustomStatusCode()
696725
{
697726
$content = '{"price": 50, "title": ["not a string"]}';
698-
$serializer = new Serializer([new ObjectNormalizer()], ['json' => new JsonEncoder()]);
727+
$serializer = new Serializer([], ['json' => new JsonEncoder()], new ChainNormalizer([new ObjectNormalizer()]), new ChainDenormalizer([new ObjectNormalizer()]));
699728

700729
$validator = $this->createMock(ValidatorInterface::class);
701730
$validator->expects($this->never())

src/Symfony/Component/Messenger/Bridge/AmazonSqs/Tests/Transport/AmazonSqsReceiverTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ private function createSqsEnvelope()
6868
private function createSerializer(): Serializer
6969
{
7070
$serializer = new Serializer(
71-
new SerializerComponent\Serializer([new ObjectNormalizer()], ['json' => new JsonEncoder()])
71+
new SerializerComponent\Serializer([], ['json' => new JsonEncoder()], new ObjectNormalizer(), new ObjectNormalizer())
7272
);
7373

7474
return $serializer;

src/Symfony/Component/Messenger/Bridge/AmazonSqs/composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
"require-dev": {
2727
"symfony/http-client-contracts": "^2.5|^3",
2828
"symfony/property-access": "^6.4|^7.0",
29-
"symfony/serializer": "^6.4|^7.0"
29+
"symfony/serializer": "^7.1"
3030
},
3131
"conflict": {
3232
"symfony/http-client-contracts": "<2.5"

src/Symfony/Component/Messenger/Bridge/Amqp/Tests/Fixtures/long_receiver.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
use Symfony\Component\Serializer\Normalizer\ObjectNormalizer;
2727

2828
$serializer = new Serializer(
29-
new SerializerComponent\Serializer([new ObjectNormalizer(), new ArrayDenormalizer()], ['json' => new JsonEncoder()])
29+
new SerializerComponent\Serializer([], ['json' => new JsonEncoder()], new ObjectNormalizer(), new SerializerComponent\Normalizer\ChainDenormalizer([new ObjectNormalizer(), new ArrayDenormalizer()]))
3030
);
3131

3232
$connection = Connection::fromDsn(getenv('DSN'));

src/Symfony/Component/Messenger/Bridge/Amqp/Tests/Transport/AmqpExtIntegrationTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -262,7 +262,7 @@ private function waitForOutput(Process $process, string $output, $timeoutInSecon
262262
private function createSerializer(): SerializerInterface
263263
{
264264
return new Serializer(
265-
new SerializerComponent\Serializer([new ObjectNormalizer(), new ArrayDenormalizer()], ['json' => new JsonEncoder()])
265+
new SerializerComponent\Serializer([], ['json' => new JsonEncoder()], new ObjectNormalizer(), new SerializerComponent\Normalizer\ChainDenormalizer([new ObjectNormalizer(), new ArrayDenormalizer()]))
266266
);
267267
}
268268

src/Symfony/Component/Messenger/Bridge/Amqp/Tests/Transport/AmqpReceiverTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ class AmqpReceiverTest extends TestCase
3232
public function testItReturnsTheDecodedMessageToTheHandler()
3333
{
3434
$serializer = new Serializer(
35-
new SerializerComponent\Serializer([new ObjectNormalizer()], ['json' => new JsonEncoder()])
35+
new SerializerComponent\Serializer([], ['json' => new JsonEncoder()], new ObjectNormalizer(), new ObjectNormalizer())
3636
);
3737

3838
$amqpEnvelope = $this->createAMQPEnvelope();

src/Symfony/Component/Messenger/Bridge/Amqp/composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
"symfony/event-dispatcher": "^6.4|^7.0",
2525
"symfony/process": "^6.4|^7.0",
2626
"symfony/property-access": "^6.4|^7.0",
27-
"symfony/serializer": "^6.4|^7.0"
27+
"symfony/serializer": "^7.1"
2828
},
2929
"autoload": {
3030
"psr-4": { "Symfony\\Component\\Messenger\\Bridge\\Amqp\\": "" },

src/Symfony/Component/Messenger/Bridge/Beanstalkd/Tests/Transport/BeanstalkdReceiverTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ private function createBeanstalkdEnvelope(): array
9292
private function createSerializer(): Serializer
9393
{
9494
$serializer = new Serializer(
95-
new SerializerComponent\Serializer([new ObjectNormalizer()], ['json' => new JsonEncoder()])
95+
new SerializerComponent\Serializer([], ['json' => new JsonEncoder()], new ObjectNormalizer(), new ObjectNormalizer())
9696
);
9797

9898
return $serializer;

src/Symfony/Component/Messenger/Bridge/Beanstalkd/composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
},
1919
"require-dev": {
2020
"symfony/property-access": "^6.4|^7.0",
21-
"symfony/serializer": "^6.4|^7.0"
21+
"symfony/serializer": "^7.1"
2222
},
2323
"autoload": {
2424
"psr-4": { "Symfony\\Component\\Messenger\\Bridge\\Beanstalkd\\": "" },

src/Symfony/Component/Messenger/Bridge/Doctrine/Tests/Transport/DoctrineReceiverTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ private function createDoctrineEnvelope(): array
133133
private function createSerializer(): Serializer
134134
{
135135
$serializer = new Serializer(
136-
new SerializerComponent\Serializer([new ObjectNormalizer()], ['json' => new JsonEncoder()])
136+
new SerializerComponent\Serializer([], ['json' => new JsonEncoder()], new ObjectNormalizer(), new ObjectNormalizer())
137137
);
138138

139139
return $serializer;

src/Symfony/Component/Messenger/Bridge/Doctrine/composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
"require-dev": {
2525
"doctrine/persistence": "^1.3|^2|^3",
2626
"symfony/property-access": "^6.4|^7.0",
27-
"symfony/serializer": "^6.4|^7.0"
27+
"symfony/serializer": "^7.1"
2828
},
2929
"conflict": {
3030
"doctrine/persistence": "<1.3"

src/Symfony/Component/Messenger/Bridge/Redis/Tests/Transport/RedisReceiverTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ public static function redisEnvelopeProvider(): \Generator
7575
],
7676
new DummyMessage('Hi'),
7777
new Serializer(
78-
new SerializerComponent\Serializer([new ObjectNormalizer()], ['json' => new JsonEncoder()])
78+
new SerializerComponent\Serializer([], ['json' => new JsonEncoder()], new ObjectNormalizer(), new ObjectNormalizer())
7979
),
8080
];
8181

src/Symfony/Component/Messenger/Bridge/Redis/composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
},
2323
"require-dev": {
2424
"symfony/property-access": "^6.4|^7.0",
25-
"symfony/serializer": "^6.4|^7.0"
25+
"symfony/serializer": "^7.1"
2626
},
2727
"autoload": {
2828
"psr-4": { "Symfony\\Component\\Messenger\\Bridge\\Redis\\": "" },

src/Symfony/Component/Messenger/Tests/Stamp/ErrorDetailsStampTest.php

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@
2020
use Symfony\Component\Messenger\Transport\Serialization\Serializer;
2121
use Symfony\Component\Serializer\Encoder\JsonEncoder;
2222
use Symfony\Component\Serializer\Normalizer\ArrayDenormalizer;
23+
use Symfony\Component\Serializer\Normalizer\ChainDenormalizer;
24+
use Symfony\Component\Serializer\Normalizer\ChainNormalizer;
2325
use Symfony\Component\Serializer\Normalizer\ObjectNormalizer;
2426
use Symfony\Component\Serializer\Serializer as SymfonySerializer;
2527

@@ -57,11 +59,12 @@ public function testDeserialization()
5759
$exception = new \Exception('exception message');
5860
$stamp = ErrorDetailsStamp::create($exception);
5961
$serializer = new Serializer(
60-
new SymfonySerializer([
61-
new ArrayDenormalizer(),
62-
new FlattenExceptionNormalizer(),
63-
new ObjectNormalizer(),
64-
], [new JsonEncoder()])
62+
new SymfonySerializer(
63+
[],
64+
[new JsonEncoder()],
65+
new ChainNormalizer([new FlattenExceptionNormalizer(), new ObjectNormalizer()]),
66+
new ChainDenormalizer([new ArrayDenormalizer(), new FlattenExceptionNormalizer(), new ObjectNormalizer()])
67+
)
6568
);
6669

6770
$deserializedEnvelope = $serializer->decode($serializer->encode(new Envelope(new \stdClass(), [$stamp])));

0 commit comments

Comments
 (0)
0