views:

1245

answers:

2

I am sending messages in JSON format to an ActiveMQ server. I am trying to use JMS Transformation to transform the JSON encoded object into a true Java Object in hopes of being able to use selectors on the data inside.

Here is a link to the documentation on Stomp and Message Transformation. Here is a link to a discussion on the patch where someone shows an example of a legal JSON object

The format of the JSON objects I am sending (in pretty print) are similar to this:

{
   "msg": {
      "flag1" : "value1",
      "flag2" : "value2"
   }
}

The messages arrive in the message queue, but with the transformation-error property set to 'msg : msg'.

A: 

The only format accepted by the transformation jms-map-json or jms-object-json is a simple Map format, which in JSON is:

{
  "map" : 
  {
    "entry" : 
    [ { "string": [ "flag1", "flag2" ] } ],
    [ { "string": [ "flag1", "flag2" ] } ]
  }
}

This is the same format shown in the discussion forum. This format represents a name/value pair map object in java.

Selectors are only usable on Properties and Headers.

Phillip Whelan
+2  A: 

Hi,

you can use any JSON notation for your jms-object-json transformations as long as XStream can handle it. You can take a look at test cases for some examples. There, we use SamplePojo class:

http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/test/java/org/apache/activemq/transport/stomp/SamplePojo.java?view=markup

which is properly annotated so it can be represented with the following JSON

{"pojo":{ "name":"Dejan", "city":"Belgrade" }}

You can try using the same approach for your classes.

Hope this helps, Dejan