Skip to content

Commit d6f8728

Browse files
author
邱占波
committed
增加asm生成的代码dump功能
方便测试.
1 parent fbfa4b2 commit d6f8728

File tree

2 files changed

+22
-3
lines changed

2 files changed

+22
-3
lines changed

src/main/java/com/alibaba/fastjson/JSON.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,11 @@ public abstract class JSON implements JSONStreamAware, JSONAware {
6161

6262
public static String DEFAULT_TYPE_KEY = "@type";
6363

64+
/**
65+
* asm生成代码dump路径
66+
*/
67+
public static String DUMP_CLASS = null;
68+
6469
public static int DEFAULT_PARSER_FEATURE;
6570
static {
6671
int features = 0;

src/main/java/com/alibaba/fastjson/parser/deserializer/ASMDeserializerFactory.java

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
import static com.alibaba.fastjson.util.ASMUtils.getDesc;
44
import static com.alibaba.fastjson.util.ASMUtils.getType;
55

6+
import java.io.File;
7+
import java.io.FileOutputStream;
68
import java.lang.reflect.Constructor;
79
import java.lang.reflect.Method;
810
import java.lang.reflect.Modifier;
@@ -19,6 +21,7 @@
1921
import java.util.TreeSet;
2022
import java.util.concurrent.atomic.AtomicLong;
2123

24+
import com.alibaba.fastjson.JSON;
2225
import com.alibaba.fastjson.asm.ASMException;
2326
import com.alibaba.fastjson.asm.ClassWriter;
2427
import com.alibaba.fastjson.asm.FieldVisitor;
@@ -94,9 +97,20 @@ public ObjectDeserializer createJavaBeanDeserializer(ParserConfig config, Class<
9497
_deserialzeArrayMapping(cw, new Context(className, config, beanInfo, 4));
9598
byte[] code = cw.toByteArray();
9699

97-
// org.apache.commons.io.IOUtils.write(code, new java.io.FileOutputStream(
98-
// "/usr/alibaba/workspace-3.7/fastjson-asm/target/classes/"
99-
// + className + ".class"));
100+
if(JSON.DUMP_CLASS != null){
101+
FileOutputStream fos=null;
102+
try {
103+
fos=new FileOutputStream(JSON.DUMP_CLASS+ File.separator
104+
+ className + ".class");
105+
fos.write(code);
106+
}catch (Exception ex){
107+
System.err.println("FASTJSON dump class:"+className+"失败:"+ex.getMessage());
108+
}finally {
109+
if(fos!=null){
110+
fos.close();
111+
}
112+
}
113+
}
100114

101115
Class<?> exampleClass = classLoader.defineClassPublic(className, code, 0, code.length);
102116

0 commit comments

Comments
 (0)