diff --git a/src/Symfony/Component/Serializer/Normalizer/AbstractObjectNormalizer.php b/src/Symfony/Component/Serializer/Normalizer/AbstractObjectNormalizer.php index bbce4255b1ab9..28755eca57315 100644 --- a/src/Symfony/Component/Serializer/Normalizer/AbstractObjectNormalizer.php +++ b/src/Symfony/Component/Serializer/Normalizer/AbstractObjectNormalizer.php @@ -11,8 +11,10 @@ namespace Symfony\Component\Serializer\Normalizer; +use Symfony\Component\PropertyAccess\Exception\InvalidArgumentException; use Symfony\Component\Serializer\Exception\CircularReferenceException; use Symfony\Component\Serializer\Exception\LogicException; +use Symfony\Component\Serializer\Exception\UnexpectedValueException; /** * Base class for a normalizer dealing with objects. @@ -172,7 +174,11 @@ public function denormalize($data, $class, $format = null, array $context = arra $ignored = in_array($attribute, $this->ignoredAttributes); if ($allowed && !$ignored) { - $this->setAttributeValue($object, $attribute, $value, $format, $context); + try { + $this->setAttributeValue($object, $attribute, $value, $format, $context); + } catch (InvalidArgumentException $e) { + throw new UnexpectedValueException($e->getMessage(), $e->getCode(), $e); + } } } diff --git a/src/Symfony/Component/Serializer/Tests/Normalizer/ObjectNormalizerTest.php b/src/Symfony/Component/Serializer/Tests/Normalizer/ObjectNormalizerTest.php index 367ff3799ec64..88ccdee0081f3 100644 --- a/src/Symfony/Component/Serializer/Tests/Normalizer/ObjectNormalizerTest.php +++ b/src/Symfony/Component/Serializer/Tests/Normalizer/ObjectNormalizerTest.php @@ -498,6 +498,14 @@ public function testMaxDepth() $this->assertEquals($expected, $result); } + + /** + * @expectedException \Symfony\Component\Serializer\Exception\UnexpectedValueException + */ + public function testThrowUnexpectedValueException() + { + $this->normalizer->denormalize(array('foo' => 'bar'), ObjectTypeHinted::class); + } } class ObjectDummy @@ -658,3 +666,10 @@ public static function getBaz() return 'L'; } } + +class ObjectTypeHinted +{ + public function setFoo(array $f) + { + } +} diff --git a/src/Symfony/Component/Serializer/composer.json b/src/Symfony/Component/Serializer/composer.json index f17da4d2aafc0..572561639db5b 100644 --- a/src/Symfony/Component/Serializer/composer.json +++ b/src/Symfony/Component/Serializer/composer.json @@ -27,6 +27,9 @@ "doctrine/annotations": "~1.0", "doctrine/cache": "~1.0" }, + "conflict": { + "symfony/property-access": ">=3.0,<3.0.4|>=2.8,<2.8.4" + }, "suggest": { "psr/cache-implementation": "For using the metadata cache.", "symfony/yaml": "For using the default YAML mapping loader.",