-
-
Notifications
You must be signed in to change notification settings - Fork 9.7k
Description
Symfony version(s) affected: 4.1.7, 4.1.5 (Serializer Component)
Description
CacheItem throws an Error: Cache key "p@triggers" contains reserved characters {}()/\@: when using the Serializer Services deserialize Method in combination with ObjectNormalizer and XmlEncoder (by passing an XML File and an Object to normalize, see Reproducer below)
This seems to happen when attributes are set on the xml "root" node.
How to reproduce
- Checkout: https://github.com/e3n-internetagentur/bug-reproducer-symfony-xmlencoder-objectnormalizer-arrayadapter-cacheitem
- execute
composer installto load deps - execute the following commands
bin/console app:xml norootattributes.xmlbin/console app:xml rootattributes.xml
Command 1. just outputs some data.
Command 2. Fails with Cache key "p@triggers" contains reserved characters {}()/\@:
You can work around the issue by replacing $this->serializer = $serializer; in \App\Command\XmlCommand with $this->serializer = new Serializer([new ObjectNormalizer()], [new XmlEncoder()]);
The reason this works is probably because no "Caching" happens for the deserialize process, at least not in a way that it triggers the CacheItem.
Additional context
You can open the public folder where both test files reside, the only difference between them is that the root node in rootattributes.xml has an attribute.
There has been another ticket with a similar error message, but I think the cause there was different altogether (#26313)