コード例 #1
0
  protected Object parseMap(
      JSONObject jsonObj,
      Class<?> mapClazz,
      Type genericType,
      ValidationException validationException)
      throws IntrospectionException, IllegalAccessException, InstantiationException, JSONException,
          IllegalArgumentException, InvocationTargetException, ParseException {
    if (mapClazz == null) {
      throw new AJAXParserException("No specific class type.");
    }
    if (jsonObj == null) {
      return null;
    }
    if (genericType == null) {
      throw new AJAXParserException("No specific generic type for map " + mapClazz);
    }

    Map<Object, Object> mapInstance;

    if (java.util.HashMap.class.equals(mapClazz)) {
      mapInstance = new java.util.HashMap<Object, Object>(jsonObj.size());
    } else if (java.util.LinkedHashMap.class.equals(mapClazz)) {
      mapInstance = new java.util.LinkedHashMap<Object, Object>(jsonObj.size());
    } else if (java.util.TreeMap.class.equals(mapClazz)) {
      mapInstance = new java.util.TreeMap<Object, Object>();
    } else if (java.util.Hashtable.class.equals(mapClazz)) {
      mapInstance = new java.util.Hashtable<Object, Object>(jsonObj.size());
    } else {

      mapInstance = new java.util.LinkedHashMap<Object, Object>(jsonObj.size());
    }

    Type[] actualTypes = getActualTypes(genericType);

    Class<?> keyClazz =
        actualTypes[0] instanceof Class
            ? (Class<?>) actualTypes[0]
            : (Class<?>) ((ParameterizedType) actualTypes[0]).getRawType();

    Class<?> valueClazz =
        actualTypes[1] instanceof Class
            ? (Class<?>) actualTypes[1]
            : (Class<?>) ((ParameterizedType) actualTypes[1]).getRawType();

    for (Object jsonObjKey : jsonObj.keySet()) {

      String jsonKey = jsonObjKey.toString();
      Object jsonValue = jsonObj.get(jsonKey);
      String jsonStrValue = jsonValue == null ? null : jsonValue.toString();

      Object keyObj = dispatcher(jsonKey, keyClazz, null, validationException);

      Object valueObj = dispatcher(jsonStrValue, valueClazz, null, validationException);

      mapInstance.put(keyObj, valueObj);
    }

    return mapInstance;
  }