Skip to content

Commit

Permalink
Fixed #1584
Browse files Browse the repository at this point in the history
  • Loading branch information
cowtowncoder committed Mar 31, 2017
1 parent fdb433b commit 975286b
Show file tree
Hide file tree
Showing 2 changed files with 70 additions and 23 deletions.
Expand Up @@ -312,29 +312,41 @@ public Boolean hasRequiredMarker(AnnotatedMember m) {
@Override @Override
public Object findSerializer(Annotated am) { public Object findSerializer(Annotated am) {
Object r = _primary.findSerializer(am); Object r = _primary.findSerializer(am);
return _isExplicitClassOrOb(r, JsonSerializer.None.class) if (_isExplicitClassOrOb(r, JsonSerializer.None.class)) {
? r : _secondary.findSerializer(am); return r;
}
return _explicitClassOrOb(_secondary.findSerializer(am),
JsonSerializer.None.class);
} }


@Override @Override
public Object findKeySerializer(Annotated a) { public Object findKeySerializer(Annotated a) {
Object r = _primary.findKeySerializer(a); Object r = _primary.findKeySerializer(a);
return _isExplicitClassOrOb(r, JsonSerializer.None.class) if (_isExplicitClassOrOb(r, JsonSerializer.None.class)) {
? r : _secondary.findKeySerializer(a); return r;
}
return _explicitClassOrOb(_secondary.findKeySerializer(a),
JsonSerializer.None.class);
} }


@Override @Override
public Object findContentSerializer(Annotated a) { public Object findContentSerializer(Annotated a) {
Object r = _primary.findContentSerializer(a); Object r = _primary.findContentSerializer(a);
return _isExplicitClassOrOb(r, JsonSerializer.None.class) if (_isExplicitClassOrOb(r, JsonSerializer.None.class)) {
? r : _secondary.findContentSerializer(a); return r;
}
return _explicitClassOrOb(_secondary.findContentSerializer(a),
JsonSerializer.None.class);
} }


@Override @Override
public Object findNullSerializer(Annotated a) { public Object findNullSerializer(Annotated a) {
Object r = _primary.findNullSerializer(a); Object r = _primary.findNullSerializer(a);
return _isExplicitClassOrOb(r, JsonSerializer.None.class) if (_isExplicitClassOrOb(r, JsonSerializer.None.class)) {
? r : _secondary.findNullSerializer(a); return r;
}
return _explicitClassOrOb(_secondary.findNullSerializer(a),
JsonSerializer.None.class);
} }


@Deprecated @Deprecated
Expand Down Expand Up @@ -624,24 +636,34 @@ public boolean hasAnyGetterAnnotation(AnnotatedMethod am) {
// // // Deserialization: general annotations // // // Deserialization: general annotations


@Override @Override
public Object findDeserializer(Annotated am) { public Object findDeserializer(Annotated a) {
Object r = _primary.findDeserializer(am); Object r = _primary.findDeserializer(a);
return _isExplicitClassOrOb(r, JsonDeserializer.None.class) if (_isExplicitClassOrOb(r, JsonDeserializer.None.class)) {
? r : _secondary.findDeserializer(am); return r;
}
return _explicitClassOrOb(_secondary.findDeserializer(a),
JsonDeserializer.None.class);
} }


@Override @Override
public Object findKeyDeserializer(Annotated am) { public Object findKeyDeserializer(Annotated a) {
Object r = _primary.findKeyDeserializer(am); Object r = _primary.findKeyDeserializer(a);
return _isExplicitClassOrOb(r, KeyDeserializer.None.class) if (_isExplicitClassOrOb(r, KeyDeserializer.None.class)) {
? r : _secondary.findKeyDeserializer(am); return r;
}
return _explicitClassOrOb(_secondary.findKeyDeserializer(a),
KeyDeserializer.None.class);
} }


@Override @Override
public Object findContentDeserializer(Annotated am) { public Object findContentDeserializer(Annotated am) {
Object r = _primary.findContentDeserializer(am); Object r = _primary.findContentDeserializer(am);
return _isExplicitClassOrOb(r, JsonDeserializer.None.class) if (_isExplicitClassOrOb(r, JsonDeserializer.None.class)) {
? r : _secondary.findContentDeserializer(am); return r;
}
return _explicitClassOrOb(_secondary.findContentDeserializer(am),
JsonDeserializer.None.class);

} }


@Override @Override
Expand Down Expand Up @@ -789,4 +811,15 @@ protected boolean _isExplicitClassOrOb(Object maybeCls, Class<?> implicit) {
} }
return true; return true;
} }

