Skip to content

Commit

Permalink
Merge pull request #3475 from akiyamaneko/AfterFilter-NullPointerExce…
Browse files Browse the repository at this point in the history
…ption

fix AfterFilter NullPointer exception in #3443
  • Loading branch information
wenshao committed Oct 3, 2020
2 parents 5f2c892 + 20e16be commit 4a9ca85
Show file tree
Hide file tree
Showing 2 changed files with 60 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,9 @@ protected final void writeKeyValue(String key, Object value) {
JSONSerializer serializer = serializerLocal.get();
char seperator = seperatorLocal.get();

boolean ref = serializer.references.containsKey(value);
boolean ref = serializer.containsReference(value);
serializer.writeKeyValue(seperator, key, value);
if (!ref) {
if (!ref && serializer.references != null) {
serializer.references.remove(value);
}
if (seperator != ',') {
Expand Down
58 changes: 58 additions & 0 deletions src/test/java/com/alibaba/json/bvt/issue_3300/Issue3443.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
package com.alibaba.json.bvt.issue_3300;

import com.alibaba.fastjson.serializer.*;
import junit.framework.TestCase;

public class Issue3443 extends TestCase {
public void testCustomJsonSerializerAndAfterFilter() throws Exception {
SerializeWriter serializeWriter = new SerializeWriter();
try {
JSONSerializer jsonSerializer = new JSONSerializer(serializeWriter, new SerializeConfig());

Parameter parameter = new Parameter();
parameter.setParameterDesc(new ParameterDesc("vipExpireDate", "VIP expire date."));

jsonSerializer.config(SerializerFeature.DisableCircularReferenceDetect, true);
jsonSerializer.getAfterFilters().add(new CustomFilter());
jsonSerializer.write(parameter);
assertEquals("{\"parameterDesc\":{\"ParameterDesc\":\"VIP expire date.\"}}", serializeWriter.toString());
} finally {
serializeWriter.close();
}
}

static class Parameter {
private ParameterDesc parameterDesc;

public ParameterDesc getParameterDesc() {
return parameterDesc;
}

public void setParameterDesc(ParameterDesc parameterType) {
this.parameterDesc = parameterType;
}
}

static class ParameterDesc {
private String parameterName;
private String parameterUsage;
// do some work...

public ParameterDesc(String parameterName, String parameterUsage) {
this.parameterName = parameterName;
this.parameterUsage = parameterUsage;
}


}

static class CustomFilter extends AfterFilter {

@Override
public void writeAfter(Object object) {
if (object instanceof ParameterDesc) {
writeKeyValue("ParameterDesc", "VIP expire date.");
}
}
}
}

0 comments on commit 4a9ca85

Please sign in to comment.