2010-06-08 20 views
5

Estoy enviando MapMessages en Java a ActiveMQ y recuperándolos usando Stomp en PHP. Mi mensaje de código de creación se ve así:¿El formato de MessageMap de Stomp es completamente inutilizable?

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

Cuando se recupere en PHP, la matriz que se crea el siguiente aspecto:

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 
            ) 
          ) 
        ) 
      ) 
    ) 
) 

¿Qué se supone que ver con eso? ¿Hay alguna manera de convencer a Stomp para que lo deserialice de manera razonable o hay algún encantamiento de PHP que haga que acceder a este conjunto sea menos doloroso? En particular, no puedo simplemente iterar a través de las entradas y construir una matriz asociativa porque la matriz se ve completamente diferente si hay una cadena & int en oposición a dos cadenas.

Respuesta

1

Esto es lo que se me ocurrió. ¿Alguien sabe de una solución más limpia?

$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]; 
} 

Esto me da:

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

que es más o menos lo que estoy buscando, pero el código para llegar allí parece bastante frágil.

Cuestiones relacionadas