diff --git a/CHANGES.txt b/CHANGES.txt index 1408609..c0dd319 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,3 +1,7 @@ +1.2.1 (October 6, 2025) + - Updated dependencies to fix vulnerabilities. + - Added support for the shutdown feature. + 1.2.0 (September 3, 2025) - Updated `io.split.client` dependency to 4.16.1 - Updated `dev.openfeature` dependency to 1.17.0 diff --git a/README.md b/README.md index 36f6021..095d229 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ This SDK is compatible with Java 11 and higher. io.split.openfeature split-openfeature-provider - 1.2.0 + 1.2.1 ``` ### Configure it diff --git a/pom.xml b/pom.xml index f6e7e56..22278d1 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ 4.0.0 io.split.openfeature split-openfeature-provider - 1.2.0 + 1.2.1 split-openfeature-provider-java Split OpenFeature Java Provider www.split.io @@ -49,11 +49,6 @@ java-client 4.18.1 - - org.apache.httpcomponents - httpclient - 4.5.14 - org.mockito mockito-core @@ -65,16 +60,6 @@ sdk 1.18.1 - - com.fasterxml.jackson.core - jackson-core - 2.20.0 - - - com.fasterxml.jackson.core - jackson-databind - 2.20.0 - @@ -85,6 +70,22 @@ maven-clean-plugin 3.5.0 + + org.owasp + dependency-check-maven + 12.1.6 + + 41aa3456-48f3-466a-a8ea-db1e84caba36 + 7 + + + + + check + + + + maven-resources-plugin diff --git a/src/main/java/io/split/openfeature/SplitProvider.java b/src/main/java/io/split/openfeature/SplitProvider.java index 06982d3..67c43cf 100644 --- a/src/main/java/io/split/openfeature/SplitProvider.java +++ b/src/main/java/io/split/openfeature/SplitProvider.java @@ -158,6 +158,11 @@ public Map transformContext(EvaluationContext context) { return context.asObjectMap(); } + @Override + public void shutdown() { + client.destroy(); + } + private SplitResult evaluateTreatment(String key, EvaluationContext evaluationContext) { String id = evaluationContext.getTargetingKey(); if (id == null || id.isEmpty()) { diff --git a/src/main/java/io/split/openfeature/utils/Serialization.java b/src/main/java/io/split/openfeature/utils/Serialization.java index d3f23f6..5ff2c04 100644 --- a/src/main/java/io/split/openfeature/utils/Serialization.java +++ b/src/main/java/io/split/openfeature/utils/Serialization.java @@ -1,12 +1,10 @@ package io.split.openfeature.utils; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.DeserializationFeature; -import com.fasterxml.jackson.databind.ObjectMapper; +import java.util.Map; + import dev.openfeature.sdk.ErrorCode; import dev.openfeature.sdk.exceptions.ParseError; - -import java.util.Map; +import io.split.client.utils.Json; public class Serialization { @@ -15,10 +13,8 @@ private Serialization() { public static Map stringToMap(final String obj) { try { - return new ObjectMapper() - .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false) - .readValue(obj, Map.class); - } catch (JsonProcessingException e) { + return Json.fromJson(obj, Map.class); + } catch (Exception e) { throw new ParseError(ErrorCode.PARSE_ERROR.name()); } } diff --git a/src/test/java/io/split/openfeature/ClientTest.java b/src/test/java/io/split/openfeature/ClientTest.java index a0ec342..9dd966a 100644 --- a/src/test/java/io/split/openfeature/ClientTest.java +++ b/src/test/java/io/split/openfeature/ClientTest.java @@ -30,14 +30,15 @@ public class ClientTest { OpenFeatureAPI openFeatureAPI; Client client; + SplitClient splitClient; @BeforeEach public void init() { openFeatureAPI = OpenFeatureAPI.getInstance(); try { SplitClientConfig config = SplitClientConfig.builder().splitFile("src/test/resources/split.yaml").build(); - SplitClient client = SplitFactoryBuilder.build("localhost", config).client(); - openFeatureAPI.setProviderAndWait(new SplitProvider(client)); + splitClient = SplitFactoryBuilder.build("localhost", config).client(); + openFeatureAPI.setProviderAndWait(new SplitProvider(splitClient)); } catch (URISyntaxException | IOException e) { System.out.println("Unexpected Exception occurred initializing Split Provider."); } @@ -267,6 +268,13 @@ public void getObjectFailTest() { assertNull(details.getVariant()); } + @Test + public void destroySplitClientTest() { + assertEquals("32", splitClient.getTreatment("key","int_feature")); + openFeatureAPI.shutdown(); + assertEquals("control", splitClient.getTreatment("key","int_feature")); + } + private Value mapToValue(Map map) { return new Value(new MutableStructure(map)); } diff --git a/src/test/java/io/split/openfeature/SplitProviderTest.java b/src/test/java/io/split/openfeature/SplitProviderTest.java index d5c0dc8..14f4575 100644 --- a/src/test/java/io/split/openfeature/SplitProviderTest.java +++ b/src/test/java/io/split/openfeature/SplitProviderTest.java @@ -420,23 +420,23 @@ public void evalStructureComplexTest() { Instant instant = Instant.ofEpochMilli(1665698754828L); Value treatment = mapToValue(Map.of( "string", new Value("blah"), - "int", new Value(10), + "int", new Value(10D), "double", new Value(100D), "bool", new Value(true), "struct", mapToValue(Map.of( "foo", new Value("bar"), - "baz", new Value(10), + "baz", new Value(10D), "innerMap", mapToValue(Map.of( "aa", new Value("bb"))))), "list", new Value( List.of( - new Value(1), + new Value(1D), new Value(true), mapToValue(Map.of( "cc", new Value("dd") )), mapToValue(Map.of( - "ee", new Value(1) + "ee", new Value(1D) )))), "dateTime", new Value(instant) )); @@ -525,6 +525,13 @@ public void trackTrafficTypeErrorTest() { verifyNoInteractions(mockSplitClient); } + @Test + public void destroySplitClientTest() { + SplitProvider provider = new SplitProvider(mockSplitClient); + provider.shutdown(); + verify(mockSplitClient).destroy(); + } + private Value mapToValue(Map map) { return new Value(new MutableStructure(map)); }