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