diff --git a/build.gradle b/build.gradle index 5521ada6..fa9da24f 100644 --- a/build.gradle +++ b/build.gradle @@ -17,7 +17,7 @@ plugins { id 'cl.franciscosolis.sonatype-central-upload' version '1.0.3' id("java") id("checkstyle") - id "nebula.lint" version "17.8.0" + id "nebula.lint" version "21.1.3" } compileJava.options.encoding = "UTF-8" @@ -152,18 +152,21 @@ if (!project.hasProperty('skip.signing')) { dependencies { - testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.2' - runtimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.2' - testImplementation 'org.testcontainers:testcontainers-bom:1.20.1' - testImplementation 'org.testcontainers:testcontainers:1.20.1' - testImplementation 'org.testcontainers:junit-jupiter:1.20.1' - implementation 'com.fasterxml.jackson.core:jackson-annotations:2.17.0' - api 'com.fasterxml.jackson.core:jackson-core:2.17.0' - api 'com.fasterxml.jackson.core:jackson-databind:2.17.0' - implementation 'com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.18.2' - implementation 'com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.18.2' - api('org.openapitools:jackson-databind-nullable:0.2.6') {exclude group: 'com.fasterxml.jackson.core', module: 'jackson-databind'} - implementation 'commons-io:commons-io:2.18.0' + api platform('tools.jackson:jackson-bom:3.1.1') + api 'tools.jackson.core:jackson-core' + api 'tools.jackson.core:jackson-databind' + api 'org.openapitools:jackson-databind-nullable:0.2.10' + api 'com.fasterxml.jackson.core:jackson-annotations' + api 'commons-io:commons-io:2.18.0' + testImplementation platform('org.junit:junit-bom:5.14.3') + testImplementation platform('org.testcontainers:testcontainers-bom:2.0.4') + testImplementation 'org.testcontainers:testcontainers' + testImplementation 'org.testcontainers:testcontainers-junit-jupiter' + testImplementation 'org.junit.jupiter:junit-jupiter-api' + testImplementation 'org.slf4j:slf4j-api:1.7.36' + testRuntimeOnly 'org.slf4j:slf4j-simple:1.7.36' + testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine' + testRuntimeOnly 'org.junit.platform:junit-platform-launcher' } apply from: 'build-extras.gradle' diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 1af9e093..c61a118f 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.4.1-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/src/main/java/io/github/open_policy_agent/opa/OPAClient.java b/src/main/java/io/github/open_policy_agent/opa/OPAClient.java index 56b8c22a..4f36b87d 100644 --- a/src/main/java/io/github/open_policy_agent/opa/OPAClient.java +++ b/src/main/java/io/github/open_policy_agent/opa/OPAClient.java @@ -1,8 +1,5 @@ package io.github.open_policy_agent.opa; -import com.fasterxml.jackson.core.type.TypeReference; -import com.fasterxml.jackson.databind.JavaType; -import com.fasterxml.jackson.databind.ObjectMapper; import io.github.open_policy_agent.opa.openapi.OpaApiClient; import io.github.open_policy_agent.opa.openapi.models.errors.SDKError; import io.github.open_policy_agent.opa.openapi.models.errors.ServerError; @@ -31,6 +28,9 @@ import io.github.open_policy_agent.opa.openapi.models.shared.SuccessfulPolicyResponseWithStatusCode; import io.github.open_policy_agent.opa.openapi.utils.HTTPClient; import io.github.open_policy_agent.opa.utils.OPAHTTPClient; +import tools.jackson.core.type.TypeReference; +import tools.jackson.databind.JavaType; +import tools.jackson.databind.ObjectMapper; import java.util.ArrayList; import java.util.HashMap; diff --git a/src/main/java/io/github/open_policy_agent/opa/OPAResult.java b/src/main/java/io/github/open_policy_agent/opa/OPAResult.java index 3ab7cefe..6af56e0e 100644 --- a/src/main/java/io/github/open_policy_agent/opa/OPAResult.java +++ b/src/main/java/io/github/open_policy_agent/opa/OPAResult.java @@ -1,8 +1,8 @@ package io.github.open_policy_agent.opa; -import com.fasterxml.jackson.core.type.TypeReference; -import com.fasterxml.jackson.databind.JavaType; -import com.fasterxml.jackson.databind.ObjectMapper; +import tools.jackson.core.type.TypeReference; +import tools.jackson.databind.JavaType; +import tools.jackson.databind.ObjectMapper; /** * This class encapsulates a result of a previous OPA request for deferred diff --git a/src/main/java/io/github/open_policy_agent/opa/openapi/OpaApiClient.java b/src/main/java/io/github/open_policy_agent/opa/openapi/OpaApiClient.java index 81fb7c21..d4722e5d 100644 --- a/src/main/java/io/github/open_policy_agent/opa/openapi/OpaApiClient.java +++ b/src/main/java/io/github/open_policy_agent/opa/openapi/OpaApiClient.java @@ -3,7 +3,6 @@ */ package io.github.open_policy_agent.opa.openapi; -import com.fasterxml.jackson.core.type.TypeReference; import io.github.open_policy_agent.opa.openapi.models.errors.BatchServerError; import io.github.open_policy_agent.opa.openapi.models.errors.ClientError; import io.github.open_policy_agent.opa.openapi.models.errors.SDKError; @@ -49,6 +48,8 @@ import io.github.open_policy_agent.opa.openapi.utils.SpeakeasyHTTPClient; import io.github.open_policy_agent.opa.openapi.utils.Utils.JsonShape; import io.github.open_policy_agent.opa.openapi.utils.Utils; +import tools.jackson.core.type.TypeReference; + import java.io.InputStream; import java.lang.Boolean; import java.lang.Exception; diff --git a/src/main/java/io/github/open_policy_agent/opa/openapi/models/operations/CompileQueryWithPartialEvaluationRequest.java b/src/main/java/io/github/open_policy_agent/opa/openapi/models/operations/CompileQueryWithPartialEvaluationRequest.java index 175b7e8d..198f1f6a 100644 --- a/src/main/java/io/github/open_policy_agent/opa/openapi/models/operations/CompileQueryWithPartialEvaluationRequest.java +++ b/src/main/java/io/github/open_policy_agent/opa/openapi/models/operations/CompileQueryWithPartialEvaluationRequest.java @@ -5,13 +5,14 @@ import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonIgnore; -import com.fasterxml.jackson.core.type.TypeReference; import io.github.open_policy_agent.opa.openapi.models.shared.Explain; import io.github.open_policy_agent.opa.openapi.models.shared.GzipAcceptEncoding; import io.github.open_policy_agent.opa.openapi.models.shared.GzipContentEncoding; import io.github.open_policy_agent.opa.openapi.utils.LazySingletonValue; import io.github.open_policy_agent.opa.openapi.utils.SpeakeasyMetadata; import io.github.open_policy_agent.opa.openapi.utils.Utils; +import tools.jackson.core.type.TypeReference; + import java.lang.Boolean; import java.lang.Override; import java.lang.String; diff --git a/src/main/java/io/github/open_policy_agent/opa/openapi/models/operations/ExecuteBatchPolicyWithInputRequest.java b/src/main/java/io/github/open_policy_agent/opa/openapi/models/operations/ExecuteBatchPolicyWithInputRequest.java index 11694dfc..3daf2f90 100644 --- a/src/main/java/io/github/open_policy_agent/opa/openapi/models/operations/ExecuteBatchPolicyWithInputRequest.java +++ b/src/main/java/io/github/open_policy_agent/opa/openapi/models/operations/ExecuteBatchPolicyWithInputRequest.java @@ -5,13 +5,14 @@ import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonIgnore; -import com.fasterxml.jackson.core.type.TypeReference; import io.github.open_policy_agent.opa.openapi.models.shared.Explain; import io.github.open_policy_agent.opa.openapi.models.shared.GzipAcceptEncoding; import io.github.open_policy_agent.opa.openapi.models.shared.GzipContentEncoding; import io.github.open_policy_agent.opa.openapi.utils.LazySingletonValue; import io.github.open_policy_agent.opa.openapi.utils.SpeakeasyMetadata; import io.github.open_policy_agent.opa.openapi.utils.Utils; +import tools.jackson.core.type.TypeReference; + import java.lang.Boolean; import java.lang.Override; import java.lang.String; diff --git a/src/main/java/io/github/open_policy_agent/opa/openapi/models/operations/ExecutePolicyRequest.java b/src/main/java/io/github/open_policy_agent/opa/openapi/models/operations/ExecutePolicyRequest.java index e36b29a7..f18db3ff 100644 --- a/src/main/java/io/github/open_policy_agent/opa/openapi/models/operations/ExecutePolicyRequest.java +++ b/src/main/java/io/github/open_policy_agent/opa/openapi/models/operations/ExecutePolicyRequest.java @@ -5,12 +5,13 @@ import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonIgnore; -import com.fasterxml.jackson.core.type.TypeReference; import io.github.open_policy_agent.opa.openapi.models.shared.Explain; import io.github.open_policy_agent.opa.openapi.models.shared.GzipAcceptEncoding; import io.github.open_policy_agent.opa.openapi.utils.LazySingletonValue; import io.github.open_policy_agent.opa.openapi.utils.SpeakeasyMetadata; import io.github.open_policy_agent.opa.openapi.utils.Utils; +import tools.jackson.core.type.TypeReference; + import java.lang.Boolean; import java.lang.Override; import java.lang.String; diff --git a/src/main/java/io/github/open_policy_agent/opa/openapi/models/operations/ExecutePolicyWithInputRequest.java b/src/main/java/io/github/open_policy_agent/opa/openapi/models/operations/ExecutePolicyWithInputRequest.java index f1ca1fb7..4a985e52 100644 --- a/src/main/java/io/github/open_policy_agent/opa/openapi/models/operations/ExecutePolicyWithInputRequest.java +++ b/src/main/java/io/github/open_policy_agent/opa/openapi/models/operations/ExecutePolicyWithInputRequest.java @@ -5,13 +5,14 @@ import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonIgnore; -import com.fasterxml.jackson.core.type.TypeReference; import io.github.open_policy_agent.opa.openapi.models.shared.Explain; import io.github.open_policy_agent.opa.openapi.models.shared.GzipAcceptEncoding; import io.github.open_policy_agent.opa.openapi.models.shared.GzipContentEncoding; import io.github.open_policy_agent.opa.openapi.utils.LazySingletonValue; import io.github.open_policy_agent.opa.openapi.utils.SpeakeasyMetadata; import io.github.open_policy_agent.opa.openapi.utils.Utils; +import tools.jackson.core.type.TypeReference; + import java.lang.Boolean; import java.lang.Override; import java.lang.String; diff --git a/src/main/java/io/github/open_policy_agent/opa/openapi/models/operations/HealthRequest.java b/src/main/java/io/github/open_policy_agent/opa/openapi/models/operations/HealthRequest.java index 498ccfb4..ac076340 100644 --- a/src/main/java/io/github/open_policy_agent/opa/openapi/models/operations/HealthRequest.java +++ b/src/main/java/io/github/open_policy_agent/opa/openapi/models/operations/HealthRequest.java @@ -5,10 +5,11 @@ import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonIgnore; -import com.fasterxml.jackson.core.type.TypeReference; import io.github.open_policy_agent.opa.openapi.utils.LazySingletonValue; import io.github.open_policy_agent.opa.openapi.utils.SpeakeasyMetadata; import io.github.open_policy_agent.opa.openapi.utils.Utils; +import tools.jackson.core.type.TypeReference; + import java.lang.Boolean; import java.lang.Override; import java.lang.String; diff --git a/src/main/java/io/github/open_policy_agent/opa/openapi/models/operations/HealthRequestBuilder.java b/src/main/java/io/github/open_policy_agent/opa/openapi/models/operations/HealthRequestBuilder.java index 2ff89b20..488b068a 100644 --- a/src/main/java/io/github/open_policy_agent/opa/openapi/models/operations/HealthRequestBuilder.java +++ b/src/main/java/io/github/open_policy_agent/opa/openapi/models/operations/HealthRequestBuilder.java @@ -3,9 +3,10 @@ */ package io.github.open_policy_agent.opa.openapi.models.operations; -import com.fasterxml.jackson.core.type.TypeReference; import io.github.open_policy_agent.opa.openapi.utils.LazySingletonValue; import io.github.open_policy_agent.opa.openapi.utils.Utils; +import tools.jackson.core.type.TypeReference; + import java.lang.Boolean; import java.lang.Exception; import java.lang.String; diff --git a/src/main/java/io/github/open_policy_agent/opa/openapi/models/shared/Input.java b/src/main/java/io/github/open_policy_agent/opa/openapi/models/shared/Input.java index 5717f027..c67c78fc 100644 --- a/src/main/java/io/github/open_policy_agent/opa/openapi/models/shared/Input.java +++ b/src/main/java/io/github/open_policy_agent/opa/openapi/models/shared/Input.java @@ -4,19 +4,19 @@ package io.github.open_policy_agent.opa.openapi.models.shared; import com.fasterxml.jackson.annotation.JsonValue; -import com.fasterxml.jackson.core.type.TypeReference; -import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import io.github.open_policy_agent.opa.openapi.utils.OneOfDeserializer; import io.github.open_policy_agent.opa.openapi.utils.TypedObject; import io.github.open_policy_agent.opa.openapi.utils.Utils.JsonShape; import io.github.open_policy_agent.opa.openapi.utils.Utils.TypeReferenceWithShape; import io.github.open_policy_agent.opa.openapi.utils.Utils; +import tools.jackson.core.type.TypeReference; +import tools.jackson.databind.annotation.JsonDeserialize; + import java.lang.Boolean; import java.lang.Double; import java.lang.Object; import java.lang.Override; import java.lang.String; -import java.lang.SuppressWarnings; import java.util.List; import java.util.Map; import java.util.Objects; @@ -103,7 +103,6 @@ public int hashCode() { return Objects.hash(value.value()); } - @SuppressWarnings("serial") public static final class _Deserializer extends OneOfDeserializer { public _Deserializer() { diff --git a/src/main/java/io/github/open_policy_agent/opa/openapi/models/shared/MaskingRule.java b/src/main/java/io/github/open_policy_agent/opa/openapi/models/shared/MaskingRule.java index ca8903cb..4724936d 100644 --- a/src/main/java/io/github/open_policy_agent/opa/openapi/models/shared/MaskingRule.java +++ b/src/main/java/io/github/open_policy_agent/opa/openapi/models/shared/MaskingRule.java @@ -4,13 +4,14 @@ package io.github.open_policy_agent.opa.openapi.models.shared; import com.fasterxml.jackson.annotation.JsonValue; -import com.fasterxml.jackson.core.type.TypeReference; -import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import io.github.open_policy_agent.opa.openapi.utils.OneOfDeserializer; import io.github.open_policy_agent.opa.openapi.utils.TypedObject; import io.github.open_policy_agent.opa.openapi.utils.Utils.JsonShape; import io.github.open_policy_agent.opa.openapi.utils.Utils.TypeReferenceWithShape; import io.github.open_policy_agent.opa.openapi.utils.Utils; +import tools.jackson.core.type.TypeReference; +import tools.jackson.databind.annotation.JsonDeserialize; + import java.lang.Override; import java.lang.String; import java.lang.SuppressWarnings; diff --git a/src/main/java/io/github/open_policy_agent/opa/openapi/models/shared/Replace.java b/src/main/java/io/github/open_policy_agent/opa/openapi/models/shared/Replace.java index 748f8260..404d7b66 100644 --- a/src/main/java/io/github/open_policy_agent/opa/openapi/models/shared/Replace.java +++ b/src/main/java/io/github/open_policy_agent/opa/openapi/models/shared/Replace.java @@ -4,19 +4,19 @@ package io.github.open_policy_agent.opa.openapi.models.shared; import com.fasterxml.jackson.annotation.JsonValue; -import com.fasterxml.jackson.core.type.TypeReference; -import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import io.github.open_policy_agent.opa.openapi.utils.OneOfDeserializer; import io.github.open_policy_agent.opa.openapi.utils.TypedObject; import io.github.open_policy_agent.opa.openapi.utils.Utils.JsonShape; import io.github.open_policy_agent.opa.openapi.utils.Utils.TypeReferenceWithShape; import io.github.open_policy_agent.opa.openapi.utils.Utils; +import tools.jackson.core.type.TypeReference; +import tools.jackson.databind.annotation.JsonDeserialize; + import java.lang.Boolean; import java.lang.Double; import java.lang.Object; import java.lang.Override; import java.lang.String; -import java.lang.SuppressWarnings; import java.util.List; import java.util.Map; import java.util.Objects; @@ -98,7 +98,6 @@ public int hashCode() { return Objects.hash(value.value()); } - @SuppressWarnings("serial") public static final class _Deserializer extends OneOfDeserializer { public _Deserializer() { diff --git a/src/main/java/io/github/open_policy_agent/opa/openapi/models/shared/Result.java b/src/main/java/io/github/open_policy_agent/opa/openapi/models/shared/Result.java index d2223e09..47571030 100644 --- a/src/main/java/io/github/open_policy_agent/opa/openapi/models/shared/Result.java +++ b/src/main/java/io/github/open_policy_agent/opa/openapi/models/shared/Result.java @@ -4,19 +4,19 @@ package io.github.open_policy_agent.opa.openapi.models.shared; import com.fasterxml.jackson.annotation.JsonValue; -import com.fasterxml.jackson.core.type.TypeReference; -import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import io.github.open_policy_agent.opa.openapi.utils.OneOfDeserializer; import io.github.open_policy_agent.opa.openapi.utils.TypedObject; import io.github.open_policy_agent.opa.openapi.utils.Utils.JsonShape; import io.github.open_policy_agent.opa.openapi.utils.Utils.TypeReferenceWithShape; import io.github.open_policy_agent.opa.openapi.utils.Utils; +import tools.jackson.core.type.TypeReference; +import tools.jackson.databind.annotation.JsonDeserialize; + import java.lang.Boolean; import java.lang.Double; import java.lang.Object; import java.lang.Override; import java.lang.String; -import java.lang.SuppressWarnings; import java.util.List; import java.util.Map; import java.util.Objects; @@ -103,7 +103,6 @@ public int hashCode() { return Objects.hash(value.value()); } - @SuppressWarnings("serial") public static final class _Deserializer extends OneOfDeserializer { public _Deserializer() { diff --git a/src/main/java/io/github/open_policy_agent/opa/openapi/utils/BigDecimalString.java b/src/main/java/io/github/open_policy_agent/opa/openapi/utils/BigDecimalString.java index 2b638391..03e0052a 100644 --- a/src/main/java/io/github/open_policy_agent/opa/openapi/utils/BigDecimalString.java +++ b/src/main/java/io/github/open_policy_agent/opa/openapi/utils/BigDecimalString.java @@ -3,21 +3,18 @@ */ package io.github.open_policy_agent.opa.openapi.utils; -import java.io.IOException; +import tools.jackson.core.JsonGenerator; +import tools.jackson.core.JsonParser; +import tools.jackson.databind.DeserializationContext; +import tools.jackson.databind.SerializationContext; +import tools.jackson.databind.annotation.JsonDeserialize; +import tools.jackson.databind.annotation.JsonSerialize; +import tools.jackson.databind.deser.std.StdDeserializer; +import tools.jackson.databind.ser.std.StdSerializer; + import java.math.BigDecimal; import java.util.Objects; -import com.fasterxml.jackson.core.JacksonException; -import com.fasterxml.jackson.core.JsonGenerator; -import com.fasterxml.jackson.core.JsonParser; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.DeserializationContext; -import com.fasterxml.jackson.databind.SerializerProvider; -import com.fasterxml.jackson.databind.annotation.JsonDeserialize; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; -import com.fasterxml.jackson.databind.deser.std.StdDeserializer; -import com.fasterxml.jackson.databind.ser.std.StdSerializer; - // Internal API only // Note that Jackson 2.16.1 does not support @JsonValue and @JsonFormat combined so we must use @@ -63,7 +60,6 @@ public boolean equals(Object obj) { return Objects.equals(value, other.value); } - @SuppressWarnings("serial") public static final class Serializer extends StdSerializer { protected Serializer() { @@ -71,13 +67,11 @@ protected Serializer() { } @Override - public void serialize(BigDecimalString value, JsonGenerator g, SerializerProvider provider) - throws IOException, JsonProcessingException { + public void serialize(BigDecimalString value, JsonGenerator g, SerializationContext ctxt) { g.writeString(value.value.toString()); } } - @SuppressWarnings("serial") public static final class Deserializer extends StdDeserializer { protected Deserializer() { @@ -85,8 +79,7 @@ protected Deserializer() { } @Override - public BigDecimalString deserialize(JsonParser p, DeserializationContext ctxt) - throws IOException, JacksonException { + public BigDecimalString deserialize(JsonParser p, DeserializationContext ctxt) { String s = p.readValueAs(String.class); return new BigDecimalString(new BigDecimal(s)); } diff --git a/src/main/java/io/github/open_policy_agent/opa/openapi/utils/BigIntegerString.java b/src/main/java/io/github/open_policy_agent/opa/openapi/utils/BigIntegerString.java index eeaf8d04..926ae26c 100644 --- a/src/main/java/io/github/open_policy_agent/opa/openapi/utils/BigIntegerString.java +++ b/src/main/java/io/github/open_policy_agent/opa/openapi/utils/BigIntegerString.java @@ -3,21 +3,18 @@ */ package io.github.open_policy_agent.opa.openapi.utils; -import java.io.IOException; +import tools.jackson.core.JsonGenerator; +import tools.jackson.core.JsonParser; +import tools.jackson.databind.DeserializationContext; +import tools.jackson.databind.SerializationContext; +import tools.jackson.databind.annotation.JsonDeserialize; +import tools.jackson.databind.annotation.JsonSerialize; +import tools.jackson.databind.deser.std.StdDeserializer; +import tools.jackson.databind.ser.std.StdSerializer; + import java.math.BigInteger; import java.util.Objects; -import com.fasterxml.jackson.core.JacksonException; -import com.fasterxml.jackson.core.JsonGenerator; -import com.fasterxml.jackson.core.JsonParser; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.DeserializationContext; -import com.fasterxml.jackson.databind.SerializerProvider; -import com.fasterxml.jackson.databind.annotation.JsonDeserialize; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; -import com.fasterxml.jackson.databind.deser.std.StdDeserializer; -import com.fasterxml.jackson.databind.ser.std.StdSerializer; - // Internal API only // Note that Jackson 2.16.1 does not support @JsonValue and @JsonFormat combined so we must use @@ -63,7 +60,6 @@ public boolean equals(Object obj) { return Objects.equals(value, other.value); } - @SuppressWarnings("serial") public static final class Serializer extends StdSerializer { protected Serializer() { @@ -71,13 +67,11 @@ protected Serializer() { } @Override - public void serialize(BigIntegerString value, JsonGenerator g, SerializerProvider provider) - throws IOException, JsonProcessingException { + public void serialize(BigIntegerString value, JsonGenerator g, SerializationContext ctxt) { g.writeString(value.value.toString()); } } - @SuppressWarnings("serial") public static final class Deserializer extends StdDeserializer { protected Deserializer() { @@ -85,8 +79,7 @@ protected Deserializer() { } @Override - public BigIntegerString deserialize(JsonParser p, DeserializationContext ctxt) - throws IOException, JacksonException { + public BigIntegerString deserialize(JsonParser p, DeserializationContext ctxt) { String s = p.readValueAs(String.class); return new BigIntegerString(new BigInteger(s)); } diff --git a/src/main/java/io/github/open_policy_agent/opa/openapi/utils/Deserializers.java b/src/main/java/io/github/open_policy_agent/opa/openapi/utils/Deserializers.java index 2c7bbdfd..34f362ad 100644 --- a/src/main/java/io/github/open_policy_agent/opa/openapi/utils/Deserializers.java +++ b/src/main/java/io/github/open_policy_agent/opa/openapi/utils/Deserializers.java @@ -1,38 +1,35 @@ -/* +/* * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. */ package io.github.open_policy_agent.opa.openapi.utils; -import java.io.IOException; +import tools.jackson.core.JsonParser; +import tools.jackson.core.JsonToken; +import tools.jackson.databind.DeserializationContext; +import tools.jackson.databind.ValueDeserializer; +import tools.jackson.databind.deser.std.StdDeserializer; +import tools.jackson.databind.module.SimpleModule; + import java.time.LocalDate; import java.time.OffsetDateTime; import java.time.format.DateTimeFormatter; import java.time.format.DateTimeParseException; -import com.fasterxml.jackson.core.JacksonException; -import com.fasterxml.jackson.core.JsonParser; -import com.fasterxml.jackson.core.JsonToken; -import com.fasterxml.jackson.databind.DeserializationContext; -import com.fasterxml.jackson.databind.JsonDeserializer; -import com.fasterxml.jackson.databind.Module; -import com.fasterxml.jackson.databind.deser.std.StdDeserializer; -import com.fasterxml.jackson.databind.module.SimpleModule; - public final class Deserializers { - public static final JsonDeserializer BOOLEAN_STRICT = new StrictBooleanDeserializer(); - public static final JsonDeserializer INTEGER_STRICT = new StrictIntegerDeserializer(); - public static final JsonDeserializer LONG_STRICT = new StrictLongDeserializer(); - public static final JsonDeserializer SHORT_STRICT = new StrictShortDeserializer(); - public static final JsonDeserializer FLOAT_STRICT = new StrictFloatDeserializer(); - public static final JsonDeserializer DOUBLE_STRICT = new StrictDoubleDeserializer(); - public static final JsonDeserializer LOCAL_DATE_STRICT = new StrictLocalDateDeserializer(); - public static final JsonDeserializer OFFSET_DATE_TIME_STRICT = new StrictOffsetDateTimeDeserializer(); - public static final JsonDeserializer STRING_STRICT = new StrictStringDeserializer(); - - public static final Module STRICT_DESERIALIZERS = createStrictDeserializersModule(); + public static final ValueDeserializer BOOLEAN_STRICT = new StrictBooleanDeserializer(); + public static final ValueDeserializer INTEGER_STRICT = new StrictIntegerDeserializer(); + public static final ValueDeserializer LONG_STRICT = new StrictLongDeserializer(); + public static final ValueDeserializer SHORT_STRICT = new StrictShortDeserializer(); + public static final ValueDeserializer FLOAT_STRICT = new StrictFloatDeserializer(); + public static final ValueDeserializer DOUBLE_STRICT = new StrictDoubleDeserializer(); + public static final ValueDeserializer LOCAL_DATE_STRICT = new StrictLocalDateDeserializer(); + public static final ValueDeserializer OFFSET_DATE_TIME_STRICT = new StrictOffsetDateTimeDeserializer(); + public static final ValueDeserializer STRING_STRICT = new StrictStringDeserializer(); + + public static final SimpleModule STRICT_DESERIALIZERS = createStrictDeserializersModule(); - private static Module createStrictDeserializersModule() { + private static SimpleModule createStrictDeserializersModule() { SimpleModule m = new SimpleModule(); m.addDeserializer(Boolean.class, Deserializers.BOOLEAN_STRICT); m.addDeserializer(Short.class, Deserializers.SHORT_STRICT); @@ -48,15 +45,12 @@ private static Module createStrictDeserializersModule() { private static final class StrictBooleanDeserializer extends StdDeserializer { - private static final long serialVersionUID = 6014987192625841276L; - StrictBooleanDeserializer() { super(Boolean.class); } @Override - public Boolean deserialize(JsonParser p, DeserializationContext ctxt) - throws IOException, JacksonException { + public Boolean deserialize(JsonParser p, DeserializationContext ctxt) { JsonToken t = p.currentToken(); if (t == JsonToken.VALUE_TRUE) { return true; @@ -70,15 +64,12 @@ public Boolean deserialize(JsonParser p, DeserializationContext ctxt) private static final class StrictDoubleDeserializer extends StdDeserializer { - private static final long serialVersionUID = 5500822592284739392L; - StrictDoubleDeserializer() { super(Double.class); } @Override - public Double deserialize(JsonParser p, DeserializationContext ctxt) - throws IOException, JacksonException { + public Double deserialize(JsonParser p, DeserializationContext ctxt) { JsonToken t = p.currentToken(); if (t == JsonToken.VALUE_NUMBER_INT) { return p.getDoubleValue(); @@ -92,15 +83,12 @@ public Double deserialize(JsonParser p, DeserializationContext ctxt) private static final class StrictFloatDeserializer extends StdDeserializer { - private static final long serialVersionUID = 2207323065789635630L; - StrictFloatDeserializer() { super(Float.class); } @Override - public Float deserialize(JsonParser p, DeserializationContext ctxt) - throws IOException, JacksonException { + public Float deserialize(JsonParser p, DeserializationContext ctxt) { JsonToken t = p.currentToken(); if (t == JsonToken.VALUE_NUMBER_INT) { return p.getFloatValue(); @@ -114,15 +102,12 @@ public Float deserialize(JsonParser p, DeserializationContext ctxt) private static final class StrictIntegerDeserializer extends StdDeserializer { - private static final long serialVersionUID = 6079282945607228350L; - StrictIntegerDeserializer() { super(Integer.class); } @Override - public Integer deserialize(JsonParser p, DeserializationContext ctxt) - throws IOException, JacksonException { + public Integer deserialize(JsonParser p, DeserializationContext ctxt) { JsonToken t = p.currentToken(); if (t == JsonToken.VALUE_NUMBER_INT) { return p.getIntValue(); @@ -134,16 +119,14 @@ public Integer deserialize(JsonParser p, DeserializationContext ctxt) private static final class StrictLocalDateDeserializer extends StdDeserializer { - private static final long serialVersionUID = 6014987192625841276L; - StrictLocalDateDeserializer() { super(LocalDate.class); } @Override - public LocalDate deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JacksonException { + public LocalDate deserialize(JsonParser p, DeserializationContext ctxt) { if (p.currentToken() == JsonToken.VALUE_STRING) { - String text = p.getText(); + String text = p.getString(); try { return LocalDate.parse(text, DateTimeFormatter.ISO_LOCAL_DATE); } catch (DateTimeParseException e) { @@ -157,15 +140,12 @@ public LocalDate deserialize(JsonParser p, DeserializationContext ctxt) throws I private static final class StrictLongDeserializer extends StdDeserializer { - private static final long serialVersionUID = -2721538755854421632L; - public StrictLongDeserializer() { super(Long.class); } @Override - public Long deserialize(JsonParser p, DeserializationContext ctxt) - throws IOException, JacksonException { + public Long deserialize(JsonParser p, DeserializationContext ctxt) { JsonToken t = p.currentToken(); if (t == JsonToken.VALUE_NUMBER_INT) { return p.getLongValue(); @@ -177,16 +157,14 @@ public Long deserialize(JsonParser p, DeserializationContext ctxt) private static final class StrictOffsetDateTimeDeserializer extends StdDeserializer { - private static final long serialVersionUID = 6014987192625841276L; - StrictOffsetDateTimeDeserializer() { super(OffsetDateTime.class); } @Override - public OffsetDateTime deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JacksonException { + public OffsetDateTime deserialize(JsonParser p, DeserializationContext ctxt) { if (p.currentToken() == JsonToken.VALUE_STRING) { - String text = p.getText(); + String text = p.getString(); try { return OffsetDateTime.parse(text, DateTimeFormatter.ISO_DATE_TIME); } catch (DateTimeParseException e) { @@ -200,15 +178,12 @@ public OffsetDateTime deserialize(JsonParser p, DeserializationContext ctxt) thr private static final class StrictShortDeserializer extends StdDeserializer { - private static final long serialVersionUID = 2162877248512421L; - StrictShortDeserializer() { super(Short.class); } @Override - public Short deserialize(JsonParser p, DeserializationContext ctxt) - throws IOException, JacksonException { + public Short deserialize(JsonParser p, DeserializationContext ctxt) { JsonToken t = p.currentToken(); if (t == JsonToken.VALUE_NUMBER_INT) { return p.getShortValue(); @@ -220,18 +195,15 @@ public Short deserialize(JsonParser p, DeserializationContext ctxt) private static final class StrictStringDeserializer extends StdDeserializer { - private static final long serialVersionUID = 6014987192625841276L; - StrictStringDeserializer() { super(String.class); } @Override - public String deserialize(JsonParser p, DeserializationContext ctxt) - throws IOException, JacksonException { + public String deserialize(JsonParser p, DeserializationContext ctxt) { JsonToken t = p.currentToken(); if (t == JsonToken.VALUE_STRING) { - return p.getText(); + return p.getString(); } else { return (String) ctxt.handleUnexpectedToken(String.class, p); } diff --git a/src/main/java/io/github/open_policy_agent/opa/openapi/utils/EventStream.java b/src/main/java/io/github/open_policy_agent/opa/openapi/utils/EventStream.java index 7ec53078..b4378971 100644 --- a/src/main/java/io/github/open_policy_agent/opa/openapi/utils/EventStream.java +++ b/src/main/java/io/github/open_policy_agent/opa/openapi/utils/EventStream.java @@ -3,6 +3,9 @@ */ package io.github.open_policy_agent.opa.openapi.utils; +import tools.jackson.core.type.TypeReference; +import tools.jackson.databind.ObjectMapper; + import java.io.IOException; import java.io.InputStream; import java.io.UncheckedIOException; @@ -16,9 +19,6 @@ import java.util.stream.Stream; import java.util.stream.StreamSupport; -import com.fasterxml.jackson.core.type.TypeReference; -import com.fasterxml.jackson.databind.ObjectMapper; - /** * Manages the parsing of an InputStream in SSE (Server Sent Events) format. * diff --git a/src/main/java/io/github/open_policy_agent/opa/openapi/utils/JSON.java b/src/main/java/io/github/open_policy_agent/opa/openapi/utils/JSON.java index 33b7571a..7b31b2ad 100644 --- a/src/main/java/io/github/open_policy_agent/opa/openapi/utils/JSON.java +++ b/src/main/java/io/github/open_policy_agent/opa/openapi/utils/JSON.java @@ -1,26 +1,22 @@ -/* +/* * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. */ package io.github.open_policy_agent.opa.openapi.utils; -import org.openapitools.jackson.nullable.JsonNullableModule; - -import com.fasterxml.jackson.databind.DeserializationFeature; -import com.fasterxml.jackson.databind.SerializationFeature; -import com.fasterxml.jackson.datatype.jdk8.Jdk8Module; -import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; -import com.fasterxml.jackson.databind.ObjectMapper; +import org.openapitools.jackson.nullable.JsonNullableJackson3Module; +import tools.jackson.databind.DeserializationFeature; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.SerializationFeature; +import tools.jackson.databind.json.JsonMapper; public class JSON { public static ObjectMapper getMapper() { - return new ObjectMapper() - .registerModule(new JavaTimeModule()) - .registerModule(new Jdk8Module()) - .registerModule(new JsonNullableModule()) - .registerModule(Deserializers.STRICT_DESERIALIZERS) - .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false) - .configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false) - .disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS) - .enable(DeserializationFeature.FAIL_ON_NULL_FOR_PRIMITIVES); + return JsonMapper.builder() + .addModule(new JsonNullableJackson3Module()) + .addModule(Deserializers.STRICT_DESERIALIZERS) + .disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES) + .disable(SerializationFeature.FAIL_ON_EMPTY_BEANS) + .enable(DeserializationFeature.FAIL_ON_NULL_FOR_PRIMITIVES) + .build(); } } \ No newline at end of file diff --git a/src/main/java/io/github/open_policy_agent/opa/openapi/utils/LazySingletonValue.java b/src/main/java/io/github/open_policy_agent/opa/openapi/utils/LazySingletonValue.java index 5f3f3077..a1ae9a76 100644 --- a/src/main/java/io/github/open_policy_agent/opa/openapi/utils/LazySingletonValue.java +++ b/src/main/java/io/github/open_policy_agent/opa/openapi/utils/LazySingletonValue.java @@ -3,7 +3,7 @@ */ package io.github.open_policy_agent.opa.openapi.utils; -import com.fasterxml.jackson.core.type.TypeReference; +import tools.jackson.core.type.TypeReference; public final class LazySingletonValue { diff --git a/src/main/java/io/github/open_policy_agent/opa/openapi/utils/OneOfDeserializer.java b/src/main/java/io/github/open_policy_agent/opa/openapi/utils/OneOfDeserializer.java index dc436de1..1977a328 100644 --- a/src/main/java/io/github/open_policy_agent/opa/openapi/utils/OneOfDeserializer.java +++ b/src/main/java/io/github/open_policy_agent/opa/openapi/utils/OneOfDeserializer.java @@ -3,7 +3,6 @@ */ package io.github.open_policy_agent.opa.openapi.utils; -import java.io.IOException; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; import java.math.BigDecimal; @@ -17,24 +16,19 @@ import java.util.stream.Collectors; import io.github.open_policy_agent.opa.openapi.utils.Utils.TypeReferenceWithShape; - -import com.fasterxml.jackson.core.JsonParser; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.core.TreeNode; -import com.fasterxml.jackson.core.type.TypeReference; -import com.fasterxml.jackson.databind.DatabindException; -import com.fasterxml.jackson.databind.DeserializationContext; -import com.fasterxml.jackson.databind.JavaType; -import com.fasterxml.jackson.databind.JsonMappingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.deser.std.StdDeserializer; - +import tools.jackson.core.JsonParser; +import tools.jackson.core.TreeNode; +import tools.jackson.core.type.TypeReference; +import tools.jackson.databind.DatabindException; +import tools.jackson.databind.DeserializationContext; +import tools.jackson.databind.JavaType; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.deser.std.StdDeserializer; +import tools.jackson.databind.exc.JsonNodeException; public class OneOfDeserializer extends StdDeserializer { - private static final long serialVersionUID = -1; - - private final transient List typeReferences; // oneOf subschemas + private final transient List typeReferences; // oneOf subschemas private final Class cls; private final boolean strict; private final ObjectMapper mapper; @@ -60,13 +54,13 @@ protected OneOfDeserializer(Class cls, boolean strict, TypeReferenceWithShape } @Override - public T deserialize(JsonParser p, DeserializationContext ctxt) throws IOException { + public T deserialize(JsonParser p, DeserializationContext ctxt) { return deserializeOneOf(mapper, p, ctxt, typeReferences, cls, strict); } private static T deserializeOneOf(ObjectMapper mapper, JsonParser p, DeserializationContext ctxt, - List typeReferences, Class cls, boolean strict) throws IOException { - TreeNode tree = p.getCodec().readTree(p); + List typeReferences, Class cls, boolean strict) { + TreeNode tree = p.readValueAsTree(); // TODO don't have to generate json because can use tree.traverse to get a // parser to read value, perf advantage and can stop plugging in ObjectMapper String json = mapper.writeValueAsString(tree); @@ -74,7 +68,7 @@ private static T deserializeOneOf(ObjectMapper mapper, JsonParser p, Deseria } private static T deserializeOneOf(ObjectMapper mapper, String json, List typeReferences, Class cls, - DeserializationContext ctxt, boolean strict) throws JsonProcessingException { + DeserializationContext ctxt, boolean strict) { List> matches = new ArrayList<>(); for (TypeReferenceWithShape c : typeReferences) { // try to deserialize with each of the member classes @@ -98,7 +92,7 @@ private static T deserializeOneOf(ObjectMapper mapper, String json, List 1) { if (strict) { - throw JsonMappingException.from(ctxt, + throw JsonNodeException.from(ctxt, "json matched more than one of the possible type references, matches are: " + typeNames(matches) + " - json=\n" + json); } else { @@ -106,7 +100,7 @@ private static T deserializeOneOf(ObjectMapper mapper, String json, List List parseQueryParams(Class type, T queryParams, Map>> globals) throws Exception { @@ -66,8 +65,7 @@ public static List parseQueryParams(Class return allParams; } - private static List parseSerializedParams(QueryParamsMetadata queryParamsMetadata, Object value) - throws JsonProcessingException { + private static List parseSerializedParams(QueryParamsMetadata queryParamsMetadata, Object value) { List params = new ArrayList<>(); switch (queryParamsMetadata.serialization) { case "json": diff --git a/src/main/java/io/github/open_policy_agent/opa/openapi/utils/RequestBody.java b/src/main/java/io/github/open_policy_agent/opa/openapi/utils/RequestBody.java index ff2b4042..d0a7e55c 100644 --- a/src/main/java/io/github/open_policy_agent/opa/openapi/utils/RequestBody.java +++ b/src/main/java/io/github/open_policy_agent/opa/openapi/utils/RequestBody.java @@ -16,8 +16,7 @@ import java.util.regex.Pattern; import org.openapitools.jackson.nullable.JsonNullable; - -import com.fasterxml.jackson.databind.ObjectMapper; +import tools.jackson.databind.ObjectMapper; public final class RequestBody { private static final Map SERIALIZATION_METHOD_TO_CONTENT_TYPE = Map.of("json", "application/json", diff --git a/src/main/java/io/github/open_policy_agent/opa/openapi/utils/TypedObject.java b/src/main/java/io/github/open_policy_agent/opa/openapi/utils/TypedObject.java index de1d302c..9986e60e 100644 --- a/src/main/java/io/github/open_policy_agent/opa/openapi/utils/TypedObject.java +++ b/src/main/java/io/github/open_policy_agent/opa/openapi/utils/TypedObject.java @@ -1,16 +1,14 @@ -/* +/* * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. */ package io.github.open_policy_agent.opa.openapi.utils; -import java.io.IOException; - -import com.fasterxml.jackson.core.JsonGenerator; -import com.fasterxml.jackson.core.type.TypeReference; -import com.fasterxml.jackson.databind.SerializerProvider; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; -import com.fasterxml.jackson.databind.ser.std.StdSerializer; import io.github.open_policy_agent.opa.openapi.utils.Utils.JsonShape; +import tools.jackson.core.JsonGenerator; +import tools.jackson.core.type.TypeReference; +import tools.jackson.databind.SerializationContext; +import tools.jackson.databind.annotation.JsonSerialize; +import tools.jackson.databind.ser.std.StdSerializer; @JsonSerialize(using = TypedObject.Serializer.class) public class TypedObject { @@ -48,16 +46,14 @@ public static TypedObject of(T value, JsonShape shape, TypeReference type public static final class Serializer extends StdSerializer { - private static final long serialVersionUID = -1; - public Serializer() { super(TypedObject.class); } @Override - public void serialize(TypedObject value, JsonGenerator gen, SerializerProvider provider) throws IOException { + public void serialize(TypedObject value, JsonGenerator gen, SerializationContext ctxt) { Object o = Utils.convertToShape(value.value(),value.shape(), value.typeReference()); - provider.defaultSerializeValue(o, gen); + ctxt.findPrimaryPropertySerializer(o.getClass(), null).serialize(o, gen, ctxt); } } diff --git a/src/main/java/io/github/open_policy_agent/opa/openapi/utils/Utils.java b/src/main/java/io/github/open_policy_agent/opa/openapi/utils/Utils.java index 25f2d70c..c9e3ca2f 100644 --- a/src/main/java/io/github/open_policy_agent/opa/openapi/utils/Utils.java +++ b/src/main/java/io/github/open_policy_agent/opa/openapi/utils/Utils.java @@ -55,16 +55,15 @@ import org.apache.commons.io.IOUtils; import org.openapitools.jackson.nullable.JsonNullable; - -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.core.type.TypeReference; -import com.fasterxml.jackson.databind.JavaType; -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.node.IntNode; -import com.fasterxml.jackson.databind.node.ObjectNode; -import com.fasterxml.jackson.databind.node.TextNode; -import com.fasterxml.jackson.databind.type.TypeFactory; +import tools.jackson.core.JacksonException; +import tools.jackson.core.type.TypeReference; +import tools.jackson.databind.JavaType; +import tools.jackson.databind.JsonNode; +import tools.jackson.databind.ObjectMapper; +import tools.jackson.databind.node.IntNode; +import tools.jackson.databind.node.ObjectNode; +import tools.jackson.databind.node.StringNode; +import tools.jackson.databind.type.TypeFactory; public final class Utils { @@ -89,7 +88,7 @@ public static String generateURL(String baseURL, String path) } public static String generateURL(Class type, String baseURL, String path, JsonNullable params, - Map>> globals) throws JsonProcessingException, IllegalArgumentException, IllegalAccessException { + Map>> globals) throws JacksonException, IllegalArgumentException, IllegalAccessException { if (params.isPresent() && params.get() != null) { return generateURL(type, baseURL, path, params.get(), globals); } else { @@ -98,7 +97,7 @@ public static String generateURL(Class type, String baseURL, String path, } public static String generateURL(Class type, String baseURL, String path, Optional params, - Map>> globals) throws JsonProcessingException, IllegalArgumentException, IllegalAccessException { + Map>> globals) throws JacksonException, IllegalArgumentException, IllegalAccessException { if (params.isPresent()) { return generateURL(type, baseURL, path, params.get(), globals); } else { @@ -108,7 +107,7 @@ public static String generateURL(Class type, String baseURL, String path, public static String generateURL(Class type, String baseURL, String path, T params, Map>> globals) - throws IllegalArgumentException, IllegalAccessException, JsonProcessingException { + throws IllegalArgumentException, IllegalAccessException, JacksonException { if (baseURL != null && baseURL.endsWith("/")) { baseURL = baseURL.substring(0, baseURL.length() - 1); } @@ -481,8 +480,7 @@ public static Object populateGlobal(Object value, String fieldName, String param return value; } - private static Map parseSerializedParams(PathParamsMetadata pathParamsMetadata, Object value) - throws JsonProcessingException { + private static Map parseSerializedParams(PathParamsMetadata pathParamsMetadata, Object value) { Map params = new HashMap<>(); switch (pathParamsMetadata.serialization) { case "json": @@ -561,12 +559,12 @@ public static List toList(Object o) { public static T readDefaultOrConstValue(String name, String json, TypeReference typeReference) { try { return readValue(json, typeReference); - } catch (JsonProcessingException e) { + } catch (JacksonException e) { throw new IllegalArgumentException("default/const value did not match the expected type, name=" + name + ",json=\n" + json, e); } } - private static T readValue(String json, TypeReference typeReference) throws JsonProcessingException { + private static T readValue(String json, TypeReference typeReference) throws JacksonException { return JSON.getMapper().readValue(json, typeReference); } @@ -925,28 +923,24 @@ public static ObjectMapper mapper() { public static T asType(EventStreamMessage x, ObjectMapper mapper, TypeReference typeReference) { try { - try { - String json = json(x, mapper, false); - return mapper.readValue(json, typeReference); - } catch (JsonProcessingException e) { - // retry with the assumption that data field is plain text - String json = json(x, mapper, true); - return mapper.readValue(json, typeReference); - } - } catch (JsonProcessingException e) { - throw new RuntimeException(e); + String json = json(x, mapper, false); + return mapper.readValue(json, typeReference); + } catch (JacksonException e) { + // retry with the assumption that data field is plain text + String json = json(x, mapper, true); + return mapper.readValue(json, typeReference); } } public static String json(EventStreamMessage m, ObjectMapper mapper, boolean dataIsPlainText) - throws JsonProcessingException { + throws JacksonException { ObjectNode node = mapper.createObjectNode(); - m.event().ifPresent(value -> node.set("event", new TextNode(value))); - m.id().ifPresent(value -> node.set("id", new TextNode(value))); + m.event().ifPresent(value -> node.set("event", new StringNode(value))); + m.id().ifPresent(value -> node.set("id", new StringNode(value))); m.retryMs().ifPresent(value -> node.set("retry", new IntNode(value))); // data is always present (but may be an empty string) if (dataIsPlainText || m.data().trim().isEmpty()) { - node.set("data", new TextNode(m.data())); + node.set("data", new StringNode(m.data())); } else { JsonNode tree = mapper.readTree(m.data()); node.set("data", tree); @@ -1330,22 +1324,18 @@ public static Optional toOptional(JsonNullable a) { public static String sortJSONObjectKeys(String json, String... fields) { var fieldList = List.of(fields); var m = new ObjectMapper(); - try { - JsonNode tree = m.readTree(json); - if (!tree.isObject()) { - return json; - } else if (fieldList.isEmpty()) { - return m.writeValueAsString(sortKeys(m, tree)); - } else { - var node = (ObjectNode) tree; - var list = toList(node.fields()); - list.stream() // - .filter(entry -> fieldList.contains(entry.getKey())) // - .forEach(entry -> node.set(entry.getKey(), sortKeys(m, entry.getValue()))); - return m.writeValueAsString(node); - } - } catch (JsonProcessingException e) { - throw new RuntimeException(e); + JsonNode tree = m.readTree(json); + if (!tree.isObject()) { + return json; + } else if (fieldList.isEmpty()) { + return m.writeValueAsString(sortKeys(m, tree)); + } else { + var node = (ObjectNode) tree; + var list = List.copyOf(node.properties()); + list.stream() // + .filter(entry -> fieldList.contains(entry.getKey())) // + .forEach(entry -> node.set(entry.getKey(), sortKeys(m, entry.getValue()))); + return m.writeValueAsString(node); } } @@ -1353,22 +1343,14 @@ private static JsonNode sortKeys(ObjectMapper m, JsonNode node) { if (!node.isObject()) { return node; } else { - var list = toList(node.fields()); - list.sort((a, b) -> a.getKey().compareTo(b.getKey())); + var list = List.copyOf(node.properties()); + list.sort(Entry.comparingByKey()); var map = new LinkedHashMap(); list.forEach(x -> map.put(x.getKey(), x.getValue())); return new ObjectNode(m.getNodeFactory(), map); } } - private static List toList(Iterator it) { - var list = new ArrayList(); - while (it.hasNext()) { - list.add(it.next()); - } - return list; - } - public static T valueOrElse(T value, T valueIfNotPresent) { return value != null ? value : valueIfNotPresent; } diff --git a/src/test/java/io/github/open_policy_agent/opa/EOPATest.java b/src/test/java/io/github/open_policy_agent/opa/EOPATest.java index a8537d7d..f97e2f57 100644 --- a/src/test/java/io/github/open_policy_agent/opa/EOPATest.java +++ b/src/test/java/io/github/open_policy_agent/opa/EOPATest.java @@ -1,16 +1,19 @@ package io.github.open_policy_agent.opa; -import com.fasterxml.jackson.core.type.TypeReference; import io.github.open_policy_agent.opa.utils.OPALatencyMeasuringHTTPClient; import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.AutoClose; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import org.slf4j.LoggerFactory; import org.testcontainers.containers.BindMode; import org.testcontainers.containers.GenericContainer; +import org.testcontainers.containers.output.Slf4jLogConsumer; import org.testcontainers.containers.wait.strategy.Wait; import org.testcontainers.images.builder.ImageFromDockerfile; import org.testcontainers.junit.jupiter.Container; import org.testcontainers.junit.jupiter.Testcontainers; +import tools.jackson.core.type.TypeReference; import java.lang.reflect.Field; import java.net.URI; @@ -54,12 +57,16 @@ class EOPATest { .withFileFromClasspath("Dockerfile", "eopa.Dockerfile") .withFileFromClasspath("nginx.conf", "nginx.conf") .withFileFromClasspath("entrypoint.sh", "entrypoint.sh")) + .withLogConsumer(new Slf4jLogConsumer(LoggerFactory.getLogger("eopa"))) .withExposedPorts(opaPort, altPort) .waitingFor(Wait.forHttp("/health").forPort(opaPort)) .withFileSystemBind("./testdata/simple", "/policy", BindMode.READ_ONLY) .withCommand("run -s -a 0.0.0.0:8181 --authentication=token --authorization=basic --bundle /policy"); //CHECKSTYLE:ON + @AutoClose + HttpClient client = HttpClient.newHttpClient(); + @BeforeEach public void setUp() throws Exception { eopaAddress = "http://" + eopac.getHost() + ":" + eopac.getMappedPort(opaPort); @@ -89,7 +96,6 @@ public void testEOPAHealth() { // This test just makes sure that we can reach the OPAClient health endpoint // and that it returns the expected {} value. - HttpClient client = HttpClient.newHttpClient(); HttpRequest req = HttpRequest.newBuilder().uri(URI.create(eopaAddress + "/health")).build(); HttpResponse resp = null; @@ -113,7 +119,6 @@ public void testEOPAHealthAlternate() { // API on the "alternate", reverse-proxy based OPA that has a URL // prefix. - HttpClient client = HttpClient.newHttpClient(); HttpRequest req = HttpRequest.newBuilder().uri(URI.create(eopaAltAddress + "/health")).build(); HttpResponse resp = null; diff --git a/src/test/java/io/github/open_policy_agent/opa/OPATest.java b/src/test/java/io/github/open_policy_agent/opa/OPATest.java index f3a5f13a..6fe36e04 100644 --- a/src/test/java/io/github/open_policy_agent/opa/OPATest.java +++ b/src/test/java/io/github/open_policy_agent/opa/OPATest.java @@ -1,18 +1,20 @@ package io.github.open_policy_agent.opa; -import com.fasterxml.jackson.core.type.TypeReference; import io.github.open_policy_agent.opa.openapi.utils.HTTPClient; import io.github.open_policy_agent.opa.utils.OPAHTTPClient; import io.github.open_policy_agent.opa.utils.OPALatencyMeasuringHTTPClient; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import org.slf4j.LoggerFactory; import org.testcontainers.containers.BindMode; import org.testcontainers.containers.GenericContainer; +import org.testcontainers.containers.output.Slf4jLogConsumer; import org.testcontainers.containers.wait.strategy.Wait; import org.testcontainers.images.builder.ImageFromDockerfile; import org.testcontainers.junit.jupiter.Container; import org.testcontainers.junit.jupiter.Testcontainers; +import tools.jackson.core.type.TypeReference; import java.lang.reflect.Field; import java.net.URI; @@ -69,6 +71,7 @@ class OPATest { .withFileFromClasspath("nginx.conf", "nginx.conf") .withFileFromClasspath("entrypoint.sh", "entrypoint.sh") ) + .withLogConsumer(new Slf4jLogConsumer(LoggerFactory.getLogger("opa"))) .withExposedPorts(opaPort, altPort) .waitingFor(Wait.forHttp("/health").forPort(opaPort)) .withFileSystemBind("./testdata/simple", "/policy", BindMode.READ_ONLY) diff --git a/src/test/resources/entrypoint.sh b/src/test/resources/entrypoint.sh index ffe78347..db090bed 100644 --- a/src/test/resources/entrypoint.sh +++ b/src/test/resources/entrypoint.sh @@ -1,4 +1,4 @@ -#!/usr/bin/env bash +#!/bin/sh set -e set -u diff --git a/src/test/resources/eopa.Dockerfile b/src/test/resources/eopa.Dockerfile index 751096f0..7827c4b9 100644 --- a/src/test/resources/eopa.Dockerfile +++ b/src/test/resources/eopa.Dockerfile @@ -12,5 +12,5 @@ RUN chmod +x /entrypoint.sh # modified. COPY --from=ghcr.io/open-policy-agent/eopa:latest /ko-app/eopa /usr/bin/opa -ENTRYPOINT ["/entrypoint.sh"] +ENTRYPOINT ["sh", "/entrypoint.sh"] diff --git a/src/test/resources/opa.Dockerfile b/src/test/resources/opa.Dockerfile index ff1270d5..d39c02ef 100644 --- a/src/test/resources/opa.Dockerfile +++ b/src/test/resources/opa.Dockerfile @@ -10,5 +10,5 @@ RUN chmod +x /entrypoint.sh COPY --from=openpolicyagent/opa:latest-static /opa /usr/bin/opa -ENTRYPOINT ["/entrypoint.sh"] +ENTRYPOINT ["sh", "/entrypoint.sh"]