Skip to content

Commit a8d6456

Browse files
committed
feat: migrate to jackson 3
Signed-off-by: Vasily Pelikh <2010720+vpelikh@users.noreply.github.com>
1 parent 20b36a9 commit a8d6456

125 files changed

Lines changed: 828 additions & 809 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ You need the following installed and available in your $PATH:
142142

143143
* Java 17
144144
* Apache maven 3.0.4 or greater
145-
* Jackson 2.4.5 or greater
145+
* Jackson 3.0.3 or greater
146146

147147

148148
### To build from source (currently 2.2.53-SNAPSHOT)

modules/swagger-core/pom.xml

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -69,16 +69,14 @@
6969
<artifactId>jackson-annotations</artifactId>
7070
</dependency>
7171
<dependency>
72-
<groupId>com.fasterxml.jackson.core</groupId>
72+
<groupId>tools.jackson.core</groupId>
7373
<artifactId>jackson-databind</artifactId>
74+
<version>${jackson-version}</version>
7475
</dependency>
7576
<dependency>
76-
<groupId>com.fasterxml.jackson.dataformat</groupId>
77+
<groupId>tools.jackson.dataformat</groupId>
7778
<artifactId>jackson-dataformat-yaml</artifactId>
78-
</dependency>
79-
<dependency>
80-
<groupId>com.fasterxml.jackson.datatype</groupId>
81-
<artifactId>jackson-datatype-jsr310</artifactId>
79+
<version>${jackson-version}</version>
8280
</dependency>
8381
<dependency>
8482
<groupId>io.swagger.core.v3</groupId>

modules/swagger-core/src/main/java/io/swagger/v3/core/converter/ModelConverters.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package io.swagger.v3.core.converter;
22

3-
import com.fasterxml.jackson.databind.type.TypeFactory;
3+
import tools.jackson.databind.type.TypeFactory;
44
import io.swagger.v3.core.jackson.ModelResolver;
55
import io.swagger.v3.core.util.Configuration;
66
import io.swagger.v3.core.util.Json;
@@ -233,7 +233,7 @@ public boolean isRegisteredAsSkippedClass(String className) {
233233
}
234234

235235
private boolean shouldProcess(Type type) {
236-
final Class<?> cls = TypeFactory.defaultInstance().constructType(type).getRawClass();
236+
final Class<?> cls = TypeFactory.createDefaultInstance().constructType(type).getRawClass();
237237
if (cls.isPrimitive()) {
238238
return false;
239239
}

modules/swagger-core/src/main/java/io/swagger/v3/core/filter/SpecFilter.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import io.swagger.v3.oas.models.responses.ApiResponses;
2222
import io.swagger.v3.oas.models.tags.Tag;
2323
import org.apache.commons.lang3.StringUtils;
24+
import tools.jackson.core.JacksonException;
2425

2526
import java.io.IOException;
2627
import java.util.ArrayList;
@@ -290,7 +291,7 @@ protected Map<String, Schema> filterComponentsSchema(OpenAPISpecFilter filter, M
290291
}
291292
clonedComponentsSchema.put(key, clonedModel);
292293

293-
} catch (IOException e) {
294+
} catch (JacksonException e) {
294295
}
295296
}
296297
}

modules/swagger-core/src/main/java/io/swagger/v3/core/jackson/AbstractModelConverter.java

Lines changed: 21 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,17 @@
11
package io.swagger.v3.core.jackson;
22

3-
import com.fasterxml.jackson.core.Version;
4-
import com.fasterxml.jackson.databind.AnnotationIntrospector;
5-
import com.fasterxml.jackson.databind.BeanDescription;
6-
import com.fasterxml.jackson.databind.JavaType;
7-
import com.fasterxml.jackson.databind.ObjectMapper;
8-
import com.fasterxml.jackson.databind.PropertyName;
9-
import com.fasterxml.jackson.databind.jsontype.NamedType;
10-
import com.fasterxml.jackson.databind.module.SimpleModule;
3+
import tools.jackson.core.Version;
4+
import tools.jackson.databind.AnnotationIntrospector;
5+
import tools.jackson.databind.BeanDescription;
6+
import tools.jackson.databind.JavaType;
7+
import tools.jackson.databind.ObjectMapper;
8+
import tools.jackson.databind.PropertyName;
9+
import tools.jackson.databind.cfg.MapperBuilder;
10+
import tools.jackson.databind.introspect.AccessorNamingStrategy;
11+
import tools.jackson.databind.introspect.BasicBeanDescription;
12+
import tools.jackson.databind.introspect.DefaultAccessorNamingStrategy;
13+
import tools.jackson.databind.jsontype.NamedType;
14+
import tools.jackson.databind.module.SimpleModule;
1115
import io.swagger.v3.core.converter.AnnotatedType;
1216
import io.swagger.v3.core.converter.ModelConverter;
1317
import io.swagger.v3.core.converter.ModelConverterContext;
@@ -33,14 +37,16 @@ protected AbstractModelConverter(ObjectMapper mapper) {
3337
}
3438

