Skip to content

Commit c305e13

Browse files
committed
Support for Jackson 3
1 parent 101a20d commit c305e13

18 files changed

Lines changed: 133 additions & 150 deletions

pom.xml

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -56,19 +56,14 @@
5656
<version>4.0.2</version>
5757
</dependency>
5858
<dependency>
59-
<groupId>com.fasterxml.jackson.core</groupId>
59+
<groupId>tools.jackson.core</groupId>
6060
<artifactId>jackson-databind</artifactId>
61-
<version>2.21.1</version>
62-
</dependency>
63-
<dependency>
64-
<groupId>com.fasterxml.jackson.datatype</groupId>
65-
<artifactId>jackson-datatype-jsr310</artifactId>
66-
<version>2.21.1</version>
61+
<version>3.0.0</version>
6762
</dependency>
6863
<dependency>
69-
<groupId>com.fasterxml.jackson.core</groupId>
64+
<groupId>tools.jackson.core</groupId>
7065
<artifactId>jackson-core</artifactId>
71-
<version>2.21.1</version>
66+
<version>3.0.0</version>
7267
</dependency>
7368
<dependency>
7469
<groupId>com.fasterxml.jackson.core</groupId>
@@ -82,9 +77,9 @@
8277
<scope>test</scope>
8378
</dependency>
8479
<dependency>
85-
<groupId>com.fasterxml.jackson.jr</groupId>
80+
<groupId>tools.jackson.jr</groupId>
8681
<artifactId>jackson-jr-objects</artifactId>
87-
<version>2.21.1</version>
82+
<version>3.0.0</version>
8883
<scope>test</scope>
8984
</dependency>
9085
<dependency>

src/main/java/com/maxmind/geoip2/InetAddressDeserializer.java

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
package com.maxmind.geoip2;
22

3-
import com.fasterxml.jackson.core.JsonParser;
4-
import com.fasterxml.jackson.databind.DeserializationContext;
5-
import com.fasterxml.jackson.databind.deser.std.StdDeserializer;
6-
import java.io.IOException;
3+
import tools.jackson.core.JacksonException;
4+
import tools.jackson.core.JsonParser;
5+
import tools.jackson.databind.DatabindException;
6+
import tools.jackson.databind.DeserializationContext;
7+
import tools.jackson.databind.deser.std.StdDeserializer;
78
import java.net.InetAddress;
89
import java.net.UnknownHostException;
910

