/src/test/java/com/alibaba/json/bvt/parser/TypeUtilsTest_castToJavaBean.java

https://github.com/alibaba/fastjson · Java · 254 lines · 203 code · 51 blank · 0 comment · 2 complexity · bb0e4dcd80c6dad71e0dd6b7af100cbc MD5 · raw file

  1. package com.alibaba.json.bvt.parser;
  2. import java.lang.reflect.Field;
  3. import java.net.URL;
  4. import java.util.Collections;
  5. import java.util.HashMap;
  6. import java.util.Map;
  7. import java.util.concurrent.ConcurrentMap;
  8. import com.alibaba.fastjson.parser.ParserConfig;
  9. import org.junit.Assert;
  10. import com.alibaba.fastjson.JSON;
  11. import com.alibaba.fastjson.serializer.JSONSerializer;
  12. import com.alibaba.fastjson.serializer.JavaBeanSerializer;
  13. import com.alibaba.fastjson.serializer.SerializeConfig;
  14. import com.alibaba.fastjson.serializer.SerializeWriter;
  15. import com.alibaba.fastjson.util.TypeUtils;
  16. import junit.framework.TestCase;
  17. public class TypeUtilsTest_castToJavaBean extends TestCase {
  18. protected void setUp() throws Exception {
  19. ParserConfig.global.addAccept("com.alibaba.json.bvt.parser.TypeUtilsTest_castToJavaBean.");
  20. }
  21. public void test_castToJavaBean_StackTraceElement() throws Exception {
  22. Map<String, Object> map = new HashMap<String, Object>();
  23. map.put("className", "java.lang.Object");
  24. map.put("methodName", "hashCode");
  25. StackTraceElement element = TypeUtils.castToJavaBean(map, StackTraceElement.class, null);
  26. Assert.assertEquals("java.lang.Object", element.getClassName());
  27. Assert.assertEquals("hashCode", element.getMethodName());
  28. Assert.assertEquals(null, element.getFileName());
  29. }
  30. public void test_castToJavaBean_StackTraceElement_1() throws Exception {
  31. Map<String, Object> map = new HashMap<String, Object>();
  32. map.put("className", "java.lang.Object");
  33. map.put("methodName", "hashCode");
  34. map.put("lineNumber", 12);
  35. StackTraceElement element = TypeUtils.castToJavaBean(map, StackTraceElement.class, null);
  36. Assert.assertEquals("java.lang.Object", element.getClassName());
  37. Assert.assertEquals("hashCode", element.getMethodName());
  38. Assert.assertEquals(null, element.getFileName());
  39. Assert.assertEquals(12, element.getLineNumber());
  40. }
  41. public void test_castToJavaBean_type() throws Exception {
  42. Map<String, Object> map = new HashMap<String, Object>();
  43. map.put("@type", "java.lang.StackTraceElement");
  44. map.put("className", "java.lang.Object");
  45. map.put("methodName", "hashCode");
  46. map.put("lineNumber", 12);
  47. StackTraceElement element = (StackTraceElement) TypeUtils.castToJavaBean(map, Object.class, null);
  48. Assert.assertEquals("java.lang.Object", element.getClassName());
  49. Assert.assertEquals("hashCode", element.getMethodName());
  50. Assert.assertEquals(null, element.getFileName());
  51. Assert.assertEquals(12, element.getLineNumber());
  52. }
  53. public void test_error() throws Exception {
  54. Map<String, Object> map = new HashMap<String, Object>();
  55. map.put("@type", "xxx");
  56. Exception error = null;
  57. try {
  58. TypeUtils.castToJavaBean(map, Object.class, null);
  59. } catch (Exception ex) {
  60. error = ex;
  61. }
  62. Assert.assertNotNull(error);
  63. }
  64. public void test_error2() throws Exception {
  65. Map<String, Object> map = new HashMap<String, Object>();
  66. map.put("@type", "");
  67. Exception error = null;
  68. try {
  69. TypeUtils.castToJavaBean(map, Object.class, null);
  70. } catch (Exception ex) {
  71. error = ex;
  72. }
  73. Assert.assertNotNull(error);
  74. }
  75. public void test_mapping() throws Exception {
  76. addClassMapping("my_xxx", VO.class);
  77. addClassMapping(null, VO.class);
  78. Map<String, Object> map = new HashMap<String, Object>();
  79. map.put("@type", "my_xxx");
  80. map.put("id", 123);
  81. VO vo = (VO) TypeUtils.castToJavaBean(map, Object.class);
  82. Assert.assertEquals(123, vo.getId());
  83. TypeUtils.clearClassMapping();
  84. }
  85. public static void addClassMapping(String className, Class<?> clazz) throws Exception {
  86. Field field = TypeUtils.class.getDeclaredField("mappings");
  87. field.setAccessible(true);
  88. field.get(null);
  89. ConcurrentMap<String, Class<?>> mappings = (ConcurrentMap<String, Class<?>>) field.get(null);
  90. if (className == null) {
  91. className = clazz.getName();
  92. }
  93. mappings.put(className, clazz);
  94. }
  95. public void test_interface() throws Exception {
  96. Map<String, Object> map = new HashMap<String, Object>();
  97. map.put("id", 123);
  98. VO vo = TypeUtils.castToJavaBean(map, VO.class);
  99. Assert.assertEquals(123, vo.getId());
  100. }
  101. public void test_bean() throws Exception {
  102. Map<String, Object> map = new HashMap<String, Object>();
  103. map.put("id", 123);
  104. Entity vo = TypeUtils.castToJavaBean(map, Entity.class);
  105. Assert.assertEquals(123, vo.getId());
  106. Assert.assertEquals("{\"id\":123}", JSON.toJSONString(vo));
  107. }
  108. public void test_loadClass() throws Exception {
  109. Assert.assertNull(TypeUtils.loadClass(null));
  110. Assert.assertNull(TypeUtils.loadClass(""));
  111. }
  112. public void test_loadClass_1() throws Exception {
  113. TypeUtils.clearClassMapping();
  114. ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader();
  115. Thread.currentThread().setContextClassLoader(new TestLoader());
  116. try {
  117. Assert.assertEquals(VO.class,
  118. TypeUtils.loadClass("com.alibaba.json.bvt.parser.TypeUtilsTest_castToJavaBean$VO"));
  119. } finally {
  120. Thread.currentThread().setContextClassLoader(contextClassLoader);
  121. }
  122. }
  123. public void test_loadClass_2() throws Exception {
  124. TypeUtils.clearClassMapping();
  125. ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader();
  126. Thread.currentThread().setContextClassLoader(new TestLoader());
  127. try {
  128. Assert.assertNull(TypeUtils.loadClass("xxx_xx"));
  129. } finally {
  130. Thread.currentThread().setContextClassLoader(contextClassLoader);
  131. }
  132. }
  133. public void test_bean_2() throws Exception {
  134. Map<String, Object> map = new HashMap<String, Object>();
  135. map.put("id", 123);
  136. PO vo = TypeUtils.castToJavaBean(map, PO.class);
  137. Assert.assertEquals(123, vo.id);
  138. SerializeWriter out = new SerializeWriter();
  139. try {
  140. SerializeConfig config = new SerializeConfig();
  141. JSONSerializer serializer = new JSONSerializer(out, config);
  142. config.put(PO.class, new JavaBeanSerializer(PO.class, Collections.singletonMap("id", "ID")));
  143. serializer.write(vo);
  144. Assert.assertEquals("{\"ID\":123}", out.toString());
  145. } finally {
  146. out.close();
  147. }
  148. }
  149. public void test_bean_3() throws Exception {
  150. Map<String, Object> map = new HashMap<String, Object>();
  151. map.put("id", 123);
  152. PO vo = TypeUtils.castToJavaBean(map, PO.class);
  153. Assert.assertEquals(123, vo.id);
  154. SerializeWriter out = new SerializeWriter();
  155. try {
  156. SerializeConfig config = new SerializeConfig();
  157. JSONSerializer serializer = new JSONSerializer(out, config);
  158. config.put(PO.class, new JavaBeanSerializer(PO.class, Collections.singletonMap("id", (String) null)));
  159. serializer.write(vo);
  160. Assert.assertEquals("{}", out.toString());
  161. } finally {
  162. out.close();
  163. }
  164. }
  165. public static interface VO {
  166. void setId(int value);
  167. int getId();
  168. ClassLoader getClassLoader();
  169. }
  170. public static class Entity {
  171. private int id;
  172. protected String name;
  173. public int getId() {
  174. return id;
  175. }
  176. public void setId(int id) {
  177. this.id = id;
  178. }
  179. protected String getName() {
  180. return name;
  181. }
  182. protected void setName(String name) {
  183. this.name = name;
  184. }
  185. public ClassLoader getClassLoader() {
  186. return Entity.class.getClassLoader();
  187. }
  188. }
  189. private static class PO {
  190. public int id;
  191. }
  192. public static class TestLoader extends ClassLoader {
  193. public TestLoader(){
  194. super(null);
  195. }
  196. public URL getResource(String name) {
  197. return null;
  198. }
  199. public Class<?> loadClass(String name) throws ClassNotFoundException {
  200. throw new ClassNotFoundException();
  201. }
  202. }
  203. }