Skip to content
Merged
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
2 changes: 1 addition & 1 deletion .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ jobs:
matrix:
distribution: ['zulu']
os: [ubuntu-latest, windows-latest, macos-latest]
version: [ 11, 17, 21, 22 ]
version: [ 17, 21, 24 ]
steps:
- uses: actions/checkout@v5
with:
Expand Down
22 changes: 22 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,28 @@
CHANGELOG
=========

5.0.0
------------------

* The deprecation notices for IP Risk database support have been removed.
IP Risk database support will continue to be maintained.
* **BREAKING:** The deprecated `WebServiceClient.Builder` methods
`connectTimeout(int)`, `readTimeout(int)`, and `proxy(Proxy)` have been
removed. Use `connectTimeout(Duration)`, `requestTimeout(Duration)`, and
`proxy(ProxySelector)` respectively.
* **BREAKING:** The deprecated `WebServiceClient.close()` method has been
removed along with the `Closeable` interface implementation.
* **BREAKING:** The deprecated `getUrl()` methods in `HttpException` and
`InvalidRequestException` have been removed. Use `getUri()` instead.
* **BREAKING:** The deprecated `Traits` constructors and methods
`isAnonymousProxy()` and `isSatelliteProvider()` have been removed. Use the
GeoIP2 Anonymous IP database for anonymous proxy detection instead.
* **BREAKING:** The deprecated `Location.getMetroCode()` method has been
removed. Metro code values are no longer maintained.
* **BREAKING:** Java 11 support has been dropped. Java 17 or later is now required.
* **BREAKING:** Removed explicit `serialVersionUID` from all exception classes.
Java will auto-generate serialVersionUID when needed, following modern practices.

4.4.0 (2025-08-28)
------------------

Expand Down
6 changes: 3 additions & 3 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -148,7 +148,7 @@
https://maxmind.github.io/MaxMind-DB-Reader-java/doc/latest/
</link>
</links>
<source>11</source>
<source>17</source>
<doclint>-missing</doclint>
</configuration>
<executions>
Expand Down Expand Up @@ -198,8 +198,8 @@
<artifactId>maven-compiler-plugin</artifactId>
<version>3.14.0</version>
<configuration>
<release>11</release>
<source>11</source>
<release>17</release>
<source>17</source>
<target>11</target>
</configuration>
</plugin>
Expand Down
4 changes: 0 additions & 4 deletions src/main/java/com/maxmind/geoip2/DatabaseProvider.java
Original file line number Diff line number Diff line change
Expand Up @@ -89,9 +89,7 @@ Optional<AnonymousPlusResponse> tryAnonymousPlus(InetAddress ipAddress) throws I
* @return an IpRiskResponse for the requested IP address.
* @throws com.maxmind.geoip2.exception.GeoIp2Exception if there is an error looking up the IP
* @throws java.io.IOException if there is an IO error
* @deprecated This database has been discontinued.
*/
@Deprecated
IpRiskResponse ipRisk(InetAddress ipAddress) throws IOException,
GeoIp2Exception;

Expand All @@ -102,9 +100,7 @@ IpRiskResponse ipRisk(InetAddress ipAddress) throws IOException,
* @return an IPRiskResponse for the requested IP address or empty if it is not in the DB.
* @throws com.maxmind.geoip2.exception.GeoIp2Exception if there is an error looking up the IP
* @throws java.io.IOException if there is an IO error
* @deprecated This database has been discontinued.
*/
@Deprecated
Optional<IpRiskResponse> tryIpRisk(InetAddress ipAddress) throws IOException,
GeoIp2Exception;

Expand Down
95 changes: 34 additions & 61 deletions src/main/java/com/maxmind/geoip2/DatabaseReader.java
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@
import java.io.IOException;
import java.io.InputStream;
import java.net.InetAddress;
import java.util.Collections;
import java.util.List;
import java.util.Optional;

Expand Down Expand Up @@ -150,9 +149,8 @@ private int getDatabaseType() {
type |= DatabaseType.ISP.type;
}
if (type == 0) {
// XXX - exception type
throw new UnsupportedOperationException(
"Invalid attempt to open an unknown database type: " + databaseType);
throw new IllegalArgumentException(
"Unsupported database type: " + databaseType);
}
return type;
}
Expand All @@ -174,7 +172,7 @@ public static final class Builder {
final File database;
final InputStream stream;

List<String> locales = Collections.singletonList("en");
List<String> locales = List.of("en");
FileMode mode = FileMode.MEMORY_MAPPED;
NodeCache cache = NoCache.getInstance();

Expand Down Expand Up @@ -239,28 +237,7 @@ public DatabaseReader build() throws IOException {
}
}

