Same question posted on SO with an answer
http://stackoverflow.com/questions/19498011/does-camel-jackson-2-12-1-support-marshalling-of-nested-objects-into-nested-json

On Mon, Oct 21, 2013 at 4:49 PM, erj2code <p...@tetraconcepts.com> wrote:
> I have the following two Java classes (SensorData, and Visibility) to store
> dummy sensor data, and their respective visibilities into two objects:
>
> SensorData.java
> ============
>
> package com.data.world2;
>
> import java.util.Map;
> import java.util.TreeMap;
>
> import com.fasterxml.jackson.annotation.JsonAnyGetter;
> import com.fasterxml.jackson.annotation.JsonAnySetter;
> import com.fasterxml.jackson.annotation.JsonProperty;
>
> public class SensorData {
>
>         private final Map<String, Object> keyvalues = new TreeMap<String,
> Object>();
>
>         @JsonProperty
>         private Visibility visibility;
>
>         // getters and setters
>         @JsonAnyGetter
>         public Map<String, Object> getKeyvalues() {
>                 return keyvalues;
>         }
>
>         @JsonAnySetter
>         public void setKeyvalues(final String key, final Object value) {
>                 this.keyvalues.put(key, value);
>         }
>
>         // getters and setters
>         public Visibility getVisibility() {
>                 return visibility;
>         }
>
>         public void setVisibility(Visibility visibility) {
>                 this.visibility = visibility;
>         }
>
> }
>
> Visibility.java
> ==========
>
> package com.data.world2;
>
> import java.util.Map;
> import java.util.TreeMap;
>
> import com.fasterxml.jackson.annotation.JsonAnyGetter;
> import com.fasterxml.jackson.annotation.JsonAnySetter;
>
> public class Visibility {
>
>         private final Map<String, Object> keyvalues = new TreeMap<String,
> Object>();
>
>         // getters and setters
>
>         @JsonAnyGetter
>         public Map<String, Object> getKeyvalues() {
>                 return keyvalues;
>         }
>
>         @JsonAnySetter
>         public void setKeyvalues(final String key, final Object value) {
>                 this.keyvalues.put(key, value);
>         }
>
> }
>
> And in my SensorGenerator class I store SensorData and Visibility keyvalue
> objects.  For example, suppose I have two keyvalue pairs from a sensor (make
> and model), and only the "make" keyvalue pair has a visibility specified;
> the "model" keyvalue pair uses the default visibility:
>
>         // create a sensorData object, and a visibility object
>         SensorData sensorData = new SensorData();
>         Visibility visibility = new Visibility();
>
>         sensorData.setKeyValues("s1make", "Apple"); // set sensor 1 make
>         visibility.setKeyValues("s1make", "public"); // set sensor 1 make
> visibility
>         sensorData.setKeyValues("s1model", "iPhone5); // set sensor 1 model
>         // sensor 1 model visibility not specified
>
>         // set default visibility
>         visibility.setKeyValues("_default", "private"); // set default
> visibility for sensor keyvalue pairs
>
> Then I added the Visibility object to the SensorData object to get nested
> visibilities:
>
>         // add the visibility to the SensorData object
>         sensorData.setVisibility(visibility);
>
> And then I return a List of SensorData objects to my Camel thread for
> marshalling to JSON with the Jackson library (camel-jackson):
>
>        // Build a sensorDataList based on the keyvalues stored in the
> SensorData object
>        List<SensorData> sensorDataList = new
> ArrayList(sensorData.getKeyvalues().entrySet());
>
> When I run my Java program I'd expect to see the following nested JSON from
> my Camel route:
>
> [{"key":"s1make","value":Apple"},
>  {"key":"s1model","value":"iPhone5"},
>  {"visibility": {"key":"s1make","value":"public",
>                    "key":"_default","value":"private"}
>  }]
>
> But instead, I only see are the SensorData keyvalues marshalled into JSON
> i.e.,:
>
> [{"key":"s1make","value":Apple"},
>  {"key":"s1model","value":"iPhone5"}]
>
> How come I don't see the "s1make" and "_default" visibilities as nested
> JSON?  Does camel-jackson 2.12.1 not support marshalling of nested objects
> into nested JSON?
>
> Btw, here is a snippet of my applicationContext.xml where I specify the
> marshalling to JSON:
>
>    <camel:camelContext id="HelloWorldContext">
>
>
>           <camel:dataFormats>
>              <camel:json id="jack" library="Jackson"/>
>           </camel:dataFormats>
>
>           <camel:route>
>
>                  <camel:from
>
> uri="timer://hello.world.request.timer?fixedRate=true&amp;period={{config.timeout}}"
> />
>                  <camel:to
> uri="log:hello.world.request?level=INFO&amp;showAll=true" />
>                  <camel:bean ref="helloWorld" />
>
>
>                  <camel:marshal ref ="jack"/>
>                  <camel:convertBodyTo type="java.lang.String" />
>                  <camel:log message="${body}"/>
>
>
>                  <camel:log message="printing values read from
> config.properties file"/>
>                  <camel:log message="config.timeout= {{config.timeout}}"/>
>                  <camel:log message="config.numSamples=
> {{config.numSamples}}"/>
>                  <camel:log message="config.defaultViz=
> {{config.defaultViz}}"/>
>
>
>                  <camel:to
> uri="log:hello.world.response?level=INFO&amp;showAll=true" />
>
>            </camel:route>
>
>      </camel:camelContext>
>
>
> Last week I posted a similar question on SO, but realized after I posted it
> that I had to change my implementation to return a list to Camel instead of
> a map.
> http://stackoverflow.com/questions/19389696/how-do-i-marshall-nested-key-value-pairs-into-json-with-camel-and-jackson-librar
>
>
>
>
>
> --
> View this message in context: 
> http://camel.465427.n5.nabble.com/Does-camel-jackson-2-12-1-support-marshalling-of-nested-objects-into-nested-JSON-tp5741991.html
> Sent from the Camel - Users mailing list archive at Nabble.com.



-- 
Claus Ibsen
-----------------
Red Hat, Inc.
Email: cib...@redhat.com
Twitter: davsclaus
Blog: http://davsclaus.com
Author of Camel in Action: http://www.manning.com/ibsen

Reply via email to