@@ -20,15 +21,15 @@ public InetAddressDeserializer() {
2021

2122
@Override
2223
public InetAddress deserialize(JsonParser p, DeserializationContext ctxt)
23-
throws IOException {
24+
throws JacksonException {
2425
var value = p.getValueAsString();
2526
if (value == null || value.isEmpty()) {
2627
return null;
2728
}
2829
try {
2930
return InetAddress.getByName(value);
3031
} catch (UnknownHostException e) {
31-
throw new IOException("Invalid IP address: " + value, e);
32+
throw DatabindException.from(p, "Invalid IP address: " + value, e);
3233
}
3334
}
3435
}

src/main/java/com/maxmind/geoip2/InetAddressModule.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package com.maxmind.geoip2;
22

3-
import com.fasterxml.jackson.databind.module.SimpleModule;
3+
import tools.jackson.databind.module.SimpleModule;
44
import java.net.InetAddress;
55

66
/**

src/main/java/com/maxmind/geoip2/InetAddressSerializer.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
package com.maxmind.geoip2;
22

3-
import com.fasterxml.jackson.core.JsonGenerator;
4-
import com.fasterxml.jackson.databind.SerializerProvider;
5-
import com.fasterxml.jackson.databind.ser.std.StdSerializer;
6-
import java.io.IOException;
3+
import tools.jackson.core.JacksonException;
4+
import tools.jackson.core.JsonGenerator;
5+
import tools.jackson.databind.SerializationContext;
6+
import tools.jackson.databind.ser.std.StdSerializer;
77
import java.net.InetAddress;
88

99
/**
@@ -18,8 +18,8 @@ public InetAddressSerializer() {
1818
}
1919

2020
@Override
21-
public void serialize(InetAddress value, JsonGenerator gen, SerializerProvider provider)
22-
throws IOException {
21+
public void serialize(InetAddress value, JsonGenerator gen, SerializationContext provider)
22+
throws JacksonException {
2323
if (value == null) {
2424
gen.writeNull();
2525
} else {

src/main/java/com/maxmind/geoip2/JsonSerializable.java

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,8 @@
11
package com.maxmind.geoip2;
22

33
import com.fasterxml.jackson.annotation.JsonInclude;
4-
import com.fasterxml.jackson.databind.MapperFeature;
5-
import com.fasterxml.jackson.databind.SerializationFeature;
6-
import com.fasterxml.jackson.databind.json.JsonMapper;
7-
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
8-
import java.io.IOException;
4+
import tools.jackson.databind.DeserializationFeature;
5+
import tools.jackson.databind.json.JsonMapper;
96

107
/**
118
* Interface for classes that can be serialized to JSON.
@@ -16,16 +13,14 @@ public interface JsonSerializable {
1613
/**
1714
* @return JSON representation of this object. The structure is the same as
1815
* the JSON provided by the GeoIP2 web service.
19-
* @throws IOException if there is an error serializing the object to JSON.
2016
*/
21-
default String toJson() throws IOException {
17+
default String toJson() {
2218
JsonMapper mapper = JsonMapper.builder()
23-
.disable(MapperFeature.CAN_OVERRIDE_ACCESS_MODIFIERS)
24-
.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS)
25-
.addModule(new JavaTimeModule())
19+
.disable(DeserializationFeature.FAIL_ON_NULL_FOR_PRIMITIVES)
2620
.addModule(new InetAddressModule())
27-
.serializationInclusion(JsonInclude.Include.NON_NULL)
28-
.serializationInclusion(JsonInclude.Include.NON_EMPTY)
21+
.changeDefaultPropertyInclusion(
22+
value -> value.withValueInclusion(JsonInclude.Include.NON_NULL)
23+
.withValueInclusion(JsonInclude.Include.NON_EMPTY))
2924
.build();
3025

3126
return mapper.writeValueAsString(this);

src/main/java/com/maxmind/geoip2/NetworkDeserializer.java

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
package com.maxmind.geoip2;
22

3-
import com.fasterxml.jackson.core.JsonParser;
4-
import com.fasterxml.jackson.databind.DeserializationContext;
5-
import com.fasterxml.jackson.databind.deser.std.StdDeserializer;
3+
import tools.jackson.core.JacksonException;
4+
import tools.jackson.core.JsonParser;
5+
import tools.jackson.databind.DatabindException;
6+
import tools.jackson.databind.DeserializationContext;
7+
import tools.jackson.databind.deser.std.StdDeserializer;
68
import com.maxmind.db.Network;
7-
import java.io.IOException;
9+
810
import java.net.InetAddress;
911
import java.net.UnknownHostException;
1012

@@ -17,7 +19,7 @@ public final class NetworkDeserializer extends StdDeserializer<Network> {
1719
* Constructs a {@code NetworkDeserializer} with no type specified.
1820
*/
1921
public NetworkDeserializer() {
20-
this(null);
22+
this(Network.class);
2123
}
2224

2325
/**
@@ -31,16 +33,20 @@ public NetworkDeserializer(Class<?> vc) {
3133

3234
@Override
3335
public Network deserialize(JsonParser jsonparser, DeserializationContext context)
34-
throws IOException {
36+
throws JacksonException {
3537

3638
final var cidr = jsonparser.getValueAsString();
3739
if (cidr == null || cidr.isBlank()) {
3840
return null;
3941
}
40-
return parseCidr(cidr);
42+
try {
43+
return parseCidr(cidr);
44+
} catch (UnknownHostException e) {
45+
throw DatabindException.from(jsonparser, "Unknown host in CIDR: " + cidr, e);
46+
}
4147
}
4248

43-
private static Network parseCidr(String cidr) throws IOException {
49+
private static Network parseCidr(String cidr) throws UnknownHostException {
4450
final var parts = cidr.split("/", 2);
4551
if (parts.length != 2) {
4652
throw new IllegalArgumentException("Invalid CIDR format: " + cidr);
@@ -49,12 +55,7 @@ private static Network parseCidr(String cidr) throws IOException {
4955
final var addrPart = parts[0];
5056
final var prefixPart = parts[1];
5157

52-
final InetAddress address;
53-
try {
54-
address = InetAddress.getByName(addrPart);
55-
} catch (UnknownHostException e) {
56-
throw new IOException("Unknown host in CIDR: " + cidr, e);
57-
}
58+
final InetAddress address = InetAddress.getByName(addrPart);
5859

5960
final var prefixLength = parsePrefixLength(prefixPart, cidr);
6061

src/main/java/com/maxmind/geoip2/WebServiceClient.java

Lines changed: 9 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,11 @@
11
package com.maxmind.geoip2;
22

3-
import com.fasterxml.jackson.core.type.TypeReference;
4-
import com.fasterxml.jackson.databind.DeserializationFeature;
5-
import com.fasterxml.jackson.databind.InjectableValues;
6-
import com.fasterxml.jackson.databind.MapperFeature;
7-
import com.fasterxml.jackson.databind.ObjectMapper;
8-
import com.fasterxml.jackson.databind.SerializationFeature;
9-
import com.fasterxml.jackson.databind.json.JsonMapper;
10-
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
3+
import tools.jackson.core.JacksonException;
4+
import tools.jackson.core.type.TypeReference;
5+
import tools.jackson.databind.DeserializationFeature;
6+
import tools.jackson.databind.InjectableValues;
7+
import tools.jackson.databind.ObjectMapper;
8+
import tools.jackson.databind.json.JsonMapper;
119
import com.maxmind.geoip2.exception.AddressNotFoundException;
1210
import com.maxmind.geoip2.exception.AuthenticationException;
1311
import com.maxmind.geoip2.exception.GeoIp2Exception;
@@ -21,7 +19,6 @@
2119
import java.io.IOException;
2220
import java.io.InputStream;
2321
import java.net.InetAddress;
24-
import java.net.InetSocketAddress;
2522
import java.net.ProxySelector;
2623
import java.net.URI;
2724
import java.net.URISyntaxException;
@@ -133,10 +130,8 @@ private WebServiceClient(Builder builder) {
133130
(builder.accountId + ":" + builder.licenseKey).getBytes(StandardCharsets.UTF_8));
134131

135132
mapper = JsonMapper.builder()
136-
.disable(MapperFeature.CAN_OVERRIDE_ACCESS_MODIFIERS)
137133
.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES)
138-
.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS)
139-
.addModule(new JavaTimeModule())
134+
.disable(DeserializationFeature.FAIL_ON_NULL_FOR_PRIMITIVES)
140135
.build();
141136

142137
requestTimeout = builder.requestTimeout;
@@ -405,7 +400,7 @@ private <T> T handleResponse(HttpResponse<InputStream> response, Class<T> cls)
405400

406401
try {
407402
return mapper.readerFor(cls).with(inject).readValue(response.body());
408-
} catch (IOException e) {
403+
} catch (JacksonException e) {
409404
throw new GeoIp2Exception(
410405
"Received a 200 response but could not decode it as JSON", e);
411406
}
@@ -429,7 +424,7 @@ private void handle4xxStatus(HttpResponse<InputStream> response)
429424
handleErrorWithJsonBody(content, body, status, uri);
430425
} catch (HttpException e) {
431426
throw e;
432-
} catch (IOException e) {
427+
} catch (JacksonException e) {
433428
throw new HttpException("Received a " + status + " error for "
434429
+ uri + " but it did not include the expected JSON body: "
435430
+ body, status, uri);

src/main/java/com/maxmind/geoip2/model/AnonymousIpResponse.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
package com.maxmind.geoip2.model;
22

33
import com.fasterxml.jackson.annotation.JsonProperty;
4-
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
5-
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
6-
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
4+
import tools.jackson.databind.annotation.JsonDeserialize;
5+
import tools.jackson.databind.annotation.JsonSerialize;
6+
import tools.jackson.databind.ser.std.ToStringSerializer;
77
import com.maxmind.db.MaxMindDbIpAddress;
88
import com.maxmind.db.MaxMindDbNetwork;
99
import com.maxmind.db.MaxMindDbParameter;

src/main/java/com/maxmind/geoip2/model/AnonymousPlusResponse.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
package com.maxmind.geoip2.model;
22

33
import com.fasterxml.jackson.annotation.JsonProperty;
4-
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
5-
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
6-
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
4+
import tools.jackson.databind.annotation.JsonDeserialize;
5+
import tools.jackson.databind.annotation.JsonSerialize;
6+
import tools.jackson.databind.ser.std.ToStringSerializer;
77
import com.maxmind.db.MaxMindDbConstructor;
88
import com.maxmind.db.MaxMindDbIpAddress;
99
import com.maxmind.db.MaxMindDbNetwork;

src/main/java/com/maxmind/geoip2/model/AsnResponse.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
package com.maxmind.geoip2.model;
22

33
import com.fasterxml.jackson.annotation.JsonProperty;
4-
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
5-
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
6-
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
4+
import tools.jackson.databind.annotation.JsonDeserialize;
5+
import tools.jackson.databind.annotation.JsonSerialize;
6+
import tools.jackson.databind.ser.std.ToStringSerializer;
77
import com.maxmind.db.MaxMindDbIpAddress;
88
import com.maxmind.db.MaxMindDbNetwork;
99
import com.maxmind.db.MaxMindDbParameter;

0 commit comments

Comments
 (0)