static final class LookupResult<T> {
final T model;
final String ipAddress;
final Network network;

LookupResult(T model, String ipAddress, Network network) {
this.model = model;
this.ipAddress = ipAddress;
this.network = network;
}

T getModel() {
return this.model;
}

String getIpAddress() {
return this.ipAddress;
}

Network getNetwork() {
return this.network;
}
static record LookupResult<T>(T model, String ipAddress, Network network) {
}

/**
Expand Down Expand Up @@ -333,15 +310,15 @@ private Optional<CountryResponse> getCountry(
CountryResponse.class,
DatabaseType.COUNTRY
);
CountryResponse response = result.getModel();
CountryResponse response = result.model();
if (response == null) {
return Optional.empty();
}
return Optional.of(
new CountryResponse(
response,
result.getIpAddress(),
result.getNetwork(),
result.ipAddress(),
result.network(),
locales
)
);
Expand Down Expand Up @@ -372,15 +349,15 @@ private Optional<CityResponse> getCity(
CityResponse.class,
DatabaseType.CITY
);
CityResponse response = result.getModel();
CityResponse response = result.model();
if (response == null) {
return Optional.empty();
}
return Optional.of(
new CityResponse(
response,
result.getIpAddress(),
result.getNetwork(),
result.ipAddress(),
result.network(),
locales
)
);
Expand Down Expand Up @@ -419,15 +396,15 @@ private Optional<AnonymousIpResponse> getAnonymousIp(
AnonymousIpResponse.class,
DatabaseType.ANONYMOUS_IP
);
AnonymousIpResponse response = result.getModel();
AnonymousIpResponse response = result.model();
if (response == null) {
return Optional.empty();
}
return Optional.of(
new AnonymousIpResponse(
response,
result.getIpAddress(),
result.getNetwork()
result.ipAddress(),
result.network()
)
);
}
Expand Down Expand Up @@ -466,15 +443,15 @@ private Optional<AnonymousPlusResponse> getAnonymousPlus(
AnonymousPlusResponse.class,
DatabaseType.ANONYMOUS_PLUS
);
AnonymousPlusResponse response = result.getModel();
AnonymousPlusResponse response = result.model();
if (response == null) {
return Optional.empty();
}
return Optional.of(
new AnonymousPlusResponse(
response,
result.getIpAddress(),
result.getNetwork()
result.ipAddress(),
result.network()
)
);
}
Expand All @@ -487,9 +464,7 @@ private Optional<AnonymousPlusResponse> getAnonymousPlus(
* @return a IPRiskResponse for the requested IP address.
* @throws GeoIp2Exception if there is an error looking up the IP
* @throws IOException if there is an IO error
* @deprecated This database has been discontinued.
*/
@Deprecated
@Override
public IpRiskResponse ipRisk(InetAddress ipAddress) throws IOException,
GeoIp2Exception {
Expand All @@ -501,30 +476,28 @@ public IpRiskResponse ipRisk(InetAddress ipAddress) throws IOException,
return r.get();
}

@Deprecated
@Override
public Optional<IpRiskResponse> tryIpRisk(InetAddress ipAddress) throws IOException,
GeoIp2Exception {
return getIpRisk(ipAddress);
}

@Deprecated
private Optional<IpRiskResponse> getIpRisk(InetAddress ipAddress) throws IOException,
GeoIp2Exception {
LookupResult<IpRiskResponse> result = this.get(
ipAddress,
IpRiskResponse.class,
DatabaseType.IP_RISK
);
IpRiskResponse response = result.getModel();
IpRiskResponse response = result.model();
if (response == null) {
return Optional.empty();
}
return Optional.of(
new IpRiskResponse(
response,
result.getIpAddress(),
result.getNetwork()
result.ipAddress(),
result.network()
)
);
}
Expand Down Expand Up @@ -561,15 +534,15 @@ private Optional<AsnResponse> getAsn(InetAddress ipAddress)
AsnResponse.class,
DatabaseType.ASN
);
AsnResponse response = result.getModel();
AsnResponse response = result.model();
if (response == null) {
return Optional.empty();
}
return Optional.of(
new AsnResponse(
response,
result.getIpAddress(),
result.getNetwork()
result.ipAddress(),
result.network()
)
);
}
Expand Down Expand Up @@ -607,15 +580,15 @@ private Optional<ConnectionTypeResponse> getConnectionType(
ConnectionTypeResponse.class,
DatabaseType.CONNECTION_TYPE
);
ConnectionTypeResponse response = result.getModel();
ConnectionTypeResponse response = result.model();
if (response == null) {
return Optional.empty();
}
return Optional.of(
new ConnectionTypeResponse(
response,
result.getIpAddress(),
result.getNetwork()
result.ipAddress(),
result.network()
)
);
}
Expand Down Expand Up @@ -653,15 +626,15 @@ private Optional<DomainResponse> getDomain(
DomainResponse.class,
DatabaseType.DOMAIN
);
DomainResponse response = result.getModel();
DomainResponse response = result.model();
if (response == null) {
return Optional.empty();
}
return Optional.of(
new DomainResponse(
response,
result.getIpAddress(),
result.getNetwork()
result.ipAddress(),
result.network()
)
);
}
Expand Down Expand Up @@ -699,15 +672,15 @@ private Optional<EnterpriseResponse> getEnterprise(
EnterpriseResponse.class,
DatabaseType.ENTERPRISE
);
EnterpriseResponse response = result.getModel();
EnterpriseResponse response = result.model();
if (response == null) {
return Optional.empty();
}
return Optional.of(
new EnterpriseResponse(
response,
result.getIpAddress(),
result.getNetwork(),
result.ipAddress(),
result.network(),
locales
)
);
Expand Down Expand Up @@ -746,15 +719,15 @@ private Optional<IspResponse> getIsp(
IspResponse.class,
DatabaseType.ISP
);
IspResponse response = result.getModel();
IspResponse response = result.model();
if (response == null) {
return Optional.empty();
}
return Optional.of(
new IspResponse(
response,
result.getIpAddress(),
result.getNetwork()
result.ipAddress(),
result.network()
)
);
}
Expand Down
Loading
Loading