Skip to content
This repository has been archived by the owner on Oct 23, 2024. It is now read-only.

Commit

Permalink
Merge pull request #1506 from kimmking/master
Browse files Browse the repository at this point in the history
fix #1500
  • Loading branch information
wenshao authored Oct 4, 2017
2 parents d35a1a1 + 4fc5587 commit a3860da
Show file tree
Hide file tree
Showing 2 changed files with 76 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -130,7 +130,20 @@ public <T> T deserialze(DefaultJSONParser parser, Type type, Object fieldName) {
FieldDeserializer fieldDeserializer = this.getFieldDeserializer(key);
if (fieldDeserializer != null) {
fieldDeserializer.setValue(ex, value);
}else{ // 嵌套execption对象时,拿不到fieldDeserializer
try {
Field field = ex.getClass().getDeclaredField(key);
field.setAccessible(true);
field.set(ex, TypeUtils.cast(value,field.getType(),null));
} catch (NoSuchFieldException e) {
// e.printStackTrace();
// ignore
} catch (IllegalAccessException e) {
// e.printStackTrace();
// ignore
}
}

}

return (T) ex;
Expand Down
63 changes: 63 additions & 0 deletions src/test/java/com/alibaba/json/bvt/issue_1500/Issue1500.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
package com.alibaba.json.bvt.issue_1500;

import clojure.lang.Obj;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.parser.ParserConfig;
import com.alibaba.fastjson.serializer.SerializerFeature;
import junit.framework.TestCase;
import org.junit.Assert;

import java.util.HashMap;
import java.util.Map;

public class Issue1500 extends TestCase {


public void test_for_issue() throws Exception {

// test aa
Aa aa = new Aa();
aa.setName("aa");
String jsonAa = JSON.toJSONString(aa);
Aa aa1 = JSON.parseObject(jsonAa, Aa.class);
Assert.assertEquals("aa",aa1.getName());

// test C
C c = new C();
c.setE(aa);
String jsonC = JSON.toJSONString(c, SerializerFeature.WriteClassName);
C c2 = JSON.parseObject(jsonC, C.class);
Assert.assertEquals("Aa",c2.getE().getClass().getSimpleName());
Assert.assertEquals("aa",((Aa)c2.getE()).getName());
}

public static class Aa extends Exception {

public Aa(){
}

private String name;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}
}
public static class C {

private Exception e;

public Exception getE() {
return e;
}

public void setE(Exception e) {
this.e = e;
}

}

}

0 comments on commit a3860da

Please sign in to comment.