diff --git a/pkg/enqueue/Client/Extension/PrepareBodyExtension.php b/pkg/enqueue/Client/Extension/PrepareBodyExtension.php index eeb0ded03..badaa15f7 100644 --- a/pkg/enqueue/Client/Extension/PrepareBodyExtension.php +++ b/pkg/enqueue/Client/Extension/PrepareBodyExtension.php @@ -2,6 +2,7 @@ namespace Enqueue\Client\Extension; +use ArrayObject; use Enqueue\Client\Message; use Enqueue\Client\PreSend; use Enqueue\Client\PreSendCommandExtensionInterface; @@ -28,7 +29,14 @@ private function prepareBody(Message $message): void if (is_scalar($body) || null === $body) { $contentType = $contentType ?: 'text/plain'; $body = (string) $body; - } elseif (is_array($body)) { + } elseif (is_array($body) || $body instanceof ArrayObject) { + // convert ArrayObjects to arrays + array_walk_recursive($body, function (&$value) { + if ($value instanceof ArrayObject) { + $value = (array) $value; + } + }); + // only array of scalars is allowed. array_walk_recursive($body, function ($value) { if (!is_scalar($value) && null !== $value) { diff --git a/pkg/enqueue/Tests/Client/Extension/PrepareBodyExtensionTest.php b/pkg/enqueue/Tests/Client/Extension/PrepareBodyExtensionTest.php index 454034abb..a8ac1f455 100644 --- a/pkg/enqueue/Tests/Client/Extension/PrepareBodyExtensionTest.php +++ b/pkg/enqueue/Tests/Client/Extension/PrepareBodyExtensionTest.php @@ -2,6 +2,7 @@ namespace Enqueue\Tests\Client\Extension; +use ArrayObject; use Enqueue\Client\DriverInterface; use Enqueue\Client\Extension\PrepareBodyExtension; use Enqueue\Client\Message; @@ -120,6 +121,10 @@ public static function provideMessages() yield [['foo' => 'fooVal'], 'foo/bar', '{"foo":"fooVal"}', 'foo/bar']; + yield [new ArrayObject(['foo' => 'fooVal']), null, '{"foo":"fooVal"}', 'application/json']; + + yield [['foo' => 'fooVal', 'bar' => new ArrayObject(['barOne', 'barTwo'])], null, '{"foo":"fooVal","bar":["barOne","barTwo"]}', 'application/json']; + yield [new JsonSerializableObject(), null, '{"foo":"fooVal"}', 'application/json']; yield [new JsonSerializableObject(), 'foo/bar', '{"foo":"fooVal"}', 'foo/bar'];