3539
protected AbstractModelConverter(ObjectMapper mapper, TypeNameResolver typeNameResolver) {
36-
mapper.registerModule(
37-
new SimpleModule("swagger", Version.unknownVersion()) {
40+
_mapper = mapper.rebuild()
41+
.addModule(new SimpleModule("swagger", Version.unknownVersion()) {
3842
@Override
3943
public void setupModule(SetupContext context) {
4044
context.insertAnnotationIntrospector(new SwaggerAnnotationIntrospector());
4145
}
42-
});
43-
_mapper = mapper;
46+
})
47+
.accessorNaming(new DefaultAccessorNamingStrategy.Provider()
48+
.withFirstCharAcceptance(true, true))
49+
.build();
4450
_typeNameResolver = typeNameResolver;
4551
}
4652

@@ -61,7 +67,7 @@ public Schema resolve(AnnotatedType type, ModelConverterContext context, Iterato
6167
* @return the current AnnotationIntrospector
6268
*/
6369
protected AnnotationIntrospector _intr() {
64-
return _mapper.getSerializationConfig().getAnnotationIntrospector();
70+
return _mapper.serializationConfig().getAnnotationIntrospector();
6571
}
6672

6773
protected String _typeName(JavaType type) {
@@ -95,10 +101,10 @@ protected String _findTypeName(JavaType type, BeanDescription beanDesc) {
95101
return "List";
96102
}
97103
if (beanDesc == null) {
98-
beanDesc = _mapper.getSerializationConfig().introspectClassAnnotations(type);
104+
beanDesc = _mapper._serializationContext().introspectBeanDescription(type);
99105
}
100106

101-
PropertyName rootName = _intr().findRootName(beanDesc.getClassInfo());
107+
PropertyName rootName = _intr().findRootName(_mapper.serializationConfig(), beanDesc.getClassInfo());
102108
if (rootName != null && rootName.hasSimpleName()) {
103109
return rootName.getSimpleName();
104110
}
Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,37 @@
11
package io.swagger.v3.core.jackson;
22

3-
import com.fasterxml.jackson.core.JsonGenerator;
4-
import com.fasterxml.jackson.databind.JsonSerializer;
5-
import com.fasterxml.jackson.databind.SerializerProvider;
3+
import tools.jackson.core.JacksonException;
4+
import tools.jackson.core.JsonGenerator;
65

76
import io.swagger.v3.oas.models.responses.ApiResponses;
7+
import tools.jackson.databind.SerializationContext;
8+
import tools.jackson.databind.ValueSerializer;
89

910
import java.io.IOException;
1011
import java.util.Map;
1112
import java.util.Map.Entry;
1213

13-
public class ApiResponsesSerializer extends JsonSerializer<ApiResponses> {
14+
public class ApiResponsesSerializer extends ValueSerializer<ApiResponses> {
1415

1516
@Override
1617
public void serialize(
17-
ApiResponses value, JsonGenerator jgen, SerializerProvider provider)
18-
throws IOException {
18+
ApiResponses value, JsonGenerator jgen, SerializationContext provider)
19+
throws JacksonException {
1920

2021
if (value != null && value.getExtensions() != null && !value.getExtensions().isEmpty()) {
2122
jgen.writeStartObject();
2223

2324
if (!value.isEmpty()) {
2425
for (Entry<String, io.swagger.v3.oas.models.responses.ApiResponse> entry: value.entrySet()) {
25-
jgen.writeObjectField(entry.getKey() , entry.getValue());
26+
jgen.writePOJOProperty(entry.getKey() , entry.getValue());
2627
}
2728
}
2829
for (Map.Entry<String, Object> entry: value.getExtensions().entrySet()) {
29-
jgen.writeObjectField(entry.getKey(), entry.getValue());
30+
jgen.writePOJOProperty(entry.getKey(), entry.getValue());
3031
}
3132
jgen.writeEndObject();
3233
} else {
33-
provider.defaultSerializeValue(value, jgen);
34+
jgen.writePOJO(value);
3435
}
3536
}
3637
}

modules/swagger-core/src/main/java/io/swagger/v3/core/jackson/CallbackSerializer.java

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,23 @@
11
package io.swagger.v3.core.jackson;
22

3-
import com.fasterxml.jackson.core.JsonGenerator;
4-
import com.fasterxml.jackson.databind.JsonSerializer;
5-
import com.fasterxml.jackson.databind.SerializerProvider;
3+
import tools.jackson.core.JacksonException;
4+
import tools.jackson.core.JsonGenerator;
65

76
import io.swagger.v3.oas.models.PathItem;
87
import io.swagger.v3.oas.models.callbacks.Callback;
98
import org.apache.commons.lang3.StringUtils;
9+
import tools.jackson.databind.SerializationContext;
10+
import tools.jackson.databind.ValueSerializer;
1011

1112
import java.io.IOException;
1213
import java.util.Map.Entry;
1314

14-
public class CallbackSerializer extends JsonSerializer<Callback> {
15+
public class CallbackSerializer extends ValueSerializer<Callback> {
1516

1617
@Override
1718
public void serialize(
18-
Callback value, JsonGenerator jgen, SerializerProvider provider)
19-
throws IOException {
19+
Callback value, JsonGenerator jgen, SerializationContext provider)
20+
throws JacksonException {
2021

2122
// has extensions
2223
if (value != null && value.getExtensions() != null && !value.getExtensions().isEmpty()) {
@@ -27,22 +28,22 @@ public void serialize(
2728
if (!value.isEmpty()) {
2829
// write map
2930
for (Entry<String, PathItem> entry: value.entrySet()) {
30-
jgen.writeObjectField(entry.getKey() , entry.getValue());
31+
jgen.writePOJOProperty(entry.getKey() , entry.getValue());
3132
}
3233
}
3334
} else { // handle ref schema serialization skipping all other props ...
34-
jgen.writeStringField("$ref", value.get$ref());
35+
jgen.writeStringProperty("$ref", value.get$ref());
3536
}
3637
for (String ext: value.getExtensions().keySet()) {
37-
jgen.writeObjectField(ext , value.getExtensions().get(ext));
38+
jgen.writePOJOProperty(ext , value.getExtensions().get(ext));
3839
}
3940
jgen.writeEndObject();
4041
} else {
4142
if (value == null || StringUtils.isBlank(value.get$ref())) {
42-
provider.defaultSerializeValue(value, jgen);
43+
jgen.writePOJO(value);
4344
} else { // handle ref schema serialization skipping all other props
4445
jgen.writeStartObject();
45-
jgen.writeStringField("$ref", value.get$ref());
46+
jgen.writeStringProperty("$ref", value.get$ref());
4647
jgen.writeEndObject();
4748
}
4849
}

modules/swagger-core/src/main/java/io/swagger/v3/core/jackson/ExampleSerializer.java

Lines changed: 13 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,34 @@
11
package io.swagger.v3.core.jackson;
22

3-
import com.fasterxml.jackson.core.JsonGenerator;
4-
import com.fasterxml.jackson.databind.JsonMappingException;
5-
import com.fasterxml.jackson.databind.JsonSerializer;
6-
import com.fasterxml.jackson.databind.SerializerProvider;
7-
import com.fasterxml.jackson.databind.ser.ResolvableSerializer;
3+
import tools.jackson.core.JacksonException;
4+
import tools.jackson.core.JsonGenerator;
85
import io.swagger.v3.oas.models.examples.Example;
6+
import tools.jackson.databind.DatabindException;
7+
import tools.jackson.databind.SerializationContext;
8+
import tools.jackson.databind.ValueSerializer;
99

10-
import java.io.IOException;
10+
public class ExampleSerializer extends ValueSerializer<Example> {
1111

12-
public class ExampleSerializer extends JsonSerializer<Example> implements ResolvableSerializer {
12+
private ValueSerializer<Object> defaultSerializer;
1313

14-
private JsonSerializer<Object> defaultSerializer;
15-
16-
public ExampleSerializer(JsonSerializer<Object> serializer) {
14+
public ExampleSerializer(ValueSerializer<Object> serializer) {
1715
defaultSerializer = serializer;
1816
}
1917

2018
@Override
21-
public void resolve(SerializerProvider serializerProvider) throws JsonMappingException {
22-
if (defaultSerializer instanceof ResolvableSerializer) {
23-
((ResolvableSerializer) defaultSerializer).resolve(serializerProvider);
24-
}
19+
public void resolve(SerializationContext serializerProvider) throws DatabindException {
20+
defaultSerializer.resolve(serializerProvider);
2521
}
2622

2723
@Override
2824
public void serialize(
29-
Example example, JsonGenerator jgen, SerializerProvider provider)
30-
throws IOException {
25+
Example example, JsonGenerator jgen, SerializationContext provider)
26+
throws JacksonException {
3127

3228
if (example.getValueSetFlag() && example.getValue() == null) {
3329
jgen.writeStartObject();
3430
defaultSerializer.unwrappingSerializer(null).serialize(example, jgen, provider);
35-
jgen.writeNullField("value");
31+
jgen.writeNullProperty("value");
3632
jgen.writeEndObject();
3733
} else {
3834
defaultSerializer.serialize(example, jgen, provider);

modules/swagger-core/src/main/java/io/swagger/v3/core/jackson/JAXBAnnotationsHelper.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package io.swagger.v3.core.jackson;
22

3-
import com.fasterxml.jackson.databind.introspect.Annotated;
3+
import tools.jackson.databind.introspect.Annotated;
44
import io.swagger.v3.core.util.AnnotationsUtils;
55
import io.swagger.v3.oas.models.media.ArraySchema;
66
import io.swagger.v3.oas.models.media.MapSchema;

modules/swagger-core/src/main/java/io/swagger/v3/core/jackson/MediaTypeSerializer.java

Lines changed: 13 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,34 @@
11
package io.swagger.v3.core.jackson;
22

3-
import com.fasterxml.jackson.core.JsonGenerator;
4-
import com.fasterxml.jackson.databind.JsonMappingException;
5-
import com.fasterxml.jackson.databind.JsonSerializer;
6-
import com.fasterxml.jackson.databind.SerializerProvider;
7-
import com.fasterxml.jackson.databind.ser.ResolvableSerializer;
3+
import tools.jackson.core.JacksonException;
4+
import tools.jackson.core.JsonGenerator;
85
import io.swagger.v3.oas.models.media.MediaType;
6+
import tools.jackson.databind.DatabindException;
7+
import tools.jackson.databind.SerializationContext;
8+
import tools.jackson.databind.ValueSerializer;
99

10-
import java.io.IOException;
10+
public class MediaTypeSerializer extends ValueSerializer<MediaType> {
1111

12-
public class MediaTypeSerializer extends JsonSerializer<MediaType> implements ResolvableSerializer {
12+
private ValueSerializer<Object> defaultSerializer;
1313

14-
private JsonSerializer<Object> defaultSerializer;
15-
16-
public MediaTypeSerializer(JsonSerializer<Object> serializer) {
14+
public MediaTypeSerializer(ValueSerializer<Object> serializer) {
1715
defaultSerializer = serializer;
1816
}
1917

2018
@Override
21-
public void resolve(SerializerProvider serializerProvider) throws JsonMappingException {
22-
if (defaultSerializer instanceof ResolvableSerializer) {
23-
((ResolvableSerializer) defaultSerializer).resolve(serializerProvider);
24-
}
19+
public void resolve(SerializationContext serializerProvider) throws DatabindException {
20+
defaultSerializer.resolve(serializerProvider);
2521
}
2622

2723
@Override
2824
public void serialize(
29-
MediaType value, JsonGenerator jgen, SerializerProvider provider)
30-
throws IOException {
25+
MediaType value, JsonGenerator jgen, SerializationContext provider)
26+
throws JacksonException {
3127

3228
if (value.getExampleSetFlag() && value.getExample() == null) {
3329
jgen.writeStartObject();
3430
defaultSerializer.unwrappingSerializer(null).serialize(value, jgen, provider);
35-
jgen.writeNullField("example");
31+
jgen.writeNullProperty("example");
3632
jgen.writeEndObject();
3733
} else {
3834
defaultSerializer.serialize(value, jgen, provider);

0 commit comments

Comments
 (0)