2010-07-01 4 views
5

Я не могу понять propperly ошибки я получаю, когда я запускаю этот код:Не может десериализацию экземпляра java.lang.Class из START_OBJECT лексем

InputStream is = this.getClass().getClassLoader().getResourceAsStream(filename); 
String jsonTxt = IOUtils.toString(is); 
JSONArray json = (JSONArray) JSONSerializer.toJSON(jsonTxt); 
JSONObject metadatacontent = json.getJSONObject(0); 
ObjectMapper mapper = new ObjectMapper(); 
mapper.readValue(metadatacontent.toString(), MetadataContentBean.class.getClass()); 

Ошибка:

org.codehaus.jackson.map.JsonMappingException: Can not deserialize instance of java.lang.Class out of START_OBJECT token at [Source: java.io.StringRead[email protected]; line: 1, column: 1] at org.codehaus.jackson.map.JsonMappingException.from(JsonMappingException.java:159) at org.codehaus.jackson.map.deser.StdDeserializationContext.mappingException(StdDeserializationContext.java:192) at org.codehaus.jackson.map.deser.StdDeserializer$ClassDeserializer.deserialize(StdDeserializer.java:439) at org.codehaus.jackson.map.deser.StdDeserializer$ClassDeserializer.deserialize(StdDeserializer.java:421) at org.codehaus.jackson.map.ObjectMapper._readMapAndClose(ObjectMapper.java:1588) at org.codehaus.jackson.map.ObjectMapper.readValue(ObjectMapper.java:1116) at com.path.parser.JSon.Parser(JSon.java:65) at com.path.parser.JSon.main(JSon.java:29)

Что значит ли это??

Возможно, если я это знаю, я могу узнать свою ошибку.

ответ

10

Ваша проблема в последней строке:

MetadataContentBean.class.getClass() 

Это означает, что «получить меня Class объект для MetadataContentBean класса, а затем получить меня Class объект для этого Class объекта» .... если вы видите что я имею в виду. Поэтому вы просите Джексона десериализовать свой JSON на объект Class, который он не знает, как это сделать.

Это должно быть просто

MetadataContentBean.class 
+0

Спасибо, это была проблема, но в любом случае я хотел бы знать, в чем смысл ошибки! Еще раз спасибо –

4

Это, вероятно, связано с другой вопрос, но только чтобы завершить ответ, ошибка возникает из несоответствия: типа «java.lang.Class» сериализации в JSON строки (само имя класса), а не как объект JSON, такой как beans. Поэтому десериализатор ожидает увидеть строку JSON, вместо этого видит объект JSON (который начинается с START_OBJECT) и генерирует исключение.

Смежные вопросы