Skip to content

Commit 158e116

Browse files
committed
Fix #812
1 parent 1b83366 commit 158e116

File tree

8 files changed

+47
-27
lines changed

8 files changed

+47
-27
lines changed

release-notes/VERSION

+1
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ Project: jackson-databind
5555
#795: Converter annotation not honored for abstract types
5656
(reported by myrosia@github)
5757
#797: `JsonNodeFactory` method `numberNode(long)` produces `IntNode` for small numbers
58+
#812: Java 8 breaks Class-value annotation properties, wrt generics: need to work around
5859
- Remove old cglib compatibility tests; cause problems in Eclipse
5960

6061
2.5.4 (not yet released)

src/main/java/com/fasterxml/jackson/databind/annotation/JsonDeserialize.java

+8-4
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,8 @@
4040
* anywhere where class deserializer is needed); or only used for
4141
* deserializing property access via a setter method.
4242
*/
43-
public Class<? extends JsonDeserializer<?>> using()
43+
@SuppressWarnings("rawtypes") // to work around JDK8 bug wrt Class-valued annotation properties
44+
public Class<? extends JsonDeserializer> using()
4445
default JsonDeserializer.None.class;
4546

4647
/**
@@ -49,7 +50,8 @@ public Class<? extends JsonDeserializer<?>> using()
4950
* Can only be used on instances (methods, fields, constructors),
5051
* and not value classes themselves.
5152
*/
52-
public Class<? extends JsonDeserializer<?>> contentUsing()
53+
@SuppressWarnings("rawtypes") // to work around JDK8 bug wrt Class-valued annotation properties
54+
public Class<? extends JsonDeserializer> contentUsing()
5355
default JsonDeserializer.None.class;
5456

5557
/**
@@ -83,15 +85,17 @@ public Class<? extends KeyDeserializer> keyUsing()
8385
*
8486
* @since 2.2
8587
*/
86-
public Class<? extends Converter<?,?>> converter() default Converter.None.class;
88+
@SuppressWarnings("rawtypes") // to work around JDK8 bug wrt Class-valued annotation properties
89+
public Class<? extends Converter> converter() default Converter.None.class;
8790

8891
/**
8992
* Similar to {@link #converter}, but used for values of structures types
9093
* (List, arrays, Maps).
9194
*
9295
* @since 2.2
9396
*/
94-
public Class<? extends Converter<?,?>> contentConverter() default Converter.None.class;
97+
@SuppressWarnings("rawtypes") // to work around JDK8 bug wrt Class-valued annotation properties
98+
public Class<? extends Converter> contentConverter() default Converter.None.class;
9599

96100

97101
// // // Annotations for explicitly specifying deserialization type

src/main/java/com/fasterxml/jackson/databind/annotation/JsonSerialize.java

+13-6
Original file line numberDiff line numberDiff line change
@@ -40,15 +40,17 @@
4040
* anywhere where class serializer is needed); or only used for
4141
* serializing property access via a getter method.
4242
*/
43-
public Class<? extends JsonSerializer<?>> using() default JsonSerializer.None.class;
43+
@SuppressWarnings("rawtypes") // to work around JDK8 bug wrt Class-valued annotation properties
44+
public Class<? extends JsonSerializer> using() default JsonSerializer.None.class;
4445

4546
/**
4647
* Serializer class to use for serializing contents (elements
4748
* of a Collection/array, values of Maps) of annotated property.
4849
* Can only be used on properties (methods, fields, constructors),
4950
* and not value classes themselves (as they are typically generic)
5051
*/
51-
public Class<? extends JsonSerializer<?>> contentUsing()
52+
@SuppressWarnings("rawtypes") // to work around JDK8 bug wrt Class-valued annotation properties
53+
public Class<? extends JsonSerializer> contentUsing()
5254
default JsonSerializer.None.class;
5355

5456
/**
@@ -57,7 +59,8 @@ public Class<? extends JsonSerializer<?>> contentUsing()
5759
* Can only be used on properties (methods, fields, constructors),
5860
* and not value classes themselves.
5961
*/
60-
public Class<? extends JsonSerializer<?>> keyUsing()
62+
@SuppressWarnings("rawtypes") // to work around JDK8 bug wrt Class-valued annotation properties
63+
public Class<? extends JsonSerializer> keyUsing()
6164
default JsonSerializer.None.class;
6265

6366
/**
@@ -69,7 +72,8 @@ public Class<? extends JsonSerializer<?>> keyUsing()
6972
*
7073
* @since 2.3
7174
*/
72-
public Class<? extends JsonSerializer<?>> nullsUsing()
75+
@SuppressWarnings("rawtypes") // to work around JDK8 bug wrt Class-valued annotation properties
76+
public Class<? extends JsonSerializer> nullsUsing()
7377
default JsonSerializer.None.class;
7478

