Является ли формат MessageMap Stomp'ом полностью непригодным для использования? - PullRequest
5 голосов
/ 08 июня 2010

Я отправляю MapMessages из Java в ActiveMQ и извлекаю их, используя Stomp в PHP.Мой код создания сообщения выглядит так:

MapMessage message = session.createMapMessage();
message.setInt("id", 42);
message.setInt("status", 42);
message.setString("result", "aString");

Когда я получаю их в PHP, созданный массив выглядит так:

Array (
[map] => Array (
        [0] => Array (
                [entry] => Array (
                        [0] => Array (
                                [string] => id
                                [int] => 42
                            )

                        [1] => Array (
                                [string] => status
                                [int] => 42
                            )

                        [2] => Array (
                                [string] => Array (
                                        [0] => result
                                        [1] => aString
                                    )
                            )
                    )
            )
    )
)

Что мне с этим делать?Есть ли способ убедить Stomp в разумной манере де-сериализации или есть какие-то заклинания PHP, делающие доступ к этому массиву менее болезненным?В частности, я не могу просто перебирать записи и создавать ассоциативный массив, потому что массив выглядит совершенно иначе, если есть строка & int, а не две строки.

1 Ответ

1 голос
/ 09 июня 2010

Вот что я придумала.Кто-нибудь знает более чистое решение?

$entries = $msg->map['map'][0]['entry'];
$map = array();
foreach($entries as $entry) {
    $vals = array_values($entry);
    if(count($vals) == 1 && is_array($vals[0])) {
        $vals = $vals[0];
    }
    $map[$vals[0]] = $vals[1];
}

Это дает мне:

array
  'id' => int 42
  'status' => int 42
  'result' => string 'aString' (length=7)

, что в значительной степени то, что я ищу, но код для этого кажется довольно хрупким.

...