Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 6 additions & 11 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -56,19 +56,14 @@
<version>4.0.2</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<groupId>tools.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.21.1</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
<version>2.21.1</version>
<version>3.0.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<groupId>tools.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.21.1</version>
<version>3.0.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
Expand All @@ -82,9 +77,9 @@
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.jr</groupId>
<groupId>tools.jackson.jr</groupId>
<artifactId>jackson-jr-objects</artifactId>
<version>2.21.1</version>
<version>3.0.0</version>
<scope>test</scope>
</dependency>
<dependency>
Expand Down
13 changes: 7 additions & 6 deletions src/main/java/com/maxmind/geoip2/InetAddressDeserializer.java
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
package com.maxmind.geoip2;

import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.deser.std.StdDeserializer;
import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;
import tools.jackson.core.JacksonException;
import tools.jackson.core.JsonParser;
import tools.jackson.databind.DatabindException;
import tools.jackson.databind.DeserializationContext;
import tools.jackson.databind.deser.std.StdDeserializer;

/**
* Deserializes a string to an InetAddress.
Expand All @@ -20,15 +21,15 @@ public InetAddressDeserializer() {

@Override
public InetAddress deserialize(JsonParser p, DeserializationContext ctxt)
throws IOException {
throws JacksonException {
var value = p.getValueAsString();
if (value == null || value.isEmpty()) {
return null;
}
try {
return InetAddress.getByName(value);
} catch (UnknownHostException e) {
throw new IOException("Invalid IP address: " + value, e);
throw DatabindException.from(p, "Invalid IP address: " + value, e);
}
}
}
2 changes: 1 addition & 1 deletion src/main/java/com/maxmind/geoip2/InetAddressModule.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package com.maxmind.geoip2;

import com.fasterxml.jackson.databind.module.SimpleModule;
import java.net.InetAddress;
import tools.jackson.databind.module.SimpleModule;

/**
* Jackson module for InetAddress serialization and deserialization.
Expand Down
12 changes: 6 additions & 6 deletions src/main/java/com/maxmind/geoip2/InetAddressSerializer.java
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
package com.maxmind.geoip2;

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.ser.std.StdSerializer;
import java.io.IOException;
import java.net.InetAddress;
import tools.jackson.core.JacksonException;
import tools.jackson.core.JsonGenerator;
import tools.jackson.databind.SerializationContext;
import tools.jackson.databind.ser.std.StdSerializer;
Comment on lines +4 to +7
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

critical

The groupId for official Jackson 3.x artifacts should be com.fasterxml.jackson.core and com.fasterxml.jackson.databind, not tools.jackson.core and tools.jackson.databind. Please update these imports to reflect the correct official package names.

Suggested change
import tools.jackson.core.JacksonException;
import tools.jackson.core.JsonGenerator;
import tools.jackson.databind.SerializationContext;
import tools.jackson.databind.ser.std.StdSerializer;
import com.fasterxml.jackson.core.JacksonException;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.SerializationContext;
import com.fasterxml.jackson.databind.ser.std.StdSerializer;


/**
* Serializes InetAddress to its host address string representation.
Expand All @@ -18,8 +18,8 @@ public InetAddressSerializer() {
}

@Override
public void serialize(InetAddress value, JsonGenerator gen, SerializerProvider provider)
throws IOException {
public void serialize(InetAddress value, JsonGenerator gen, SerializationContext provider)
throws JacksonException {
if (value == null) {
gen.writeNull();
} else {
Expand Down
19 changes: 7 additions & 12 deletions src/main/java/com/maxmind/geoip2/JsonSerializable.java
Original file line number Diff line number Diff line change
@@ -1,11 +1,8 @@
package com.maxmind.geoip2;

import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.databind.MapperFeature;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.databind.json.JsonMapper;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import java.io.IOException;
import tools.jackson.databind.DeserializationFeature;
import tools.jackson.databind.json.JsonMapper;
Comment on lines +4 to +5
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

critical

The groupId for official Jackson 3.x artifacts should be com.fasterxml.jackson.databind, not tools.jackson.databind. Please update this import to reflect the correct official package name.

Suggested change
import tools.jackson.databind.DeserializationFeature;
import tools.jackson.databind.json.JsonMapper;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.json.JsonMapper;


/**
* Interface for classes that can be serialized to JSON.
Expand All @@ -16,16 +13,14 @@ public interface JsonSerializable {
/**
* @return JSON representation of this object. The structure is the same as
* the JSON provided by the GeoIP2 web service.
* @throws IOException if there is an error serializing the object to JSON.
*/
default String toJson() throws IOException {
default String toJson() {
JsonMapper mapper = JsonMapper.builder()
.disable(MapperFeature.CAN_OVERRIDE_ACCESS_MODIFIERS)
.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS)
.addModule(new JavaTimeModule())
.disable(DeserializationFeature.FAIL_ON_NULL_FOR_PRIMITIVES)
.addModule(new InetAddressModule())
.serializationInclusion(JsonInclude.Include.NON_NULL)
.serializationInclusion(JsonInclude.Include.NON_EMPTY)
.changeDefaultPropertyInclusion(
value -> value.withValueInclusion(JsonInclude.Include.NON_NULL)
.withValueInclusion(JsonInclude.Include.NON_EMPTY))
.build();

return mapper.writeValueAsString(this);
Expand Down
28 changes: 14 additions & 14 deletions src/main/java/com/maxmind/geoip2/NetworkDeserializer.java
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@
package com.maxmind.geoip2;

import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.deser.std.StdDeserializer;
import com.maxmind.db.Network;
import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;
import tools.jackson.core.JacksonException;
import tools.jackson.core.JsonParser;
import tools.jackson.databind.DatabindException;
import tools.jackson.databind.DeserializationContext;
import tools.jackson.databind.deser.std.StdDeserializer;
Comment on lines +6 to +10
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

critical

The groupId for official Jackson 3.x artifacts should be com.fasterxml.jackson.core and com.fasterxml.jackson.databind, not tools.jackson.core and tools.jackson.databind. Please update these imports to reflect the correct official package names.

Suggested change
import tools.jackson.core.JacksonException;
import tools.jackson.core.JsonParser;
import tools.jackson.databind.DatabindException;
import tools.jackson.databind.DeserializationContext;
import tools.jackson.databind.deser.std.StdDeserializer;
import com.fasterxml.jackson.core.JacksonException;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.DatabindException;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.deser.std.StdDeserializer;


/**
* This class provides a deserializer for the Network class.
Expand All @@ -17,7 +18,7 @@ public final class NetworkDeserializer extends StdDeserializer<Network> {
* Constructs a {@code NetworkDeserializer} with no type specified.
*/
public NetworkDeserializer() {
this(null);
this(Network.class);
}

/**
Expand All @@ -31,16 +32,20 @@ public NetworkDeserializer(Class<?> vc) {

@Override
public Network deserialize(JsonParser jsonparser, DeserializationContext context)
throws IOException {
throws JacksonException {

final var cidr = jsonparser.getValueAsString();
if (cidr == null || cidr.isBlank()) {
return null;
}
return parseCidr(cidr);
try {
return parseCidr(cidr);
} catch (UnknownHostException e) {
throw DatabindException.from(jsonparser, "Unknown host in CIDR: " + cidr, e);
}
}

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

final InetAddress address;
try {
address = InetAddress.getByName(addrPart);
} catch (UnknownHostException e) {
throw new IOException("Unknown host in CIDR: " + cidr, e);
}
final InetAddress address = InetAddress.getByName(addrPart);

final var prefixLength = parsePrefixLength(prefixPart, cidr);

Expand Down
23 changes: 9 additions & 14 deletions src/main/java/com/maxmind/geoip2/WebServiceClient.java
Original file line number Diff line number Diff line change
@@ -1,13 +1,5 @@
package com.maxmind.geoip2;

import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.InjectableValues;
import com.fasterxml.jackson.databind.MapperFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.databind.json.JsonMapper;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import com.maxmind.geoip2.exception.AddressNotFoundException;
import com.maxmind.geoip2.exception.AuthenticationException;
import com.maxmind.geoip2.exception.GeoIp2Exception;
Expand All @@ -21,7 +13,6 @@
import java.io.IOException;
import java.io.InputStream;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.ProxySelector;
import java.net.URI;
import java.net.URISyntaxException;
Expand All @@ -34,6 +25,12 @@
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import tools.jackson.core.JacksonException;
import tools.jackson.core.type.TypeReference;
import tools.jackson.databind.DeserializationFeature;
import tools.jackson.databind.InjectableValues;
import tools.jackson.databind.ObjectMapper;
import tools.jackson.databind.json.JsonMapper;

/**
* <p>
Expand Down Expand Up @@ -133,10 +130,8 @@ private WebServiceClient(Builder builder) {
(builder.accountId + ":" + builder.licenseKey).getBytes(StandardCharsets.UTF_8));

mapper = JsonMapper.builder()
.disable(MapperFeature.CAN_OVERRIDE_ACCESS_MODIFIERS)
.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES)
.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS)
.addModule(new JavaTimeModule())
.disable(DeserializationFeature.FAIL_ON_NULL_FOR_PRIMITIVES)
.build();

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

try {
return mapper.readerFor(cls).with(inject).readValue(response.body());
} catch (IOException e) {
} catch (JacksonException e) {
throw new GeoIp2Exception(
"Received a 200 response but could not decode it as JSON", e);
}
Expand All @@ -429,7 +424,7 @@ private void handle4xxStatus(HttpResponse<InputStream> response)
handleErrorWithJsonBody(content, body, status, uri);
} catch (HttpException e) {
throw e;
} catch (IOException e) {
} catch (JacksonException e) {
throw new HttpException("Received a " + status + " error for "
+ uri + " but it did not include the expected JSON body: "
+ body, status, uri);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
package com.maxmind.geoip2.model;

import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import com.maxmind.db.MaxMindDbIpAddress;
import com.maxmind.db.MaxMindDbNetwork;
import com.maxmind.db.MaxMindDbParameter;
import com.maxmind.db.Network;
import com.maxmind.geoip2.JsonSerializable;
import com.maxmind.geoip2.NetworkDeserializer;
import java.net.InetAddress;
import tools.jackson.databind.annotation.JsonDeserialize;
import tools.jackson.databind.annotation.JsonSerialize;
import tools.jackson.databind.ser.std.ToStringSerializer;

/**
* This class provides the GeoIP2 Anonymous IP model.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,6 @@
package com.maxmind.geoip2.model;

import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import com.maxmind.db.MaxMindDbConstructor;
import com.maxmind.db.MaxMindDbIpAddress;
import com.maxmind.db.MaxMindDbNetwork;
Expand All @@ -13,6 +10,9 @@
import com.maxmind.geoip2.NetworkDeserializer;
import java.net.InetAddress;
import java.time.LocalDate;
import tools.jackson.databind.annotation.JsonDeserialize;
import tools.jackson.databind.annotation.JsonSerialize;
import tools.jackson.databind.ser.std.ToStringSerializer;

/**
* This class provides the GeoIP Anonymous Plus model.
Expand Down
6 changes: 3 additions & 3 deletions src/main/java/com/maxmind/geoip2/model/AsnResponse.java
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
package com.maxmind.geoip2.model;

import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import com.maxmind.db.MaxMindDbIpAddress;
import com.maxmind.db.MaxMindDbNetwork;
import com.maxmind.db.MaxMindDbParameter;
import com.maxmind.db.Network;
import com.maxmind.geoip2.JsonSerializable;
import com.maxmind.geoip2.NetworkDeserializer;
import java.net.InetAddress;
import tools.jackson.databind.annotation.JsonDeserialize;
import tools.jackson.databind.annotation.JsonSerialize;
import tools.jackson.databind.ser.std.ToStringSerializer;

/**
* This class provides the GeoLite2 ASN model.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,6 @@
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonValue;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import com.maxmind.db.MaxMindDbCreator;
import com.maxmind.db.MaxMindDbIpAddress;
import com.maxmind.db.MaxMindDbNetwork;
Expand All @@ -14,6 +11,9 @@
import com.maxmind.geoip2.JsonSerializable;
import com.maxmind.geoip2.NetworkDeserializer;
import java.net.InetAddress;
import tools.jackson.databind.annotation.JsonDeserialize;
import tools.jackson.databind.annotation.JsonSerialize;
import tools.jackson.databind.ser.std.ToStringSerializer;

/**
* This class provides the GeoIP2 Connection-Type model.
Expand Down
6 changes: 3 additions & 3 deletions src/main/java/com/maxmind/geoip2/model/DomainResponse.java
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
package com.maxmind.geoip2.model;

import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import com.maxmind.db.MaxMindDbIpAddress;
import com.maxmind.db.MaxMindDbNetwork;
import com.maxmind.db.MaxMindDbParameter;
import com.maxmind.db.Network;
import com.maxmind.geoip2.JsonSerializable;
import com.maxmind.geoip2.NetworkDeserializer;
import java.net.InetAddress;
import tools.jackson.databind.annotation.JsonDeserialize;
import tools.jackson.databind.annotation.JsonSerialize;
import tools.jackson.databind.ser.std.ToStringSerializer;

/**
* This class provides the GeoIP2 Domain model.
Expand Down
6 changes: 3 additions & 3 deletions src/main/java/com/maxmind/geoip2/model/IpRiskResponse.java
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
package com.maxmind.geoip2.model;

import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import com.maxmind.db.MaxMindDbIpAddress;
import com.maxmind.db.MaxMindDbNetwork;
import com.maxmind.db.MaxMindDbParameter;
import com.maxmind.db.Network;
import com.maxmind.geoip2.JsonSerializable;
import com.maxmind.geoip2.NetworkDeserializer;
import java.net.InetAddress;
import tools.jackson.databind.annotation.JsonDeserialize;
import tools.jackson.databind.annotation.JsonSerialize;
import tools.jackson.databind.ser.std.ToStringSerializer;

/**
* This class provides the GeoIP2 IP Risk model.
Expand Down
Loading
Loading