Skip to content

Commit ea2f43a

Browse files
Removing the Jackson leak in HttpHeaders, instead registering a separate serializer directly with the JacksonAdapter. Tests that failed after functionality was removed from HttpHeaders now pass with the new HttpHeaderSerializer. (#4597)
1 parent 570632c commit ea2f43a

File tree

3 files changed

+38
-18
lines changed

3 files changed

+38
-18
lines changed

sdk/core/azure-core/src/main/java/com/azure/core/http/HttpHeaders.java

Lines changed: 1 addition & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,6 @@
33

44
package com.azure.core.http;
55

6-
import com.fasterxml.jackson.core.JsonGenerator;
7-
import com.fasterxml.jackson.databind.JsonSerializable;
8-
import com.fasterxml.jackson.databind.SerializerProvider;
9-
import com.fasterxml.jackson.databind.jsontype.TypeSerializer;
10-
11-
import java.io.IOException;
126
import java.util.HashMap;
137
import java.util.Iterator;
148
import java.util.Locale;
@@ -17,7 +11,7 @@
1711
/**
1812
* A collection of headers on an HTTP request or response.
1913
*/
20-
public class HttpHeaders implements Iterable<HttpHeader>, JsonSerializable {
14+
public class HttpHeaders implements Iterable<HttpHeader> {
2115
private final Map<String, HttpHeader> headers = new HashMap<>();
2216

2317
/**
@@ -128,14 +122,4 @@ public Map<String, String> toMap() {
128122
public Iterator<HttpHeader> iterator() {
129123
return headers.values().iterator();
130124
}
131-
132-
@Override
133-
public void serialize(JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
134-
jsonGenerator.writeObject(toMap());
135-
}
136-
137-
@Override
138-
public void serializeWithType(JsonGenerator jsonGenerator, SerializerProvider serializerProvider, TypeSerializer typeSerializer) throws IOException {
139-
serialize(jsonGenerator, serializerProvider);
140-
}
141125
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
// Copyright (c) Microsoft Corporation. All rights reserved.
2+
// Licensed under the MIT License.
3+
4+
package com.azure.core.implementation.serializer.jackson;
5+
6+
import com.azure.core.http.HttpHeaders;
7+
import com.fasterxml.jackson.core.JsonGenerator;
8+
import com.fasterxml.jackson.databind.JsonSerializer;
9+
import com.fasterxml.jackson.databind.SerializerProvider;
10+
import com.fasterxml.jackson.databind.jsontype.TypeSerializer;
11+
import com.fasterxml.jackson.databind.module.SimpleModule;
12+
13+
import java.io.IOException;
14+
15+
/**
16+
* Custom serializer for serializing {@code HttpHeaders} objects into Base64 strings.
17+
*/
18+
final class HttpHeadersSerializer extends JsonSerializer<HttpHeaders> {
19+
/**
20+
* Gets a module wrapping this serializer as an adapter for the Jackson
21+
* ObjectMapper.
22+
*
23+
* @return a simple module to be plugged onto Jackson ObjectMapper.
24+
*/
25+
public static SimpleModule getModule() {
26+
SimpleModule module = new SimpleModule();
27+
module.addSerializer(HttpHeaders.class, new HttpHeadersSerializer());
28+
return module;
29+
}
30+
31+
@Override
32+
public void serialize(HttpHeaders value, JsonGenerator jgen, SerializerProvider provider) throws IOException {
33+
jgen.writeObject(value.toMap());
34+
}
35+
}

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,8 @@ private static <T extends ObjectMapper> T initializeObjectMapper(T mapper) {
170170
.registerModule(Base64UrlSerializer.getModule())
171171
.registerModule(DateTimeSerializer.getModule())
172172
.registerModule(DateTimeRfc1123Serializer.getModule())
173-
.registerModule(DurationSerializer.getModule());
173+
.registerModule(DurationSerializer.getModule())
174+
.registerModule(HttpHeadersSerializer.getModule());
174175
mapper.setVisibility(mapper.getSerializationConfig().getDefaultVisibilityChecker()
175176
.withFieldVisibility(JsonAutoDetect.Visibility.ANY)
176177
.withSetterVisibility(JsonAutoDetect.Visibility.NONE)

0 commit comments

Comments
 (0)