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));
}