Ошибка сериализации Symfony2() при смещении


Я пытаюсь сериализовать массив php в xml, но здесь что-то не так. Проблема также может быть связана с rabbitmq.. Были подобные ошибки и раньше после внедрения rabbitmq в систему.

Код:

$encoders = array(new XmlEncoder(), new JsonEncoder());
$normalizers = array(new GetSetMethodNormalizer());
$serializer = new Serializer($normalizers, $encoders);

if($return_type == "xml")
{
      // Create xml-response out of the information found, and return it:
      return $serializer->serialize($options, 'xml');
}
else if($return_type == "json")
{
      // Create json-response out of the information found, and return it:
      return $serializer->serialize($options, 'json');
}

Ошибка:

Примечание: несериализация(): Ошибка при смещении 0 на 30 байт

500 Внутренняя ошибка сервера - исключение ContextErrorException

json-часть работает просто отлично, но сериализация в xml приводит к ошибке. Кто я такой пропал без вести здесь?

Редактировать: Часть трассировки стека ошибки.

[2015-10-05 12:37:13] просьба.КРИТИЧЕСКОЕ: Неперехваченное исключение PHP Symfony\Компонент\Отладка\Исключение\Контекстное исключение: "Уведомление: несериализовать(): Ошибка при смещении 0 из 30 байт"в C:\wamp\www\Projects\myproject\v.0.1\vendor\oldsound\rabbitmq-bundle\OldSound\RabbitMqBundle\RabbitMq\RpcClient.php строка 63 {"исключение": "[объект] (Symfony\Компонент\Отладка\Исключение\Исключение из контекста (код: 0): Обратите внимание: несериализация(): Ошибка при смещении 0 из 30 байт в C:\wamp\www\Projects\myproject\v.0.1\vendor\oldsound\rabbitmq-bundle\OldSound\RabbitMqBundle\RabbitMq\RpcClient.php:63)"} []

Правка2: Кажется, здесь происходит что-то еще. Это показано в полной трассировке стека:

Vendor\oldsound\rabbitmq-bundle\OldSound\RabbitMqBundle\RabbitMq\RpcClient.php ', '63', массив ('msg'=>объект(amqpmessage), 'MessageBody' => 'ошибка: Недействительный Ошибка символа'))

Почему это там?

Правка3: Я вставил несколько отголосков в код, непосредственно перед сериализацией, и сразу после нее, и он напечатал первый, но не второй.

echo "TESTING, ROW: ".__LINE__;
$xml = $serializer->serialize($options, 'xml');
echo "TESTING, ROW: ".__LINE__;

Я также поместил этот код в try-catch, но он не выдает никаких ошибок из-за этого..? Здесь происходит что-то темное...

Правка4: Я попробовал сериализатор с чем-то простым, как это:

$xml = $serializer->serialize(array("test"=>1), 'xml');

И это, кажется, работает просто отлично. Этот мне хочется спросить: какие символы не нравятся сериализатору в исходном массиве? К сожалению, я не могу показать внутренности массива, но если у кого-то есть какие-то идеи о недопустимых символах при использовании сериализатора, я был бы рад услышать.

Author: GotBatteries, 2015-10-05

1 answers

Похоже, сериализатору не понравились мои ключи массива. У меня были ключи, в которых были пробелы вот так:

array("spaced key" => $data);

Когда я изменил ключи на это:

array("spaced_key" => $data);

Это начало работать.

 1
Author: GotBatteries, 2015-10-08 07:56:16