7579
// // // Annotations for type handling, explicit declaration
@@ -130,7 +134,8 @@ public Class<? extends JsonSerializer<?>> nullsUsing()
130134
*
131135
* @since 2.2
132136
*/
133-
public Class<? extends Converter<?,?>> converter() default Converter.None.class;
137+
@SuppressWarnings("rawtypes") // to work around JDK8 bug wrt Class-valued annotation properties
138+
public Class<? extends Converter> converter() default Converter.None.class;
134139

135140
/**
136141
* Similar to {@link #converter}, but used for values of structures types
@@ -142,7 +147,8 @@ public Class<? extends JsonSerializer<?>> nullsUsing()
142147
*
143148
* @since 2.2
144149
*/
145-
public Class<? extends Converter<?,?>> contentConverter() default Converter.None.class;
150+
@SuppressWarnings("rawtypes") // to work around JDK8 bug wrt Class-valued annotation properties
151+
public Class<? extends Converter> contentConverter() default Converter.None.class;
146152

147153
// // // Annotation(s) for inclusion criteria
148154

@@ -176,6 +182,7 @@ public Class<? extends JsonSerializer<?>> nullsUsing()
176182
* to define which properties
177183
* of Java Beans are to be included in serialization
178184
*/
185+
@Deprecated // since 2.0, marked deprecated in 2.6
179186
public enum Inclusion
180187
{
181188
/**

src/main/java/com/fasterxml/jackson/databind/introspect/JacksonAnnotationIntrospector.java

+13-6
Original file line numberDiff line numberDiff line change
@@ -309,7 +309,8 @@ public Object findSerializer(Annotated a)
309309
{
310310
JsonSerialize ann = _findAnnotation(a, JsonSerialize.class);
311311
if (ann != null) {
312-
Class<? extends JsonSerializer<?>> serClass = ann.using();
312+
@SuppressWarnings("rawtypes")
313+
Class<? extends JsonSerializer> serClass = ann.using();
313314
if (serClass != JsonSerializer.None.class) {
314315
return serClass;
315316
}
@@ -333,7 +334,8 @@ public Object findKeySerializer(Annotated a)
333334
{
334335
JsonSerialize ann = _findAnnotation(a, JsonSerialize.class);
335336
if (ann != null) {
336-
Class<? extends JsonSerializer<?>> serClass = ann.keyUsing();
337+
@SuppressWarnings("rawtypes")
338+
Class<? extends JsonSerializer> serClass = ann.keyUsing();
337339
if (serClass != JsonSerializer.None.class) {
338340
return serClass;
339341
}
@@ -346,7 +348,8 @@ public Object findContentSerializer(Annotated a)
346348
{
347349
JsonSerialize ann = _findAnnotation(a, JsonSerialize.class);
348350
if (ann != null) {
349-
Class<? extends JsonSerializer<?>> serClass = ann.contentUsing();
351+
@SuppressWarnings("rawtypes")
352+
Class<? extends JsonSerializer> serClass = ann.contentUsing();
350353
if (serClass != JsonSerializer.None.class) {
351354
return serClass;
352355
}
@@ -359,7 +362,8 @@ public Object findNullSerializer(Annotated a)
359362
{
360363
JsonSerialize ann = _findAnnotation(a, JsonSerialize.class);
361364
if (ann != null) {
362-
Class<? extends JsonSerializer<?>> serClass = ann.nullsUsing();
365+
@SuppressWarnings("rawtypes")
366+
Class<? extends JsonSerializer> serClass = ann.nullsUsing();
363367
if (serClass != JsonSerializer.None.class) {
364368
return serClass;
365369
}
@@ -368,6 +372,7 @@ public Object findNullSerializer(Annotated a)
368372
}
369373

370374
@Override
375+
@SuppressWarnings("deprecation")
371376
public JsonInclude.Include findSerializationInclusion(Annotated a, JsonInclude.Include defValue)
372377
{
373378
JsonInclude inc = _findAnnotation(a, JsonInclude.class);
@@ -680,7 +685,8 @@ public Object findDeserializer(Annotated a)
680685
{
681686
JsonDeserialize ann = _findAnnotation(a, JsonDeserialize.class);
682687
if (ann != null) {
683-
Class<? extends JsonDeserializer<?>> deserClass = ann.using();
688+
@SuppressWarnings("rawtypes")
689+
Class<? extends JsonDeserializer> deserClass = ann.using();
684690
if (deserClass != JsonDeserializer.None.class) {
685691
return deserClass;
686692
}
@@ -706,7 +712,8 @@ public Object findContentDeserializer(Annotated a)
706712
{
707713
JsonDeserialize ann = _findAnnotation(a, JsonDeserialize.class);
708714
if (ann != null) {
709-
Class<? extends JsonDeserializer<?>> deserClass = ann.contentUsing();
715+
@SuppressWarnings("rawtypes")
716+
Class<? extends JsonDeserializer> deserClass = ann.contentUsing();
710717
if (deserClass != JsonDeserializer.None.class) {
711718
return deserClass;
712719
}

src/main/java/com/fasterxml/jackson/databind/ser/PropertyBuilder.java

-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
import com.fasterxml.jackson.annotation.JsonInclude;
44
import com.fasterxml.jackson.databind.*;
55
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
6-
import com.fasterxml.jackson.databind.annotation.JsonSerialize.Inclusion;
76
import com.fasterxml.jackson.databind.introspect.*;
87
import com.fasterxml.jackson.databind.jsontype.TypeSerializer;
98
import com.fasterxml.jackson.databind.util.*;

src/test/java/com/fasterxml/jackson/databind/ser/TestConfig.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@ public class TestConfig
2121
/**********************************************************
2222
*/
2323

24-
@JsonSerialize(include=JsonSerialize.Inclusion.NON_DEFAULT,
25-
typing=JsonSerialize.Typing.STATIC)
24+
@JsonInclude(JsonInclude.Include.NON_DEFAULT)
25+
@JsonSerialize(typing=JsonSerialize.Typing.STATIC)
2626
final static class Config { }
2727

2828
final static class ConfigNone { }

src/test/java/com/fasterxml/jackson/databind/ser/TestEmptyClass.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import java.io.IOException;
44

5+
import com.fasterxml.jackson.annotation.JsonInclude;
56
import com.fasterxml.jackson.core.JsonGenerator;
67
import com.fasterxml.jackson.databind.*;
78
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
@@ -23,7 +24,7 @@ static class NonZero {
2324
public NonZero(int i) { nr = i; }
2425
}
2526

26-
@JsonSerialize(include=JsonSerialize.Inclusion.NON_EMPTY)
27+
@JsonInclude(JsonInclude.Include.NON_EMPTY)
2728
static class NonZeroWrapper {
2829
public NonZero value;
2930

src/test/java/com/fasterxml/jackson/databind/ser/TestNullProperties.java

+8-7
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import java.io.IOException;
44
import java.util.*;
55

6+
import com.fasterxml.jackson.annotation.JsonInclude;
67
import com.fasterxml.jackson.databind.*;
78
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
89

@@ -26,16 +27,16 @@ static class SimpleBean
2627
public String getB() { return null; }
2728
}
2829

29-
@JsonSerialize(include=JsonSerialize.Inclusion.ALWAYS) // just to ensure default
30+
@JsonInclude(JsonInclude.Include.ALWAYS) // just to ensure default
3031
static class NoNullsBean
3132
{
32-
@JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL)
33+
@JsonInclude(JsonInclude.Include.NON_NULL)
3334
public String getA() { return null; }
3435

3536
public String getB() { return null; }
3637
}
3738

