2010-07-01 5 views
5

Je ne comprends pas propperly l'erreur que je reçois quand je lance ce code:ne peut désérialiser instance de java.lang.Class sur START_OBJECT jeton

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

Erreur:

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)

Qu'est-ce que est-ce que ça veut dire que?? Peut-être que si je le sais, je pourrais trouver mon erreur.

Répondre

10

Votre problème est la dernière ligne:

MetadataContentBean.class.getClass() 

Cela signifie « me faire l'objet Class pour la classe MetadataContentBean, puis me faire l'objet Class pour cet objet Class » .... si vous voyez ce que je veux dire. Donc vous demandez à Jackson de désérialiser votre JSON sur un objet Class, qu'il ne sait pas comment faire.

Cela devrait être juste

MetadataContentBean.class 
+0

Merci, c'était le problème, mais de toute façon je voudrais savoir quelle est la signification de l'erreur !! Merci encore –

4

Cela est probablement lié à l'autre question, mais juste pour compléter la réponse, l'erreur provient de divergence: le type « java.lang.Class » est sérialisé en tant que chaîne JSON (nom de la classe lui-même), et non pas en tant qu'objet JSON comme le sont les beans. Ainsi, deserializer s'attend à voir une chaîne JSON, à la place voit un objet JSON (qui commence par START_OBJECT) et déclenche une exception.

Questions connexes