001 package com.khubla.pragmatach.plugin.cluster.serialization; 002 003 import java.lang.reflect.Field; 004 005 import org.apache.commons.beanutils.BeanUtils; 006 import org.json.JSONObject; 007 008 import com.khubla.pragmatach.framework.api.PragmatachException; 009 010 /** 011 * @author tome 012 */ 013 public class GenericJSONSerializer<T> { 014 /** 015 * deserialize 016 */ 017 public T deserialize(T t, String json) throws PragmatachException { 018 try { 019 final JSONObject jsonObject = new JSONObject(json); 020 final Field[] fields = t.getClass().getDeclaredFields(); 021 for (final Field field : fields) { 022 if (false == java.lang.reflect.Modifier.isStatic(field.getModifiers())) { 023 final String value = jsonObject.getString(field.getName()); 024 if (value != JSONObject.NULL) { 025 BeanUtils.setProperty(t, field.getName(), value); 026 } else { 027 BeanUtils.setProperty(t, field.getName(), null); 028 } 029 } 030 } 031 return t; 032 } catch (final Exception e) { 033 throw new PragmatachException("Exception in deserialize", e); 034 } 035 } 036 037 /** 038 * serialize object to JSON 039 */ 040 public String serialize(T t) throws PragmatachException { 041 try { 042 final JSONObject jsonObject = new JSONObject(); 043 /* 044 * values 045 */ 046 final Field[] fields = t.getClass().getDeclaredFields(); 047 for (final Field field : fields) { 048 if (false == java.lang.reflect.Modifier.isStatic(field.getModifiers())) { 049 final String value = BeanUtils.getProperty(t, field.getName()); 050 if (null != value) { 051 jsonObject.put(field.getName(), value); 052 } else { 053 jsonObject.put(field.getName(), JSONObject.NULL); 054 } 055 } 056 } 057 /* 058 * done 059 */ 060 return jsonObject.toString(); 061 } catch (final Exception e) { 062 throw new PragmatachException("Exception in serialize", e); 063 } 064 } 065 }