title: Deserializing Properties class using Jackson fasterxml
body: <p>I am trying to use Jackson with fasterxml (vs codehaus) to get some data I store in mongoDb deserialized. The query is returning the proper json string, but I keep getting this error what we try to convert it to an object:</p>
  
  <pre><code>Can not deserialize instance of java.lang.String out of START_OBJECT token Properties("property1")
  </code></pre>
  
  <p>Class :</p>
  
  <pre><code>    package com.sharecare.service.segment;
  
  import com.fasterxml.jackson.annotation.JsonProperty;
  import com.jamconsultg.jamplatform.domain.segmentation.Segment;
  
  import java.util.List;
  import java.util.Properties;
  
  /**
   * Created by wawada on 1/15/16.
   */
  
  public class SubSkyScraper{
  
      @JsonProperty("_id")
      private String id;
  
      private String name;
  
      private Properties properties;
  
      @JsonProperty("_segments")
      private List&lt;Segment&gt; segments;
  
      public SubSkyScraper() {
      }
  
      public String getId() {
          return id;
      }
  
      public void setId(String id) {
          this.id = id;
      }
  
      public String getName() {
          return name;
      }
  
      public void setName(String name) {
          this.name = name;
      }
  
      public Properties getProperties() {
          return properties;
      }
  
      public void setProperties(Properties properties) {
          this.properties = properties;
      }
  
      public List&lt;Segment&gt; getSegments() {
          return segments;
      }
  
      public void setSegments(List&lt;Segment&gt; segments) {
          this.segments = segments;
      }
  }
  </code></pre>
  
  <p>Test :</p>
  
  <pre><code>    package com.sharecare.service.segment;
  
  import com.fasterxml.jackson.annotation.JsonProperty;
  import com.fasterxml.jackson.databind.ObjectMapper;
  import com.jamconsultg.jamplatform.domain.segmentation.Segment;
  import com.sharecare.segment.SkyScraper;
  import org.junit.Test;
  
  import java.io.IOException;
  import java.util.List;
  import java.util.Properties;
  
  /**
   * Created by wawada on 1/15/16.
   */
  
  
  public class ObjectMapperTest {
  
      @Test
      public void testGettingTheObject(){
  
          String json = "{\n" +
                  "\"_id\": \"objectid\" ,\n" +
                  "\"_segments\" : [ \"global\"] , \n" +
                  "\"name\" : \"sc\" , \n" +
                  "\"properties\" : { \n" +
                  "    \"property1\": {\n" +
                  "        \"property2\" : \"value1\"\n" +
                  "    },\n" +
                  "    \"property3\" : { \"property4\": \"value2\"} , \n" +
                  "    \"property5\": {\n" +
                  "        \"property6\" : { \n" +
                  "                    \"property7\": \"value3\" , \n" +
                  "                    \"property8\": \"value4\"\n" +
                  "    }\n" +
                  "}\n" +
                  "}";
  
  
          ObjectMapper objectMapper = new ObjectMapper();
          try {
              objectMapper.readValue(json, SubSkyScraper.class);
          } catch (IOException e) {
              e.printStackTrace();
          }
  
  
      }
  
  
  
  
  }
  </code></pre>
  
  <p>output :</p>
  
  <pre><code>    com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of java.lang.String out of START_OBJECT token
   at [Source: {
  "_id": "objectid" ,
  "_segments" : [ "global"] , 
  "name" : "sc" , 
  "properties" : { 
      "property1": {
          "property2" : "value1"
      },
      "property3" : { "property4": "value2"} , 
      "property5": {
          "property6" : { 
                      "property7": "value3" , 
                      "property8": "value4"
      }
  }
  }; line: 6, column: 5] (through reference chain: com.sharecare.service.segment.SubSkyScraper["properties"]-&gt;java.util.Properties["property1"])
      at com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:148)
      at com.fasterxml.jackson.databind.DeserializationContext.mappingException(DeserializationContext.java:857)
      at com.fasterxml.jackson.databind.deser.std.StringDeserializer.deserialize(StringDeserializer.java:62)
      at com.fasterxml.jackson.databind.deser.std.StringDeserializer.deserialize(StringDeserializer.java:11)
      at com.fasterxml.jackson.databind.deser.std.MapDeserializer._readAndBindStringMap(MapDeserializer.java:495)
      at com.fasterxml.jackson.databind.deser.std.MapDeserializer.deserialize(MapDeserializer.java:341)
      at com.fasterxml.jackson.databind.deser.std.MapDeserializer.deserialize(MapDeserializer.java:26)
      at com.fasterxml.jackson.databind.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:520)
      at com.fasterxml.jackson.databind.deser.impl.MethodProperty.deserializeAndSet(MethodProperty.java:95)
      at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:258)
      at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:125)
      at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:3736)
      at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2726)
      at com.sharecare.service.segment.ObjectMapperTest.testGettingTheObject(ObjectMapperTest.java:43)
      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      at java.lang.reflect.Method.invoke(Method.java:483)
      at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)
      at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
      at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)
      at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
      at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271)
      at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70)
      at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
      at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
      at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
      at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
      at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
      at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
      at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
      at org.junit.runner.JUnitCore.run(JUnitCore.java:160)
      at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:69)
      at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:234)
      at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:74)
      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
      at java.lang.reflect.Method.invoke(Method.java:483)
      at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)
  </code></pre>
  
  <p>The json saved in mongodb is structures as follows :</p>
  
  <pre><code>{
  "_id": "objectid" ,
  "_segments" : [ "global "] , 
  "name" : "sc" , 
  "properties" : { 
      "property1": {
          "property2" : "value1"
      },
      "property3" : { "property4": "value2"} , 
      "property5": {
          "property6" : { 
                      "property7": "value3" , 
                      "property8": "value4"
      }
  }
  }
  </code></pre>
  
  <p>How can I get Jackson to deserialize the properties properly?</p>
  
  <p>PS: This worked flawlessly with codehaus</p>