38-
@JsonSerialize(include=JsonSerialize.Inclusion.NON_DEFAULT)
39+
@JsonInclude(JsonInclude.Include.NON_DEFAULT)
3940
static class NonDefaultBean
4041
{
4142
String _a = "a", _b = "b";
@@ -52,20 +53,20 @@ static class MixedBean
5253

5354
MixedBean() { }
5455

55-
@JsonSerialize(include=JsonSerialize.Inclusion.NON_DEFAULT)
56+
@JsonInclude(JsonInclude.Include.NON_DEFAULT)
5657
public String getA() { return _a; }
5758

58-
@JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL)
59+
@JsonInclude(JsonInclude.Include.NON_NULL)
5960
public String getB() { return _b; }
6061
}
6162

6263
// to ensure that default values work for collections as well
6364
static class ListBean {
64-
@JsonSerialize(include=JsonSerialize.Inclusion.NON_DEFAULT)
65+
@JsonInclude(JsonInclude.Include.NON_DEFAULT)
6566
public List<String> strings = new ArrayList<String>();
6667
}
6768

68-
@JsonSerialize(include=JsonSerialize.Inclusion.NON_DEFAULT)
69+
@JsonInclude(JsonInclude.Include.NON_DEFAULT)
6970
static class ArrayBean {
7071
public int[] ints = new int[] { 1, 2 };
7172
}

0 commit comments

Comments
 (0)