diff --git a/CHANGELOG.md b/CHANGELOG.md index 3b1e5cc..08e5afa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,9 +2,10 @@ ### Breaking * Requires Java 17 or later (#100) +* Required Jackson 3 ### Dependencies -* Updated Jackson to 2.19.1 (#101) +* Updated Jackson to 3.0.0 ### Fix * Use `Long` for numeric TTL fields (#103) (#104) diff --git a/pom.xml b/pom.xml index 4188a41..2967e18 100644 --- a/pom.xml +++ b/pom.xml @@ -48,14 +48,9 @@ - com.fasterxml.jackson.core + tools.jackson.core jackson-databind - 2.19.1 - - - com.fasterxml.jackson.datatype - jackson-datatype-jsr310 - 2.19.1 + 3.0.0-rc5 @@ -130,7 +125,7 @@ @{argLine} - --add-opens de.stklcode.jvault.connector/de.stklcode.jvault.connector.test=com.fasterxml.jackson.databind + --add-opens de.stklcode.jvault.connector/de.stklcode.jvault.connector.test=tools.jackson.databind @@ -167,8 +162,7 @@ --add-opens de.stklcode.jvault.connector/de.stklcode.jvault.connector.model=ALL-UNNAMED --add-opens de.stklcode.jvault.connector/de.stklcode.jvault.connector.model.response=ALL-UNNAMED --add-opens de.stklcode.jvault.connector/de.stklcode.jvault.connector.model.response.embedded=ALL-UNNAMED - --add-opens de.stklcode.jvault.connector/de.stklcode.jvault.connector.test=com.fasterxml.jackson.databind - --add-opens de.stklcode.jvault.connector/de.stklcode.jvault.connector.test=com.fasterxml.jackson.datatype.jsr310 + --add-opens de.stklcode.jvault.connector/de.stklcode.jvault.connector.test=tools.jackson.databind diff --git a/src/main/java/de/stklcode/jvault/connector/internal/RequestHelper.java b/src/main/java/de/stklcode/jvault/connector/internal/RequestHelper.java index b49942a..c7081a1 100644 --- a/src/main/java/de/stklcode/jvault/connector/internal/RequestHelper.java +++ b/src/main/java/de/stklcode/jvault/connector/internal/RequestHelper.java @@ -1,12 +1,11 @@ package de.stklcode.jvault.connector.internal; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.DeserializationFeature; -import com.fasterxml.jackson.databind.SerializationFeature; -import com.fasterxml.jackson.databind.json.JsonMapper; -import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; +import tools.jackson.core.JacksonException; + import de.stklcode.jvault.connector.exception.*; import de.stklcode.jvault.connector.model.response.ErrorResponse; +import tools.jackson.databind.cfg.DateTimeFeature; +import tools.jackson.databind.json.JsonMapper; import javax.net.ssl.SSLContext; import javax.net.ssl.TrustManagerFactory; @@ -66,9 +65,8 @@ public final class RequestHelper implements Serializable { this.tlsVersion = tlsVersion; this.trustedCaCert = trustedCaCert; this.jsonMapper = JsonMapper.builder() - .addModule(new JavaTimeModule()) - .enable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS) - .disable(DeserializationFeature.ADJUST_DATES_TO_CONTEXT_TIME_ZONE) + .enable(DateTimeFeature.WRITE_DATES_AS_TIMESTAMPS) + .disable(DateTimeFeature.ADJUST_DATES_TO_CONTEXT_TIME_ZONE) .build(); } @@ -89,7 +87,7 @@ public final class RequestHelper implements Serializable { // Generate JSON from payload. try { req.POST(HttpRequest.BodyPublishers.ofString(jsonMapper.writeValueAsString(payload), UTF_8)); - } catch (JsonProcessingException e) { + } catch (JacksonException e) { throw new InvalidRequestException(Error.PARSE_RESPONSE, e); } @@ -120,7 +118,7 @@ public final class RequestHelper implements Serializable { try { String response = post(path, payload, token); return jsonMapper.readValue(response, target); - } catch (IOException e) { + } catch (JacksonException e) { throw new InvalidResponseException(Error.PARSE_RESPONSE, e); } } @@ -159,7 +157,7 @@ public final class RequestHelper implements Serializable { // Generate JSON from payload. try { req.PUT(HttpRequest.BodyPublishers.ofString(jsonMapper.writeValueAsString(payload), UTF_8)); - } catch (JsonProcessingException e) { + } catch (JacksonException e) { throw new InvalidRequestException("Payload serialization failed", e); } @@ -190,7 +188,7 @@ public final class RequestHelper implements Serializable { try { String response = put(path, payload, token); return jsonMapper.readValue(response, target); - } catch (IOException e) { + } catch (JacksonException e) { throw new InvalidResponseException(Error.PARSE_RESPONSE, e); } } @@ -302,7 +300,7 @@ public final class RequestHelper implements Serializable { try { String response = get(path, payload, token); return jsonMapper.readValue(response, target); - } catch (IOException e) { + } catch (JacksonException e) { throw new InvalidResponseException(Error.PARSE_RESPONSE, e); } } @@ -443,7 +441,7 @@ public final class RequestHelper implements Serializable { throw new InvalidResponseException(Error.RESPONSE_CODE, response.statusCode(), er.toString()); } } - } catch (IOException ignored) { + } catch (IOException | JacksonException ignored) { // Exception ignored. } } diff --git a/src/main/java/de/stklcode/jvault/connector/model/response/SecretResponse.java b/src/main/java/de/stklcode/jvault/connector/model/response/SecretResponse.java index 9e040e6..a1f5e44 100644 --- a/src/main/java/de/stklcode/jvault/connector/model/response/SecretResponse.java +++ b/src/main/java/de/stklcode/jvault/connector/model/response/SecretResponse.java @@ -17,14 +17,12 @@ package de.stklcode.jvault.connector.model.response; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import com.fasterxml.jackson.databind.DeserializationFeature; -import com.fasterxml.jackson.databind.SerializationFeature; -import com.fasterxml.jackson.databind.json.JsonMapper; -import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; import de.stklcode.jvault.connector.exception.InvalidResponseException; import de.stklcode.jvault.connector.model.response.embedded.VersionMetadata; +import tools.jackson.core.JacksonException; +import tools.jackson.databind.cfg.DateTimeFeature; +import tools.jackson.databind.json.JsonMapper; -import java.io.IOException; import java.io.Serial; import java.io.Serializable; import java.util.Map; @@ -88,9 +86,8 @@ public abstract class SecretResponse extends VaultDataResponse { return type.cast(rawValue); } else { var om = JsonMapper.builder() - .addModule(new JavaTimeModule()) - .enable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS) - .disable(DeserializationFeature.ADJUST_DATES_TO_CONTEXT_TIME_ZONE) + .enable(DateTimeFeature.WRITE_DATES_AS_TIMESTAMPS) + .disable(DateTimeFeature.ADJUST_DATES_TO_CONTEXT_TIME_ZONE) .build(); if (rawValue instanceof String) { @@ -99,7 +96,7 @@ public abstract class SecretResponse extends VaultDataResponse { return om.readValue(om.writeValueAsString(rawValue), type); } } - } catch (IOException e) { + } catch (JacksonException e) { throw new InvalidResponseException("Unable to parse response payload: " + e.getMessage()); } } diff --git a/src/main/java/module-info.java b/src/main/java/module-info.java index cd2c31e..34fb1e4 100644 --- a/src/main/java/module-info.java +++ b/src/main/java/module-info.java @@ -26,12 +26,11 @@ module de.stklcode.jvault.connector { exports de.stklcode.jvault.connector.model.response; exports de.stklcode.jvault.connector.model.response.embedded; - opens de.stklcode.jvault.connector.model to com.fasterxml.jackson.databind; - opens de.stklcode.jvault.connector.model.response to com.fasterxml.jackson.databind; - opens de.stklcode.jvault.connector.model.response.embedded to com.fasterxml.jackson.databind; + opens de.stklcode.jvault.connector.model to tools.jackson.databind; + opens de.stklcode.jvault.connector.model.response to tools.jackson.databind; + opens de.stklcode.jvault.connector.model.response.embedded to tools.jackson.databind; requires java.net.http; requires com.fasterxml.jackson.annotation; - requires com.fasterxml.jackson.databind; - requires com.fasterxml.jackson.datatype.jsr310; + requires tools.jackson.databind; }