diff --git a/pom.xml b/pom.xml index 283f0b427f..2fccd6052e 100755 --- a/pom.xml +++ b/pom.xml @@ -11,7 +11,7 @@ --> com.alibaba fastjson - 1.2.25.internal.v9 + 1.2.25 jar fastjson diff --git a/src/main/java/com/alibaba/fastjson/parser/ParserConfig.java b/src/main/java/com/alibaba/fastjson/parser/ParserConfig.java index 869a860b14..00407554d9 100644 --- a/src/main/java/com/alibaba/fastjson/parser/ParserConfig.java +++ b/src/main/java/com/alibaba/fastjson/parser/ParserConfig.java @@ -113,7 +113,7 @@ * @author wenshao[szujobs@hotmail.com] */ public class ParserConfig { - + public final static String DENY_PROPERTY = "fastjson.parser.deny"; public final static String AUTOTYPE_ACCEPT = "fastjson.parser.autoTypeAccept"; public final static String AUTOTYPE_SUPPORT_PROPERTY = "fastjson.parser.autoTypeSupport"; @@ -132,7 +132,11 @@ public class ParserConfig { } { String property = IOUtils.getStringProperty(AUTOTYPE_ACCEPT); - AUTO_TYPE_ACCEPT_LIST = splitItemsFormProperty(property); + String[] items = splitItemsFormProperty(property); + if (items == null) { + items = new String[0]; + } + AUTO_TYPE_ACCEPT_LIST = items; } } @@ -159,7 +163,7 @@ public static ParserConfig getGlobalInstance() { private boolean autoTypeSupport = AUTO_SUPPORT; private String[] denyList = "bsh,com.mchange,com.sun.,java.lang.Thread,java.net.Socket,java.rmi,javax.xml,org.apache.bcel,org.apache.commons.beanutils,org.apache.commons.collections.Transformer,org.apache.commons.collections.functors,org.apache.commons.collections4.comparators,org.apache.commons.fileupload,org.apache.myfaces.context.servlet,org.apache.tomcat,org.apache.wicket.util,org.codehaus.groovy.runtime,org.hibernate,org.jboss,org.mozilla.javascript,org.python.core,org.springframework".split(","); - private String[] acceptList = new String[0]; + private String[] acceptList = AUTO_TYPE_ACCEPT_LIST; public ParserConfig(){ this(null, null); diff --git a/src/main/java/com/alibaba/fastjson/util/TypeUtils.java b/src/main/java/com/alibaba/fastjson/util/TypeUtils.java index eb68b90f07..36e679bf3f 100755 --- a/src/main/java/com/alibaba/fastjson/util/TypeUtils.java +++ b/src/main/java/com/alibaba/fastjson/util/TypeUtils.java @@ -1010,8 +1010,8 @@ private static void addBaseClassMappings() { java.util.TreeSet.class, java.util.concurrent.TimeUnit.class, java.util.concurrent.ConcurrentHashMap.class, - java.util.concurrent.ConcurrentSkipListMap.class, - java.util.concurrent.ConcurrentSkipListSet.class, + loadClass("java.util.concurrent.ConcurrentSkipListMap"), + loadClass("java.util.concurrent.ConcurrentSkipListSet"), java.util.concurrent.atomic.AtomicInteger.class, java.util.concurrent.atomic.AtomicLong.class, java.util.Collections.EMPTY_MAP.getClass(), @@ -1024,6 +1024,7 @@ private static void addBaseClassMappings() { java.sql.Date.class, java.sql.Timestamp.class, java.text.SimpleDateFormat.class, + com.alibaba.fastjson.JSONObject.class, loadClass("java.awt.Rectangle"), loadClass("java.awt.Point"), loadClass("java.awt.Font"), diff --git a/src/test/java/com/alibaba/json/bvt/fullSer/ToJavaObjectTest.java b/src/test/java/com/alibaba/json/bvt/fullSer/ToJavaObjectTest.java new file mode 100644 index 0000000000..5fcd3d82fa --- /dev/null +++ b/src/test/java/com/alibaba/json/bvt/fullSer/ToJavaObjectTest.java @@ -0,0 +1,20 @@ +package com.alibaba.json.bvt.fullSer; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import junit.framework.TestCase; + +/** + * Created by wenshao on 04/02/2017. + */ +public class ToJavaObjectTest extends TestCase { + public void test_for_toJavaObject() throws Exception { + JSONObject obj = JSON.parseObject("{\"id\":123}"); + Model model = obj.toJavaObject(Model.class); + assertEquals(123, model.id); + } + + public static class Model { + public int id; + } +} diff --git a/src/test/java/com/alibaba/json/bvt/parser/deser/deny/DenyTest16.java b/src/test/java/com/alibaba/json/bvt/parser/deser/deny/DenyTest16.java new file mode 100644 index 0000000000..7d45b385d3 --- /dev/null +++ b/src/test/java/com/alibaba/json/bvt/parser/deser/deny/DenyTest16.java @@ -0,0 +1,28 @@ +package com.alibaba.json.bvt.parser.deser.deny; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.alibaba.fastjson.util.TypeUtils; +import junit.framework.TestCase; + +/** + * Created by wenshao on 29/01/2017. + */ +public class DenyTest16 extends TestCase { + public void test_deny() throws Exception { + JSONObject object = new JSONObject(); + object.put("@type", "com.mchange.v2.c3p0.impl.PoolBackedDataSourceBase"); + + Throwable error = null; + try { + TypeUtils.castToJavaBean(object, Object.class); + } catch (Exception ex) { + error = ex; + } + assertNotNull(error); + } + + public static class Model { + public Throwable value; + } +} diff --git a/src/test/java/com/alibaba/json/bvt/writeClassName/WriteClassNameTest_Collection.java b/src/test/java/com/alibaba/json/bvt/writeClassName/WriteClassNameTest_Collection.java index 5ef8536016..f002d9cbbe 100755 --- a/src/test/java/com/alibaba/json/bvt/writeClassName/WriteClassNameTest_Collection.java +++ b/src/test/java/com/alibaba/json/bvt/writeClassName/WriteClassNameTest_Collection.java @@ -12,7 +12,7 @@ public class WriteClassNameTest_Collection extends TestCase { protected void setUp() throws Exception { - ParserConfig.global.addAccept("com.alibaba.json.bvt.writeClassName.WriteClassNameTest_Collection"); + com.alibaba.fastjson.parser.ParserConfig.global.addAccept("com.alibaba.json.bvt.writeClassName.WriteClassNameTest_Collection"); } public void test_list() throws Exception { diff --git a/src/test/java/com/alibaba/json/test/a/CompilerTest.java b/src/test/java/com/alibaba/json/test/a/CompilerTest.java new file mode 100644 index 0000000000..4f4391fe55 --- /dev/null +++ b/src/test/java/com/alibaba/json/test/a/CompilerTest.java @@ -0,0 +1,52 @@ +package com.alibaba.json.test.a; + +import com.alibaba.fastjson.JSON; +import junit.framework.TestCase; + +import java.io.*; + +/** + * Created by wenshao on 04/02/2017. + */ +public class CompilerTest extends TestCase { + public void test_for_compiler() throws Exception { + byte[] bytes; + { + Model model = new Model(); + model.id = 123; + + bytes = toBytes(model); + } + + perf(bytes); + for (int i = 0; i < 10; ++i) { + long start = System.currentTimeMillis(); + perf(bytes); + long millis = System.currentTimeMillis() - start; + System.out.println("millis : " + millis); + } + } + + private void perf(byte[] bytes) throws IOException, ClassNotFoundException { + for (int i = 0; i < 1000; ++i) { + ObjectInputStream in = new ObjectInputStream(new ByteArrayInputStream(bytes)); + Model model = (Model) in.readObject(); + assertEquals(123, model.id); + } + } + + private byte[] toBytes(Model model) throws IOException { + ByteArrayOutputStream byteOut = new ByteArrayOutputStream(); + ObjectOutputStream out = new ObjectOutputStream(byteOut); + + out.writeObject(model); + out.flush(); + byte[] bytes = byteOut.toByteArray(); + out.close(); + return bytes; + } + + public static class Model implements Serializable { + public int id; + } +} diff --git a/src/test/java/com/alibaba/json/test/a/GsonTest.java b/src/test/java/com/alibaba/json/test/a/GsonTest.java new file mode 100644 index 0000000000..fd1594c5c0 --- /dev/null +++ b/src/test/java/com/alibaba/json/test/a/GsonTest.java @@ -0,0 +1,24 @@ +package com.alibaba.json.test.a; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.google.gson.Gson; +import junit.framework.TestCase; + +/** + * Created by wenshao on 04/02/2017. + */ +public class GsonTest extends TestCase { + public void test_0() throws Exception { + String text = "{\"loader\":\"com.sun.org.apache.bcel.internal.util.ClassLoader\"}"; + +// Gson gson = new Gson(); +// gson.fromJson(text, Model.class); + + ObjectMapper mapper = new ObjectMapper(); + mapper.readValue(text, Model.class); + } + + public static class Model { + public ClassLoader loader; + } +}