Skip to content

Commit c080eff

Browse files
authored
Upgrade Jackson to 2.12 (Azure#18884)
Upgrade Jackson to 2.12
1 parent a9ed341 commit c080eff

File tree

28 files changed

+153
-74
lines changed

28 files changed

+153
-74
lines changed

common/perf-test-core/pom.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@
5252
<bannedDependencies>
5353
<includes>
5454
<include>com.azure:*</include>
55-
<include>com.fasterxml.jackson.core:jackson-databind:[2.11.3]</include> <!-- {x-include-update;com.fasterxml.jackson.core:jackson-databind;external_dependency} -->
55+
<include>com.fasterxml.jackson.core:jackson-databind:[2.12.1]</include> <!-- {x-include-update;com.fasterxml.jackson.core:jackson-databind;external_dependency} -->
5656

5757
<!-- special allowance for perf-test-core as it is not a shipping library: -->
5858
<include>com.beust:jcommander:[1.78]</include> <!-- {x-include-update;com.beust:jcommander;external_dependency} -->
@@ -68,7 +68,7 @@
6868
<dependency>
6969
<groupId>com.fasterxml.jackson.core</groupId>
7070
<artifactId>jackson-databind</artifactId>
71-
<version>2.11.3</version> <!-- {x-version-update;com.fasterxml.jackson.core:jackson-databind;external_dependency} -->
71+
<version>2.12.1</version> <!-- {x-version-update;com.fasterxml.jackson.core:jackson-databind;external_dependency} -->
7272
</dependency>
7373
<dependency>
7474
<groupId>com.beust</groupId>

eng/versioning/external_dependencies.txt

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,14 @@
77

88
# Format;
99
# groupId:artifactId;dependency-version
10-
com.fasterxml.jackson.core:jackson-annotations;2.11.3
11-
com.fasterxml.jackson.core:jackson-core;2.11.3
12-
com.fasterxml.jackson.core:jackson-databind;2.11.3
13-
com.fasterxml.jackson.dataformat:jackson-dataformat-avro;2.11.3
14-
com.fasterxml.jackson.dataformat:jackson-dataformat-xml;2.11.3
15-
com.fasterxml.jackson.datatype:jackson-datatype-jdk8;2.11.3
16-
com.fasterxml.jackson.datatype:jackson-datatype-jsr310;2.11.3
17-
com.fasterxml.jackson.module:jackson-module-parameter-names;2.11.3
10+
com.fasterxml.jackson.core:jackson-annotations;2.12.1
11+
com.fasterxml.jackson.core:jackson-core;2.12.1
12+
com.fasterxml.jackson.core:jackson-databind;2.12.1
13+
com.fasterxml.jackson.dataformat:jackson-dataformat-avro;2.12.1
14+
com.fasterxml.jackson.dataformat:jackson-dataformat-xml;2.12.1
15+
com.fasterxml.jackson.datatype:jackson-datatype-jdk8;2.12.1
16+
com.fasterxml.jackson.datatype:jackson-datatype-jsr310;2.12.1
17+
com.fasterxml.jackson.module:jackson-module-parameter-names;2.12.1
1818
com.github.spotbugs:spotbugs;4.2.0
1919
com.github.spotbugs:spotbugs-annotations;4.2.0
2020
com.github.spotbugs:spotbugs-maven-plugin;4.2.0
@@ -281,7 +281,7 @@ org.revapi:revapi-maven-plugin;0.11.2
281281
test_jar_com.microsoft.azure:azure-mgmt-resources;1.3.1-SNAPSHOT
282282

283283
# everything under sdk\cosmos
284-
cosmos_com.fasterxml.jackson.module:jackson-module-afterburner;2.11.2
284+
cosmos_com.fasterxml.jackson.module:jackson-module-afterburner;2.12.1
285285
cosmos_com.google.guava:guava;25.0-jre
286286
cosmos_io.dropwizard.metrics:metrics-core;4.1.0
287287
cosmos_io.dropwizard.metrics:metrics-graphite;4.1.0

sdk/batch/microsoft-azure-batch/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@
7171
<dependency>
7272
<groupId>com.fasterxml.jackson.core</groupId>
7373
<artifactId>jackson-core</artifactId>
74-
<version>2.11.3</version> <!-- {x-version-update;com.fasterxml.jackson.core:jackson-core;external_dependency} -->
74+
<version>2.12.1</version> <!-- {x-version-update;com.fasterxml.jackson.core:jackson-core;external_dependency} -->
7575
<scope>test</scope>
7676
</dependency>
7777

sdk/core/azure-core-serializer-avro-jackson/pom.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@
6969
<dependency>
7070
<groupId>com.fasterxml.jackson.dataformat</groupId>
7171
<artifactId>jackson-dataformat-avro</artifactId>
72-
<version>2.11.3</version> <!-- {x-version-update;com.fasterxml.jackson.dataformat:jackson-dataformat-avro;external_dependency} -->
72+
<version>2.12.1</version> <!-- {x-version-update;com.fasterxml.jackson.dataformat:jackson-dataformat-avro;external_dependency} -->
7373
</dependency>
7474

7575
<dependency>
@@ -108,7 +108,7 @@
108108
<rules>
109109
<bannedDependencies>
110110
<includes>
111-
<include>com.fasterxml.jackson.dataformat:jackson-dataformat-avro:[2.11.3]</include> <!-- {x-include-update;com.fasterxml.jackson.dataformat:jackson-dataformat-avro;external_dependency} -->
111+
<include>com.fasterxml.jackson.dataformat:jackson-dataformat-avro:[2.12.1]</include> <!-- {x-include-update;com.fasterxml.jackson.dataformat:jackson-dataformat-avro;external_dependency} -->
112112
</includes>
113113
</bannedDependencies>
114114
</rules>

sdk/core/azure-core-serializer-json-jackson/src/main/java/com/azure/core/serializer/json/jackson/JacksonJsonSerializer.java

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,13 @@
1212
import com.fasterxml.jackson.annotation.JsonIgnore;
1313
import com.fasterxml.jackson.annotation.JsonProperty;
1414
import com.fasterxml.jackson.databind.ObjectMapper;
15+
import com.fasterxml.jackson.databind.cfg.MapperConfig;
16+
import com.fasterxml.jackson.databind.introspect.AccessorNamingStrategy;
17+
import com.fasterxml.jackson.databind.introspect.AnnotatedClass;
18+
import com.fasterxml.jackson.databind.introspect.AnnotatedClassResolver;
1519
import com.fasterxml.jackson.databind.introspect.AnnotatedMethod;
1620
import com.fasterxml.jackson.databind.introspect.VisibilityChecker;
1721
import com.fasterxml.jackson.databind.type.TypeFactory;
18-
import com.fasterxml.jackson.databind.util.BeanUtil;
1922
import reactor.core.publisher.Mono;
2023

2124
import java.io.IOException;
@@ -155,7 +158,19 @@ private static boolean verifyGetter(Method method) {
155158
&& returnType != Void.class;
156159
}
157160

158-
private static String removePrefix(Method method) {
159-
return BeanUtil.okNameForGetter(new AnnotatedMethod(null, method, null, null), false);
161+
private String removePrefix(Method method) {
162+
MapperConfig<?> config = mapper.getSerializationConfig();
163+
164+
AnnotatedClass annotatedClass = AnnotatedClassResolver.resolve(config,
165+
mapper.constructType(method.getDeclaringClass()), null);
166+
AccessorNamingStrategy accessorNamingStrategy = config.getAccessorNaming().forPOJO(config, annotatedClass);
167+
168+
AnnotatedMethod annotatedMethod = new AnnotatedMethod(null, method, null, null);
169+
String name = accessorNamingStrategy.findNameForIsGetter(annotatedMethod, annotatedMethod.getName());
170+
if (name == null) {
171+
name = accessorNamingStrategy.findNameForRegularGetter(annotatedMethod, annotatedMethod.getName());
172+
}
173+
174+
return name;
160175
}
161176
}

sdk/core/azure-core-test/src/test/java/com/azure/core/test/RestProxyTestsWireMockServer.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,8 @@
4141
import static com.github.tomakehurst.wiremock.client.WireMock.urlPathMatching;
4242

4343
public final class RestProxyTestsWireMockServer {
44+
private static final JacksonAdapter JACKSON_ADAPTER = new JacksonAdapter();
45+
4446
public static WireMockServer getRestProxyTestsServer() {
4547
WireMockServer server = new WireMockServer(WireMockConfiguration.options()
4648
.extensions(new RestProxyResponseTransformer())
@@ -124,7 +126,7 @@ private static ResponseDefinition createSimpleHttpBinResponse(Request request, U
124126

125127
return new ResponseDefinitionBuilder().withStatus(200)
126128
.withHeaders(toWireMockHeaders(getBaseHttpHeaders()))
127-
.withBody(new JacksonAdapter().serialize(responseBody, SerializerEncoding.JSON))
129+
.withBody(JACKSON_ADAPTER.serialize(responseBody, SerializerEncoding.JSON))
128130
.build();
129131
}
130132

@@ -166,7 +168,7 @@ private static ResponseDefinition createFormResponse(Request request) throws IOE
166168

167169
return new ResponseDefinitionBuilder()
168170
.withStatus(200)
169-
.withBody(new JacksonAdapter().serialize(formBody, SerializerEncoding.JSON))
171+
.withBody(JACKSON_ADAPTER.serialize(formBody, SerializerEncoding.JSON))
170172
.build();
171173
}
172174

sdk/core/azure-core/pom.xml

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -55,15 +55,30 @@
5555
</developers>
5656

5757
<dependencies>
58+
<dependency>
59+
<groupId>com.fasterxml.jackson.core</groupId>
60+
<artifactId>jackson-annotations</artifactId>
61+
<version>2.12.1</version> <!-- {x-version-update;com.fasterxml.jackson.core:jackson-annotations;external_dependency} -->
62+
</dependency>
63+
<dependency>
64+
<groupId>com.fasterxml.jackson.core</groupId>
65+
<artifactId>jackson-core</artifactId>
66+
<version>2.12.1</version> <!-- {x-version-update;com.fasterxml.jackson.core:jackson-core;external_dependency} -->
67+
</dependency>
68+
<dependency>
69+
<groupId>com.fasterxml.jackson.core</groupId>
70+
<artifactId>jackson-databind</artifactId>
71+
<version>2.12.1</version> <!-- {x-version-update;com.fasterxml.jackson.core:jackson-databind;external_dependency} -->
72+
</dependency>
5873
<dependency>
5974
<groupId>com.fasterxml.jackson.datatype</groupId>
6075
<artifactId>jackson-datatype-jsr310</artifactId>
61-
<version>2.11.3</version> <!-- {x-version-update;com.fasterxml.jackson.datatype:jackson-datatype-jsr310;external_dependency} -->
76+
<version>2.12.1</version> <!-- {x-version-update;com.fasterxml.jackson.datatype:jackson-datatype-jsr310;external_dependency} -->
6277
</dependency>
6378
<dependency>
6479
<groupId>com.fasterxml.jackson.dataformat</groupId>
6580
<artifactId>jackson-dataformat-xml</artifactId>
66-
<version>2.11.3</version> <!-- {x-version-update;com.fasterxml.jackson.dataformat:jackson-dataformat-xml;external_dependency} -->
81+
<version>2.12.1</version> <!-- {x-version-update;com.fasterxml.jackson.dataformat:jackson-dataformat-xml;external_dependency} -->
6782
</dependency>
6883
<dependency>
6984
<groupId>org.slf4j</groupId>
@@ -175,10 +190,11 @@
175190
<includes>
176191
<include>io.netty:netty-tcnative-boringssl-static:[2.0.35.Final]</include> <!-- {x-include-update;io.netty:netty-tcnative-boringssl-static;external_dependency} -->
177192
<include>io.projectreactor:reactor-core:[3.3.12.RELEASE]</include> <!-- {x-include-update;io.projectreactor:reactor-core;external_dependency} -->
178-
<include>com.fasterxml.jackson.dataformat:jackson-dataformat-xml:[2.11.3]
179-
</include> <!-- {x-include-update;com.fasterxml.jackson.dataformat:jackson-dataformat-xml;external_dependency} -->
180-
<include>com.fasterxml.jackson.datatype:jackson-datatype-jsr310:[2.11.3]
181-
</include> <!-- {x-include-update;com.fasterxml.jackson.datatype:jackson-datatype-jsr310;external_dependency} -->
193+
<include>com.fasterxml.jackson.core:jackson-annotations:[2.12.1]</include> <!-- {x-include-update;com.fasterxml.jackson.core:jackson-annotations;external_dependency} -->
194+
<include>com.fasterxml.jackson.core:jackson-core:[2.12.1]</include> <!-- {x-include-update;com.fasterxml.jackson.core:jackson-core;external_dependency} -->
195+
<include>com.fasterxml.jackson.core:jackson-databind:[2.12.1]</include> <!-- {x-include-update;com.fasterxml.jackson.core:jackson-databind;external_dependency} -->
196+
<include>com.fasterxml.jackson.dataformat:jackson-dataformat-xml:[2.12.1]</include> <!-- {x-include-update;com.fasterxml.jackson.dataformat:jackson-dataformat-xml;external_dependency} -->
197+
<include>com.fasterxml.jackson.datatype:jackson-datatype-jsr310:[2.12.1]</include> <!-- {x-include-update;com.fasterxml.jackson.datatype:jackson-datatype-jsr310;external_dependency} -->
182198
<include>org.slf4j:slf4j-api:[1.7.30]</include> <!-- {x-include-update;org.slf4j:slf4j-api;external_dependency} -->
183199
</includes>
184200
</bannedDependencies>

sdk/core/azure-core/src/main/java/com/azure/core/implementation/serializer/HttpResponseHeaderDecoder.java

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,27 +15,28 @@
1515
* Decoder to decode header of HTTP response.
1616
*/
1717
final class HttpResponseHeaderDecoder {
18+
private static final String MALFORMED_HEADERS_MESSAGE = "HTTP response has malformed headers";
19+
1820
/**
1921
* Decode headers of the http response.
2022
*
2123
* The decoding happens when caller subscribed to the returned {@code Mono<Object>}, if the response header is not
2224
* decodable then {@code Mono.empty()} will be returned.
2325
*
24-
* @param httpResponse the response containing the headers to be decoded
26+
* @param response the response containing the headers to be decoded
2527
* @param serializer the adapter to use for decoding
2628
* @param decodeData the necessary data required to decode a Http response
2729
* @return publisher that emits decoded response header upon subscription if header is decodable, no emission if the
2830
* header is not-decodable
2931
*/
30-
static Mono<Object> decode(HttpResponse httpResponse, SerializerAdapter serializer,
32+
static Mono<Object> decode(HttpResponse response, SerializerAdapter serializer,
3133
HttpResponseDecodeData decodeData) {
3234
Type headerType = decodeData.getHeadersType();
3335
if (headerType == null) {
3436
return Mono.empty();
3537
} else {
36-
return Mono.fromCallable(() -> serializer.deserialize(httpResponse.getHeaders(), headerType))
37-
.onErrorMap(IOException.class, e -> new HttpResponseException("HTTP response has malformed headers",
38-
httpResponse, e));
38+
return Mono.fromCallable(() -> serializer.deserialize(response.getHeaders(), headerType))
39+
.onErrorMap(IOException.class, e -> new HttpResponseException(MALFORMED_HEADERS_MESSAGE, response, e));
3940
}
4041
}
4142
}

sdk/core/azure-core/src/main/java/com/azure/core/models/JsonPatchDocumentSerializer.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ public void serialize(JsonPatchDocument value, JsonGenerator gen, SerializerProv
3939
return;
4040
}
4141

42-
gen.writeStartArray(operations.size());
42+
gen.writeStartArray();
4343

4444
for (JsonPatchOperation operation : operations) {
4545
gen.writeObject(operation);

sdk/core/azure-core/src/main/java/com/azure/core/util/serializer/JacksonAdapter.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@
2020
import com.fasterxml.jackson.databind.MapperFeature;
2121
import com.fasterxml.jackson.databind.ObjectMapper;
2222
import com.fasterxml.jackson.databind.SerializationFeature;
23+
import com.fasterxml.jackson.databind.cfg.CoercionAction;
24+
import com.fasterxml.jackson.databind.cfg.CoercionInputShape;
2325
import com.fasterxml.jackson.databind.cfg.MapperBuilder;
2426
import com.fasterxml.jackson.databind.json.JsonMapper;
2527
import com.fasterxml.jackson.dataformat.xml.XmlMapper;
@@ -101,6 +103,9 @@ public JacksonAdapter() {
101103
.enable(FromXmlParser.Feature.EMPTY_ELEMENT_AS_NULL)
102104
.build();
103105

106+
this.xmlMapper.coercionConfigDefaults()
107+
.setCoercion(CoercionInputShape.EmptyString, CoercionAction.AsNull);
108+
104109
ObjectMapper flatteningMapper = initializeMapperBuilder(JsonMapper.builder())
105110
.addModule(FlatteningSerializer.getModule(simpleMapper()))
106111
.addModule(FlatteningDeserializer.getModule(simpleMapper()))

0 commit comments

Comments
 (0)