// @since 2.9
protected Object _explicitClassOrOb(Object maybeCls, Class<?> implicit) {
if ((maybeCls == null) || (maybeCls == implicit)) {
return null;
}
if ((maybeCls instanceof Class<?>) && ClassUtil.isBogusClass((Class<?>) maybeCls)) {
return null;
}
return maybeCls;
}
} }
Expand Up @@ -50,11 +50,10 @@ public JsonInclude.Value findPropertyInclusion(Annotated a) {
} }


static class IntrospectorWithHandlers extends AnnotationIntrospector { static class IntrospectorWithHandlers extends AnnotationIntrospector {
final JsonDeserializer<?> _deserializer; final Object _deserializer;
final JsonSerializer<?> _serializer; final Object _serializer;


public IntrospectorWithHandlers(JsonDeserializer<?> deser, public IntrospectorWithHandlers(Object deser, Object ser) {
JsonSerializer<?> ser) {
_deserializer = deser; _deserializer = deser;
_serializer = ser; _serializer = ser;
} }
Expand Down Expand Up @@ -349,14 +348,22 @@ public void testFindSerializer() throws Exception
AnnotationIntrospector intr1 = new IntrospectorWithHandlers(null, serString); AnnotationIntrospector intr1 = new IntrospectorWithHandlers(null, serString);
AnnotationIntrospector intr2 = new IntrospectorWithHandlers(null, serToString); AnnotationIntrospector intr2 = new IntrospectorWithHandlers(null, serToString);
AnnotationIntrospector nop = AnnotationIntrospector.nopInstance(); AnnotationIntrospector nop = AnnotationIntrospector.nopInstance();

AnnotationIntrospector nop2 = new IntrospectorWithHandlers(null, JsonSerializer.None.class);

assertSame(serString, assertSame(serString,
new AnnotationIntrospectorPair(intr1, intr2).findSerializer(null)); new AnnotationIntrospectorPair(intr1, intr2).findSerializer(null));
assertSame(serToString, assertSame(serToString,
new AnnotationIntrospectorPair(intr2, intr1).findSerializer(null)); new AnnotationIntrospectorPair(intr2, intr1).findSerializer(null));

// also: no-op instance should not block real one, regardless // also: no-op instance should not block real one, regardless
assertSame(serString, assertSame(serString,
new AnnotationIntrospectorPair(nop, intr1).findSerializer(null)); new AnnotationIntrospectorPair(nop, intr1).findSerializer(null));
assertSame(serString,
new AnnotationIntrospectorPair(nop2, intr1).findSerializer(null));

// nor should no-op result in non-null result
assertNull(new AnnotationIntrospectorPair(nop, nop2).findSerializer(null));
assertNull(new AnnotationIntrospectorPair(nop2, nop).findSerializer(null));
} }


public void testFindDeserializer() throws Exception public void testFindDeserializer() throws Exception
Expand All @@ -367,6 +374,7 @@ public void testFindDeserializer() throws Exception
AnnotationIntrospector intr1 = new IntrospectorWithHandlers(deserString, null); AnnotationIntrospector intr1 = new IntrospectorWithHandlers(deserString, null);
AnnotationIntrospector intr2 = new IntrospectorWithHandlers(deserObject, null); AnnotationIntrospector intr2 = new IntrospectorWithHandlers(deserObject, null);
AnnotationIntrospector nop = AnnotationIntrospector.nopInstance(); AnnotationIntrospector nop = AnnotationIntrospector.nopInstance();
AnnotationIntrospector nop2 = new IntrospectorWithHandlers(JsonDeserializer.None.class, null);


assertSame(deserString, assertSame(deserString,
new AnnotationIntrospectorPair(intr1, intr2).findDeserializer(null)); new AnnotationIntrospectorPair(intr1, intr2).findDeserializer(null));
Expand All @@ -375,6 +383,12 @@ public void testFindDeserializer() throws Exception
// also: no-op instance should not block real one, regardless // also: no-op instance should not block real one, regardless
assertSame(deserString, assertSame(deserString,
new AnnotationIntrospectorPair(nop, intr1).findDeserializer(null)); new AnnotationIntrospectorPair(nop, intr1).findDeserializer(null));
assertSame(deserString,
new AnnotationIntrospectorPair(nop2, intr1).findDeserializer(null));

// nor should no-op result in non-null result
assertNull(new AnnotationIntrospectorPair(nop, nop2).findDeserializer(null));
assertNull(new AnnotationIntrospectorPair(nop2, nop).findDeserializer(null));
} }


/* /*
Expand Down

0 comments on commit 975286b

Please sign in to comment.