Skip to content
This repository was archived by the owner on Nov 5, 2019. It is now read-only.

Commit bda2f9b

Browse files
committed
Fix #57 (NPE for @JsonAppend)
1 parent d68ed5e commit bda2f9b

File tree

3 files changed

+59
-3
lines changed

3 files changed

+59
-3
lines changed

release-notes/VERSION

+2
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ Project: jackson-module-afterburner
88

99
#56: Afterburner does not respect DeserializationFeature.UNWRAP_SINGLE_VALUE_ARRAYS
1010
(reported by shollander@github)
11+
#57: `@JsonAppend` causes `NullPointerException`
12+
(reported by cleiner@github)
1113

1214
2.6.1 (09-Aug-2015)
1315

src/main/java/com/fasterxml/jackson/module/afterburner/ser/SerializerModifier.java

+8-3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.fasterxml.jackson.module.afterburner.ser;
22

3+
import java.lang.reflect.Member;
34
import java.lang.reflect.Modifier;
45
import java.util.*;
56

@@ -8,7 +9,6 @@
89
import com.fasterxml.jackson.databind.introspect.AnnotatedMethod;
910
import com.fasterxml.jackson.databind.ser.*;
1011
import com.fasterxml.jackson.databind.util.ClassUtil;
11-
1212
import com.fasterxml.jackson.module.afterburner.util.MyClassLoader;
1313

1414
public class SerializerModifier extends BeanSerializerModifier
@@ -78,8 +78,13 @@ protected PropertyAccessorCollector findProperties(Class<?> beanClass,
7878
Class<?> type = bpw.getPropertyType();
7979
AnnotatedMember member = bpw.getMember();
8080

81-
// First: we can't access private fields or methods....
82-
if (Modifier.isPrivate(member.getMember().getModifiers())) {
81+
Member jdkMember = member.getMember();
82+
// 11-Sep-2015, tatu: Let's skip virtual members (related to #57)
83+
if (jdkMember == null) {
84+
continue;
85+
}
86+
// We can't access private fields or methods, skip:
87+
if (Modifier.isPrivate(jdkMember.getModifiers())) {
8388
continue;
8489
}
8590
// (although, interestingly enough, can seem to access private classes...)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
package com.fasterxml.jackson.module.afterburner.ser;
2+
3+
import com.fasterxml.jackson.core.JsonGenerator;
4+
import com.fasterxml.jackson.databind.*;
5+
import com.fasterxml.jackson.databind.annotation.JsonAppend;
6+
import com.fasterxml.jackson.databind.cfg.MapperConfig;
7+
import com.fasterxml.jackson.databind.introspect.AnnotatedClass;
8+
import com.fasterxml.jackson.databind.introspect.BeanPropertyDefinition;
9+
import com.fasterxml.jackson.databind.ser.VirtualBeanPropertyWriter;
10+
import com.fasterxml.jackson.databind.util.Annotations;
11+
import com.fasterxml.jackson.module.afterburner.AfterburnerTestBase;
12+
13+
// most for [module-afterburner#57]
14+
public class JsonAppendTest extends AfterburnerTestBase
15+
{
16+
@JsonAppend(props = @JsonAppend.Prop(name = "virtual", value = MyVirtualPropertyWriter.class))
17+
public static class Pojo {
18+
public final String name;
19+
public Pojo(String name) {
20+
this.name = name;
21+
}
22+
}
23+
24+
public static class MyVirtualPropertyWriter extends VirtualBeanPropertyWriter {
25+
protected MyVirtualPropertyWriter() { }
26+
27+
protected MyVirtualPropertyWriter(BeanPropertyDefinition propDef, Annotations contextAnnotations,
28+
JavaType declaredType) {
29+
super(propDef, contextAnnotations, declaredType);
30+
}
31+
@Override
32+
protected Object value(Object bean, JsonGenerator g, SerializerProvider prov) throws Exception {
33+
return "bar";
34+
}
35+
@Override
36+
public VirtualBeanPropertyWriter withConfig(MapperConfig<?> config, AnnotatedClass declaringClass,
37+
BeanPropertyDefinition propDef, JavaType type) {
38+
return new MyVirtualPropertyWriter(propDef, declaringClass.getAnnotations(), type);
39+
}
40+
}
41+
42+
public void testSimpleAppend() throws Exception
43+
{
44+
ObjectMapper mapper = mapperWithModule();
45+
// ObjectMapper mapper = new ObjectMapper();
46+
String json = mapper.writeValueAsString(new Pojo("foo"));
47+
assertEquals("{\"name\":\"foo\",\"virtual\":\"bar\"}", json);
48+
}
49+
}

0 commit comments

Comments
 (0)