Package com.cloudcontrolled.api.client.json

Source Code of com.cloudcontrolled.api.client.json.JsonDeserializer

/*
* Copyright 2012 Denis Neuling
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.cloudcontrolled.api.client.json;

import com.cloudcontrolled.api.client.exception.SerializationException;
import com.cloudcontrolled.api.client.util.StandardizationUtil;
import com.cloudcontrolled.api.response.Response;
import com.google.gson.ExclusionStrategy;
import com.google.gson.FieldAttributes;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonSyntaxException;

/**
* <p>
* JsonDeserializer class.
* </p>
*
* @author Denis Neuling (denisneuling@gmail.com)
*
*/
public class JsonDeserializer {

  protected Gson gson;

  /**
   * <p>
   * Constructor for JsonDeserializer.
   * </p>
   */
  public JsonDeserializer() {
    initializeGson();
  }

  /**
   *
   */
  private void initializeGson() {
    gson = new GsonBuilder().setExclusionStrategies(new ExclusionStrategy() {
      public boolean shouldSkipField(FieldAttributes fieldAttributes) {
        if (fieldAttributes.getName().equalsIgnoreCase("serialVersionUUID")) {
          return true;
        }
        return false;
      }

      public boolean shouldSkipClass(Class<?> arg0) {
        return false;
      }
    }).create();
  }

  /**
   * <p>
   * fromJSON.
   * </p>
   *
   * @param response
   *            a {@link java.lang.String} object.
   * @param target
   *            a {@link com.cloudcontrolled.api.response.Response} object.
   * @param <T>
   *            a T object.
   * @return a {@link com.cloudcontrolled.api.response.Response} object.
   */
  @SuppressWarnings("unchecked")
  public <T> Response<T> fromJSON(String response, Response<T> target) {
    try {
      response = StandardizationUtil.getJSONStandardizer(target).normalize(response);
    } catch (Exception e) {
      throw new SerializationException(e);
    }

    try {
      Response<T> fromJson = gson.fromJson(response, target.getClass());
      if (fromJson == null) {
        fromJson = target;
      }
      return fromJson;
    } catch (JsonSyntaxException jse) {
      throw new SerializationException(jse);
    }
  }
}
TOP

Related Classes of com.cloudcontrolled.api.client.json.JsonDeserializer

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.