diff --git a/src/Bridge/Symfony/Bundle/Resources/config/api.xml b/src/Bridge/Symfony/Bundle/Resources/config/api.xml
index 3dac225ca80..3590f964d42 100644
--- a/src/Bridge/Symfony/Bundle/Resources/config/api.xml
+++ b/src/Bridge/Symfony/Bundle/Resources/config/api.xml
@@ -275,11 +275,11 @@
-
+
-
+
diff --git a/src/Bridge/Symfony/Bundle/Resources/config/ramsey_uuid.xml b/src/Bridge/Symfony/Bundle/Resources/config/ramsey_uuid.xml
index bbf81f232fa..e094bafdd1d 100644
--- a/src/Bridge/Symfony/Bundle/Resources/config/ramsey_uuid.xml
+++ b/src/Bridge/Symfony/Bundle/Resources/config/ramsey_uuid.xml
@@ -6,7 +6,7 @@
-
+
diff --git a/src/Identifier/IdentifierConverter.php b/src/Identifier/IdentifierConverter.php
index 714d3de7c21..2851581e4a7 100644
--- a/src/Identifier/IdentifierConverter.php
+++ b/src/Identifier/IdentifierConverter.php
@@ -69,6 +69,7 @@ public function convert($data, string $class, array $context = []): array
try {
$identifiers[$identifier] = $identifierTransformer->denormalize($value, $type);
+ break;
} catch (InvalidIdentifierException $e) {
throw new InvalidIdentifierException(sprintf('Identifier "%s" could not be denormalized.', $identifier), $e->getCode(), $e);
}
diff --git a/tests/Identifier/IdentifierConverterTest.php b/tests/Identifier/IdentifierConverterTest.php
index ee30a54520e..a450ad90266 100644
--- a/tests/Identifier/IdentifierConverterTest.php
+++ b/tests/Identifier/IdentifierConverterTest.php
@@ -22,6 +22,7 @@
use ApiPlatform\Core\Tests\ProphecyTrait;
use PHPUnit\Framework\TestCase;
use Symfony\Component\PropertyInfo\Type;
+use Symfony\Component\Serializer\Normalizer\DenormalizerInterface;
/**
* @author Antoine Bluchet
@@ -98,4 +99,26 @@ public function testIntegerIdentifier()
$this->assertSame(['id' => 42], $identifierDenormalizer->convert($identifier, $class));
}
+
+ public function testShouldBreakAfterTransforming()
+ {
+ $identifier = ['id' => '42'];
+ $class = 'Dummy';
+
+ $integerIdentifierPropertyMetadata = (new PropertyMetadata())->withIdentifier(true)->withType(new Type(Type::BUILTIN_TYPE_INT));
+
+ $propertyMetadataFactory = $this->prophesize(PropertyMetadataFactoryInterface::class);
+ $propertyMetadataFactory->create($class, 'id')->shouldBeCalled()->willReturn($integerIdentifierPropertyMetadata);
+
+ $identifiersExtractor = $this->prophesize(IdentifiersExtractorInterface::class);
+ $identifiersExtractor->getIdentifiersFromResourceClass($class)->willReturn(['id']);
+
+ $shouldNotBeCalled = $this->prophesize(DenormalizerInterface::class);
+ $shouldNotBeCalled->supportsDenormalization()->shouldNotBeCalled();
+
+ $identifierDenormalizers = [new IntegerDenormalizer(), $shouldNotBeCalled->reveal()];
+ $identifierDenormalizer = new IdentifierConverter($identifiersExtractor->reveal(), $propertyMetadataFactory->reveal(), $identifierDenormalizers);
+
+ $this->assertSame(['id' => 42], $identifierDenormalizer->convert($identifier, $class));
+ }
}