2010-06-08 3 views
5

Ich sende MapMessages in Java zu ActiveMQ und Abrufen von ihnen mit Stomp in PHP. Meine Nachrichtenerstellung Code sieht wie folgt aus:Ist das MessageMap-Format von Stomp vollständig unbrauchbar?

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

Wenn ich abrufen sie in PHP, das Array, das wie folgt aussieht erstellt wird:

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

Was soll ich damit tun soll? Gibt es eine Möglichkeit, Stomp davon zu überzeugen, es vernünftig zu entserialisieren oder gibt es eine PHP-Beschwörung, die den Zugriff auf dieses Array weniger schmerzhaft macht? Insbesondere kann ich nicht einfach durch die Einträge iterieren und ein assoziatives Array erstellen, da das Array völlig anders aussieht, wenn eine Zeichenfolge & int im Gegensatz zu zwei Zeichenfolgen vorhanden ist.

Antwort

1

Hier ist, was ich mir ausgedacht habe. Kennt jemand eine sauberere Lösung?

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

Das gibt mir:

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

was ziemlich viel ist, was ich suche, aber der Code dort zu bekommen scheint ziemlich zerbrechlich.

Verwandte Themen