2010-06-08 3 views
5

Sto inviando MapMessages in Java ad ActiveMQ e recuperandoli usando Stomp in PHP. Il mio messaggio codice di creazione è simile al seguente:Il formato MessageMap di Stomp è completamente inutilizzabile?

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

Quando li ho recuperare in PHP, la matrice che ha creato assomiglia a questo:

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

Cosa dovrei fare con questo? C'è un modo per convincere Stomp a non serializzarlo in maniera ragionevole o c'è qualche incantesimo PHP che rende l'accesso a questo array meno doloroso? In particolare, non posso solo scorrere le voci e creare un array associativo perché la matrice sembra completamente diversa se c'è una stringa & int al contrario di due stringhe.

risposta

1

Ecco cosa mi è venuto in mente. Qualcuno sa di una soluzione più pulita?

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

Questo mi dà:

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

che è più o meno quello che sto cercando, ma il codice per arrivarci sembra abbastanza fragile.

Problemi correlati