2010-07-01 13 views
5

No puedo entender propperly el error que consigo cuando ejecuta este código:No se puede deserializar instancia de java.lang.Class de START_OBJECT símbolo

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

error:

org.codehaus.jackson.map.JsonMappingException: Can not deserialize instance of java.lang.Class out of START_OBJECT token at [Source: [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)

Lo ¿¿eso significa??

Tal vez si sé esto, podría encontrar mi error.

Respuesta

10

Su problema es la última línea:

MetadataContentBean.class.getClass() 

Esto significa "me Class el objeto de la clase MetadataContentBean, y luego me Class el objeto de que Class objeto" .... si ves lo que quiero decir. Entonces le estás pidiendo a Jackson que deserialice tu JSON en un objeto Class, que no sabe cómo hacer.

Esto debería ser sólo

MetadataContentBean.class 
+0

Gracias, ese era el problema, pero de todos modos me gustaría saber cuál es el significado del error. Gracias de nuevo –

4

Esto está probablemente relacionado con la otra pregunta, pero sólo para completar la respuesta, el error proviene de discrepancia: Tipo "java.lang.Class" es serializado como JSON Cadena (nombre de la clase en sí), y no como objetos JSON como los beans. Por lo tanto, el deserializador espera ver una cadena JSON, en su lugar ve un objeto JSON (que comienza con START_OBJECT) y arroja una excepción.

Cuestiones relacionadas