List of usage examples for com.fasterxml.jackson.databind JsonDeserializer deserialize
public abstract T deserialize(JsonParser paramJsonParser, DeserializationContext paramDeserializationContext);
From source file:com.addthis.codec.jackson.CodecTypeDeserializer.java
@Override public Object deserializeTypedFromAny(JsonParser jp, DeserializationContext ctxt) throws IOException { // a jackson thing we might as well include if (jp.canReadTypeId()) { Object typeId = jp.getTypeId(); if (typeId != null) { return _deserializeWithNativeTypeId(jp, ctxt, typeId); }// w w w . ja v a2 s .co m } // can use this to approximate error location if a sub-method throws an exception JsonLocation currentLocation = jp.getTokenLocation(); JsonNode jsonNode; // empty objects can appear with END_OBJECT. that has special handling lots of places, but not in readTree if (jp.getCurrentToken() == JsonToken.END_OBJECT) { jsonNode = ctxt.getNodeFactory().objectNode(); } else { jsonNode = jp.readValueAsTree(); } ObjectCodec objectCodec = jp.getCodec(); try { Object bean = null; // _array handler if (jsonNode.isArray()) { bean = _deserializeTypedFromArray((ArrayNode) jsonNode, objectCodec, ctxt); // object handler } else if (jsonNode.isObject()) { bean = _deserializeTypedFromObject((ObjectNode) jsonNode, objectCodec, ctxt); } if (bean != null) { return bean; } else { // Jackson 2.6+ throws NPE on null typeId parameter (underlying Map changed from HashMap // to ConcurrentHashMap), so use empty string instead of null JsonDeserializer<Object> deser = _findDeserializer(ctxt, ""); JsonParser treeParser = jp.getCodec().treeAsTokens(jsonNode); treeParser.nextToken(); return deser.deserialize(treeParser, ctxt); } } catch (JsonMappingException ex) { throw Jackson.maybeImproveLocation(currentLocation, ex); } }
From source file:com.addthis.codec.jackson.CodecTypeDeserializer.java
@Nullable private Object _deserializeObjectFromInlinedType(ObjectNode objectNode, ObjectCodec objectCodec, DeserializationContext ctxt) throws IOException { String matched = null;//from w ww . ja va 2s . c o m for (String alias : pluginMap.inlinedAliases()) { if (objectNode.get(alias) != null) { if (matched != null) { String message = String.format( "no type specified, more than one key, and both %s and %s match for inlined types.", matched, alias); JsonMappingException exception = ctxt.instantiationException(_baseType.getRawClass(), message); exception.prependPath(_baseType, matched); throw exception; } matched = alias; } } if (matched != null) { ConfigObject aliasDefaults = pluginMap.aliasDefaults(matched); JsonNode configValue = objectNode.get(matched); String primaryField = (String) aliasDefaults.get("_primary").unwrapped(); objectNode.remove(matched); Jackson.setAt(objectNode, configValue, primaryField); Jackson.merge(objectNode, Jackson.configConverter(aliasDefaults)); if (_typeIdVisible) { objectNode.put(_typePropertyName, matched); } try { JsonDeserializer<Object> deser = _findDeserializer(ctxt, matched); JsonParser treeParser = objectCodec.treeAsTokens(objectNode); treeParser.nextToken(); return deser.deserialize(treeParser, ctxt); } catch (IOException cause) { IOException unwrapped = Jackson.maybeUnwrapPath(primaryField, cause); if (unwrapped != cause) { throw wrapWithPath(unwrapped, idRes.typeFromId(ctxt, matched), matched); } else { throw unwrapped; } } } else { return null; } }
From source file:com.addthis.codec.jackson.CodecTypeDeserializer.java
@Nullable public Object _deserializeTypedFromObject(ObjectNode objectNode, ObjectCodec objectCodec, DeserializationContext ctxt) throws IOException { if (objectNode.hasNonNull(_typePropertyName)) { return _deserializeObjectFromProperty(objectNode, objectCodec, ctxt); }/*w w w . jav a 2s . com*/ String singleKeyName = getSingleKeyIfPresent(objectNode); if (singleKeyName != null) { Object bean = _deserializeObjectFromSingleKey(objectNode, singleKeyName, objectCodec, ctxt); if (bean != null) { return bean; } } Object bean = _deserializeObjectFromInlinedType(objectNode, objectCodec, ctxt); if (bean != null) { return bean; } if (idRes.isValidTypeId("_default")) { ConfigObject aliasDefaults = pluginMap.aliasDefaults("_default"); JsonDeserializer<Object> deser = _findDeserializer(ctxt, "_default"); boolean unwrapPrimary = handleDefaultsAndImplicitPrimary(objectNode, aliasDefaults, deser, ctxt); try { JsonParser treeParser = objectCodec.treeAsTokens(objectNode); treeParser.nextToken(); bean = deser.deserialize(treeParser, ctxt); } catch (IOException cause) { if (unwrapPrimary) { throw Jackson.maybeUnwrapPath((String) aliasDefaults.get("_primary").unwrapped(), cause); } else { throw cause; } } } return bean; }
From source file:com.meltmedia.jackson.crypto.EncryptionService.java
public Object decrypt(JsonParser parser, JsonDeserializer<?> deser, DeserializationContext context, JavaType type) {//w w w .j av a 2 s . c o m try { if (deser == null) { // TODO: This service allows for extension of EncryptedJson, but does // not include // a class defining the subtype being used. return mapper.readValue(decrypt((E) mapper.readValue(parser, EncryptedJson.class)), type); } else { return deser.deserialize(mapper.getFactory() .createParser(decrypt((E) mapper.readValue(parser, EncryptedJson.class))), context); } } catch (EncryptionException ee) { throw ee; } catch (Exception e) { throw new EncryptionException("could not decyrpt value", e); } }
From source file:com.basistech.rosette.dm.jackson.MorphoAnalysisListDeserializer.java
@Override public List<MorphoAnalysis> deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException { if (!cached) { throw new JsonMappingException(jp, "attempt to deserialize with un-contextualized MorphoAnalysisListDeserializer"); }/*w ww .j ava 2s .c om*/ /* * This will be entered pointing to the array start. */ if (jp.getCurrentToken() != JsonToken.START_ARRAY) { throw ctxt.wrongTokenException(jp, JsonToken.START_ARRAY, "Expected array of items"); } JsonDeserializer<Object> currentDeserializer = castDeserializer( ctxt.getAttribute(MorphoAnalysisListDeserializer.class)); if (currentDeserializer == null) { currentDeserializer = maDeserializer; ctxt.setAttribute(MorphoAnalysisListDeserializer.class, maDeserializer); } List<MorphoAnalysis> result = Lists.newArrayList(); while (jp.nextToken() != JsonToken.END_ARRAY) { // if we just read it in as the wrong class, any leftovers will end up in extendedAttributes, and we can cope. MorphoAnalysis analysis = (MorphoAnalysis) currentDeserializer.deserialize(jp, ctxt); if (analysis.getExtendedProperties().size() != 0) { // so, we have leftovers. Note that this will not trim han and arabic down. Tough if (analysis.getExtendedProperties().containsKey("morphemes")) { KoreanMorphoAnalysis.Builder builder = new KoreanMorphoAnalysis.Builder(); copyBasic(analysis, builder); List<String> morphemes = cast(analysis.getExtendedProperties().get("morphemes")); List<String> morphemeTags = cast(analysis.getExtendedProperties().get("morphemeTags")); for (int x = 0; x < morphemes.size(); x++) { builder.addMorpheme(morphemes.get(x), morphemeTags.get(x)); } for (Map.Entry<String, Object> me : analysis.getExtendedProperties().entrySet()) { if (!"morphemes".equals(me.getKey()) && !"morphemeTags".equals(me.getKey())) { builder.extendedProperty(me.getKey(), me.getValue()); } } analysis = builder.build(); ctxt.setAttribute(MorphoAnalysisListDeserializer.class, korMaDeserializer); } else if (analysis.getExtendedProperties().containsKey("readings")) { // convert to Han. HanMorphoAnalysis.Builder builder = new HanMorphoAnalysis.Builder(); copyBasic(analysis, builder); for (String reading : cast(analysis.getExtendedProperties().get("readings"))) { builder.addReading(reading); } for (Map.Entry<String, Object> me : analysis.getExtendedProperties().entrySet()) { if (!"readings".equals(me.getKey())) { builder.extendedProperty(me.getKey(), me.getValue()); } } analysis = builder.build(); ctxt.setAttribute(MorphoAnalysisListDeserializer.class, hanMaDeserializer); } else if (anyArabicFields(analysis.getExtendedProperties().keySet())) { ArabicMorphoAnalysis.Builder builder = new ArabicMorphoAnalysis.Builder(); copyBasic(analysis, builder); Integer prefixLength = (Integer) analysis.getExtendedProperties().get("prefixLength"); Integer stemLength = (Integer) analysis.getExtendedProperties().get("stemLength"); if (prefixLength != null && stemLength != null) { builder.lengths(prefixLength, stemLength); } String root = (String) analysis.getExtendedProperties().get("root"); if (root != null) { builder.root(root); } Boolean definiteArticle = (Boolean) analysis.getExtendedProperties().get("definiteArticle"); if (definiteArticle != null) { builder.definiteArticle(definiteArticle); } Boolean strippablePrefix = (Boolean) analysis.getExtendedProperties().get("strippablePrefix"); if (strippablePrefix != null) { builder.strippablePrefix(strippablePrefix); } List<String> prefixes = cast(analysis.getExtendedProperties().get("prefixes")); if (prefixes != null) { List<String> prefixTags = cast(analysis.getExtendedProperties().get("prefixTags")); for (int x = 0; x < prefixes.size(); x++) { builder.addPrefix(prefixes.get(x), prefixTags.get(x)); } } List<String> stems = cast(analysis.getExtendedProperties().get("stems")); if (stems != null) { List<String> stemTags = cast(analysis.getExtendedProperties().get("stemTags")); for (int x = 0; x < stems.size(); x++) { builder.addStem(stems.get(x), stemTags.get(x)); } } List<String> suffixes = cast(analysis.getExtendedProperties().get("suffixes")); if (suffixes != null) { List<String> suffixTags = cast(analysis.getExtendedProperties().get("suffixTags")); for (int x = 0; x < suffixes.size(); x++) { builder.addSuffix(suffixes.get(x), suffixTags.get(x)); } } for (Map.Entry<String, Object> me : analysis.getExtendedProperties().entrySet()) { if (!ARABIC_FIELDS.contains(me.getKey())) { builder.extendedProperty(me.getKey(), me.getValue()); } } analysis = builder.build(); ctxt.setAttribute(MorphoAnalysisListDeserializer.class, arMaDeserializer); } } result.add(analysis); } return ImmutableList.copyOf(result); }
From source file:com.addthis.codec.jackson.CodecTypeDeserializer.java
private Object _deserializeObjectFromProperty(ObjectNode objectNode, ObjectCodec objectCodec, DeserializationContext ctxt) throws IOException { String type = objectNode.get(_typePropertyName).asText(); if (!_typeIdVisible) { objectNode.remove(_typePropertyName); }/*from www . ja v a 2s. co m*/ JsonDeserializer<Object> deser; try { deser = _findDeserializer(ctxt, type); } catch (Throwable cause) { throw wrapWithPath(cause, Class.class, _typePropertyName); } ConfigObject aliasDefaults = pluginMap.aliasDefaults(type); String primaryField; if (aliasDefaults.containsKey("_primary")) { primaryField = (String) aliasDefaults.get("_primary").unwrapped(); } else { primaryField = null; } boolean unwrapPrimary = handleDefaultsAndImplicitPrimary(objectNode, aliasDefaults, deser, ctxt); try { JsonParser treeParser = objectCodec.treeAsTokens(objectNode); treeParser.nextToken(); return deser.deserialize(treeParser, ctxt); } catch (IOException cause) { if (unwrapPrimary) { throw Jackson.maybeUnwrapPath(primaryField, cause); } else { throw cause; } } }
From source file:com.kaaprotech.satu.jackson.SatuDeserializers.java
@Override public JsonDeserializer<?> findCollectionDeserializer(final CollectionType type, final DeserializationConfig config, final BeanDescription beanDesc, final TypeDeserializer elementTypeDeserializer, final JsonDeserializer<?> elementDeserializer) throws JsonMappingException { if (ImmutableSet.class.isAssignableFrom(type.getRawClass())) { return new StdDeserializer<Object>(type) { private static final long serialVersionUID = 1L; @Override/*from w w w . ja v a 2 s . c o m*/ public Object deserialize(JsonParser jp, DeserializationContext context) throws IOException { if (jp.isExpectedStartArrayToken()) { JsonToken t; MutableSet<Object> s = Sets.mutable.of(); while ((t = jp.nextToken()) != JsonToken.END_ARRAY) { Object value; if (t == JsonToken.VALUE_NULL) { value = null; } else if (elementDeserializer == null) { value = jp.readValueAs(type.getContentType().getRawClass()); } else if (elementTypeDeserializer == null) { value = elementDeserializer.deserialize(jp, context); } else { value = elementDeserializer.deserializeWithType(jp, context, elementTypeDeserializer); } s.add(value); } return s.toImmutable(); } throw context.mappingException(type.getRawClass()); } }; } return super.findCollectionDeserializer(type, config, beanDesc, elementTypeDeserializer, elementDeserializer); }
From source file:com.addthis.codec.jackson.CodecTypeDeserializer.java
@Nullable private Object _deserializeObjectFromSingleKey(ObjectNode objectNode, String singleKeyName, ObjectCodec objectCodec, DeserializationContext ctxt) throws IOException { if (idRes.isValidTypeId(singleKeyName)) { ConfigObject aliasDefaults = pluginMap.aliasDefaults(singleKeyName); String primaryField;/*from w ww. j av a 2 s . c om*/ if (aliasDefaults.containsKey("_primary")) { primaryField = (String) aliasDefaults.get("_primary").unwrapped(); } else { primaryField = null; } boolean unwrapPrimary = false; try { JsonNode singleKeyValue = objectNode.get(singleKeyName); JsonDeserializer<Object> deser = _findDeserializer(ctxt, singleKeyName); if (!singleKeyValue.isObject()) { // if value is not an object, try supporting _primary syntax to derive one if (primaryField != null) { ObjectNode singleKeyObject = (ObjectNode) objectCodec.createObjectNode(); Jackson.setAt(singleKeyObject, singleKeyValue, primaryField); Jackson.merge(singleKeyObject, Jackson.configConverter(aliasDefaults)); singleKeyValue = singleKeyObject; unwrapPrimary = true; } // else let the downstream serializer try to handle it or complain } else { ObjectNode singleKeyObject = (ObjectNode) singleKeyValue; unwrapPrimary = handleDefaultsAndImplicitPrimary(singleKeyObject, aliasDefaults, deser, ctxt); } if (_typeIdVisible && singleKeyValue.isObject()) { ((ObjectNode) singleKeyValue).put(_typePropertyName, singleKeyName); } JsonParser treeParser = objectCodec.treeAsTokens(singleKeyValue); treeParser.nextToken(); return deser.deserialize(treeParser, ctxt); } catch (IOException cause) { if (unwrapPrimary) { cause = Jackson.maybeUnwrapPath(primaryField, cause); } throw wrapWithPath(cause, idRes.typeFromId(ctxt, singleKeyName), singleKeyName); } catch (Throwable cause) { throw wrapWithPath(cause, idRes.typeFromId(ctxt, singleKeyName), singleKeyName); } } return null; }
From source file:com.kaaprotech.satu.jackson.SatuDeserializers.java
@Override public JsonDeserializer<?> findMapDeserializer(final MapType type, final DeserializationConfig config, BeanDescription beanDesc, final KeyDeserializer keyDeserializer, final TypeDeserializer elementTypeDeserializer, final JsonDeserializer<?> elementDeserializer) throws JsonMappingException { if (ImmutableMap.class.isAssignableFrom(type.getRawClass())) { return new StdDeserializer<Object>(type) { private static final long serialVersionUID = 1L; @Override//from ww w. j ava 2s.com public Object deserialize(JsonParser jp, DeserializationContext context) throws IOException { JsonToken t = jp.getCurrentToken(); if (t == JsonToken.START_OBJECT) { t = jp.nextToken(); } if (t != JsonToken.FIELD_NAME && t != JsonToken.END_OBJECT) { throw context.mappingException(type.getRawClass()); } MutableMap<Object, Object> m = Maps.mutable.of(); for (; jp.getCurrentToken() == JsonToken.FIELD_NAME; jp.nextToken()) { // Pointing to field name String fieldName = jp.getCurrentName(); Object key = (keyDeserializer == null) ? fieldName : keyDeserializer.deserializeKey(fieldName, context); t = jp.nextToken(); Object value; if (t == JsonToken.VALUE_NULL) { value = null; } else if (elementDeserializer == null) { value = jp.readValueAs(type.getContentType().getRawClass()); } else if (elementTypeDeserializer == null) { value = elementDeserializer.deserialize(jp, context); } else { value = elementDeserializer.deserializeWithType(jp, context, elementTypeDeserializer); } m.put(key, value); } return m.toImmutable(); } }; } return super.findMapDeserializer(type, config, beanDesc, keyDeserializer, elementTypeDeserializer, elementDeserializer); }