/** Method called to locate deserializer for the passed root-level value. */
  protected JsonDeserializer<Object> _findRootDeserializer(
      DeserializationConfig cfg, JavaType valueType) throws JsonMappingException {
    // First: have we already seen it?
    JsonDeserializer<Object> deser = _rootDeserializers.get(valueType);
    if (deser != null) {
      return deser;
    }

    // Nope: need to ask provider to resolve it
    deser = _provider.findTypedValueDeserializer(cfg, valueType, null);
    if (deser == null) { // can this happen?
      throw new JsonMappingException("Can not find a deserializer for type " + valueType);
    }
    _rootDeserializers.put(valueType, deser);
    return deser;
  }