001
014
015 package com.liferay.portal.json;
016
017 import com.liferay.portal.json.transformer.CompanyJSONTransformer;
018 import com.liferay.portal.json.transformer.FlexjsonObjectJSONTransformer;
019 import com.liferay.portal.json.transformer.JSONArrayJSONTransformer;
020 import com.liferay.portal.json.transformer.JSONObjectJSONTransformer;
021 import com.liferay.portal.json.transformer.JSONSerializableJSONTransformer;
022 import com.liferay.portal.json.transformer.RepositoryModelJSONTransformer;
023 import com.liferay.portal.json.transformer.UserJSONTransformer;
024 import com.liferay.portal.kernel.json.JSONArray;
025 import com.liferay.portal.kernel.json.JSONObject;
026 import com.liferay.portal.kernel.json.JSONSerializable;
027 import com.liferay.portal.kernel.repository.model.RepositoryModel;
028 import com.liferay.portal.model.Company;
029 import com.liferay.portal.model.User;
030
031 import flexjson.TransformerUtil;
032
033 import flexjson.transformer.NullTransformer;
034 import flexjson.transformer.Transformer;
035 import flexjson.transformer.TransformerWrapper;
036 import flexjson.transformer.TypeTransformerMap;
037
038 import java.io.InputStream;
039
040 import java.lang.reflect.Field;
041 import java.lang.reflect.Modifier;
042
043 import java.util.Map;
044
045
048 public class JSONInit {
049
050 @SuppressWarnings("rawtypes")
051 public static synchronized void init() {
052 try {
053 if (_initalized) {
054 return;
055 }
056
057 Field defaultTransformersField =
058 TransformerUtil.class.getDeclaredField("defaultTransformers");
059
060 defaultTransformersField.setAccessible(true);
061
062 TypeTransformerMap oldTransformersMap =
063 TransformerUtil.getDefaultTypeTransformers();
064
065 TypeTransformerMap newTransformersMap = new TypeTransformerMap();
066
067 for (Map.Entry<Class, Transformer> entry :
068 oldTransformersMap.entrySet()) {
069
070 newTransformersMap.put(entry.getKey(), entry.getValue());
071 }
072
073 _registerDefaultTransformers(newTransformersMap);
074
075 Field modifiersField = Field.class.getDeclaredField("modifiers");
076
077 modifiersField.setAccessible(true);
078
079 modifiersField.setInt(
080 defaultTransformersField,
081 defaultTransformersField.getModifiers() & ~Modifier.FINAL);
082
083 defaultTransformersField.set(null, newTransformersMap);
084
085 _initalized = true;
086 }
087 catch (Exception e) {
088 throw new RuntimeException(e);
089 }
090 }
091
092 private static void _registerDefaultTransformers(
093 TypeTransformerMap transformersMap) {
094
095 transformersMap.put(
096 Company.class,
097 new TransformerWrapper(new CompanyJSONTransformer()));
098
099 transformersMap.put(
100 InputStream.class, new TransformerWrapper(new NullTransformer()));
101
102 transformersMap.put(
103 JSONArray.class,
104 new TransformerWrapper(new JSONArrayJSONTransformer()));
105
106 transformersMap.put(
107 JSONObject.class,
108 new TransformerWrapper(new JSONObjectJSONTransformer()));
109
110 transformersMap.put(
111 JSONSerializable.class,
112 new TransformerWrapper(new JSONSerializableJSONTransformer()));
113
114 transformersMap.put(
115 Object.class,
116 new TransformerWrapper(new FlexjsonObjectJSONTransformer()));
117
118 transformersMap.put(
119 RepositoryModel.class,
120 new TransformerWrapper(new RepositoryModelJSONTransformer()));
121
122 transformersMap.put(
123 User.class, new TransformerWrapper(new UserJSONTransformer()));
124 }
125
126 private static boolean _initalized = false;
127
128 }