From 525a2f147f15225913c97c0225512ab306bce976 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Sat, 14 Jun 2025 16:53:09 +0000
Subject: [PATCH 1/4] fix(deps): update dependency
io.github.jamsesso:json-logic-java to v1.1.0
---
providers/flagd/pom.xml | 2 +-
providers/jsonlogic-eval-provider/pom.xml | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/providers/flagd/pom.xml b/providers/flagd/pom.xml
index 713911538..723b4b2c6 100644
--- a/providers/flagd/pom.xml
+++ b/providers/flagd/pom.xml
@@ -78,7 +78,7 @@
io.github.jamsesso
json-logic-java
- 1.0.9
+ 1.1.0
diff --git a/providers/jsonlogic-eval-provider/pom.xml b/providers/jsonlogic-eval-provider/pom.xml
index dbc754d2e..11fc404ae 100644
--- a/providers/jsonlogic-eval-provider/pom.xml
+++ b/providers/jsonlogic-eval-provider/pom.xml
@@ -34,7 +34,7 @@
io.github.jamsesso
json-logic-java
- 1.0.9
+ 1.1.0
org.json
From 021a50bca9089335626610c5c78c90973e5492f2 Mon Sep 17 00:00:00 2001
From: "christian.lutnik"
Date: Tue, 17 Jun 2025 11:39:37 +0200
Subject: [PATCH 2/4] Fix syntax errors
Signed-off-by: christian.lutnik
---
.../process/targeting/Fractional.java | 21 ++++++++++---------
.../resolver/process/targeting/SemVer.java | 8 +++----
.../process/targeting/StringComp.java | 2 +-
.../sync/SyncStreamQueueSourceTest.java | 13 +++++-------
.../process/targeting/FractionalTest.java | 2 +-
.../process/targeting/SemVerTest.java | 4 ++--
.../process/targeting/StringCompTest.java | 10 ++++-----
7 files changed, 29 insertions(+), 31 deletions(-)
diff --git a/providers/flagd/src/main/java/dev/openfeature/contrib/providers/flagd/resolver/process/targeting/Fractional.java b/providers/flagd/src/main/java/dev/openfeature/contrib/providers/flagd/resolver/process/targeting/Fractional.java
index b3f6d7c01..35176f041 100644
--- a/providers/flagd/src/main/java/dev/openfeature/contrib/providers/flagd/resolver/process/targeting/Fractional.java
+++ b/providers/flagd/src/main/java/dev/openfeature/contrib/providers/flagd/resolver/process/targeting/Fractional.java
@@ -18,7 +18,7 @@ public String key() {
return "fractional";
}
- public Object evaluate(List arguments, Object data) throws JsonLogicEvaluationException {
+ public Object evaluate(List arguments, Object data, String jsonPath) throws JsonLogicEvaluationException {
if (arguments.size() < 2) {
return null;
}
@@ -53,7 +53,7 @@ public Object evaluate(List arguments, Object data) throws JsonLogicEvaluationEx
try {
for (Object dist : distibutions) {
- FractionProperty fractionProperty = new FractionProperty(dist);
+ FractionProperty fractionProperty = new FractionProperty(dist, jsonPath);
propertyList.add(fractionProperty);
totalWeight += fractionProperty.getWeight();
}
@@ -63,11 +63,11 @@ public Object evaluate(List arguments, Object data) throws JsonLogicEvaluationEx
}
// find distribution
- return distributeValue(bucketBy, propertyList, totalWeight);
+ return distributeValue(bucketBy, propertyList, totalWeight, jsonPath);
}
private static String distributeValue(
- final String hashKey, final List propertyList, int totalWeight)
+ final String hashKey, final List propertyList, int totalWeight, String jsonPath)
throws JsonLogicEvaluationException {
byte[] bytes = hashKey.getBytes(StandardCharsets.UTF_8);
int mmrHash = MurmurHash3.hash32x86(bytes, 0, bytes.length, 0);
@@ -83,7 +83,7 @@ private static String distributeValue(
}
// this shall not be reached
- throw new JsonLogicEvaluationException("Unable to find a correct bucket");
+ throw new JsonLogicEvaluationException("Unable to find a correct bucket", jsonPath);
}
@Getter
@@ -96,27 +96,28 @@ protected final void finalize() {
// DO NOT REMOVE, spotbugs: CT_CONSTRUCTOR_THROW
}
- FractionProperty(final Object from) throws JsonLogicException {
+ FractionProperty(final Object from, String jsonPath) throws JsonLogicException {
if (!(from instanceof List>)) {
- throw new JsonLogicException("Property is not an array");
+ throw new JsonLogicException("Property is not an array", jsonPath);
}
final List> array = (List) from;
if (array.isEmpty()) {
- throw new JsonLogicException("Fraction property needs at least one element");
+ throw new JsonLogicException("Fraction property needs at least one element", jsonPath);
}
// first must be a string
if (!(array.get(0) instanceof String)) {
- throw new JsonLogicException("First element of the fraction property is not a string variant");
+ throw new JsonLogicException("First element of the fraction property is not a string variant",
+ jsonPath);
}
variant = (String) array.get(0);
if (array.size() >= 2) {
// second element must be a number
if (!(array.get(1) instanceof Number)) {
- throw new JsonLogicException("Second element of the fraction property is not a number");
+ throw new JsonLogicException("Second element of the fraction property is not a number", jsonPath);
}
weight = ((Number) array.get(1)).intValue();
} else {
diff --git a/providers/flagd/src/main/java/dev/openfeature/contrib/providers/flagd/resolver/process/targeting/SemVer.java b/providers/flagd/src/main/java/dev/openfeature/contrib/providers/flagd/resolver/process/targeting/SemVer.java
index 223d62f9a..2ab1802a5 100644
--- a/providers/flagd/src/main/java/dev/openfeature/contrib/providers/flagd/resolver/process/targeting/SemVer.java
+++ b/providers/flagd/src/main/java/dev/openfeature/contrib/providers/flagd/resolver/process/targeting/SemVer.java
@@ -37,7 +37,7 @@ public String key() {
return "sem_ver";
}
- public Object evaluate(List arguments, Object data) throws JsonLogicEvaluationException {
+ public Object evaluate(List arguments, Object data, String jsonPath) throws JsonLogicEvaluationException {
if (arguments.size() != 3) {
log.debug("Incorrect number of arguments for sem_ver operator");
@@ -75,10 +75,10 @@ public Object evaluate(List arguments, Object data) throws JsonLogicEvaluationEx
return null;
}
- return compare(arg2Parsed, arg1Parsed, arg3Parsed);
+ return compare(arg2Parsed, arg1Parsed, arg3Parsed, jsonPath);
}
- private static boolean compare(final String operator, final Semver arg1, final Semver arg2)
+ private static boolean compare(final String operator, final Semver arg1, final Semver arg2, final String jsonPath)
throws JsonLogicEvaluationException {
int comp = arg1.compareTo(arg2);
@@ -102,7 +102,7 @@ private static boolean compare(final String operator, final Semver arg1, final S
return arg1.getMinor() == arg2.getMinor() && arg1.getMajor() == arg2.getMajor();
default:
throw new JsonLogicEvaluationException(
- String.format("Unsupported operator received. Operator: %s", operator));
+ String.format("Unsupported operator received. Operator: %s", operator), jsonPath);
}
}
}
diff --git a/providers/flagd/src/main/java/dev/openfeature/contrib/providers/flagd/resolver/process/targeting/StringComp.java b/providers/flagd/src/main/java/dev/openfeature/contrib/providers/flagd/resolver/process/targeting/StringComp.java
index ce3490ead..9956ca8c6 100644
--- a/providers/flagd/src/main/java/dev/openfeature/contrib/providers/flagd/resolver/process/targeting/StringComp.java
+++ b/providers/flagd/src/main/java/dev/openfeature/contrib/providers/flagd/resolver/process/targeting/StringComp.java
@@ -17,7 +17,7 @@ public String key() {
return type.key;
}
- public Object evaluate(List arguments, Object data) throws JsonLogicEvaluationException {
+ public Object evaluate(List arguments, Object data, String jsonPath) throws JsonLogicEvaluationException {
if (arguments.size() != 2) {
log.debug("Incorrect number of arguments for String comparison operator");
return null;
diff --git a/providers/flagd/src/test/java/dev/openfeature/contrib/providers/flagd/resolver/process/storage/connector/sync/SyncStreamQueueSourceTest.java b/providers/flagd/src/test/java/dev/openfeature/contrib/providers/flagd/resolver/process/storage/connector/sync/SyncStreamQueueSourceTest.java
index 17ad1864a..64ed0e069 100644
--- a/providers/flagd/src/test/java/dev/openfeature/contrib/providers/flagd/resolver/process/storage/connector/sync/SyncStreamQueueSourceTest.java
+++ b/providers/flagd/src/test/java/dev/openfeature/contrib/providers/flagd/resolver/process/storage/connector/sync/SyncStreamQueueSourceTest.java
@@ -27,7 +27,6 @@
import java.util.concurrent.TimeUnit;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
-import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer;
class SyncStreamQueueSourceTest {
@@ -48,13 +47,11 @@ public void init() throws Exception {
stub = mock(FlagSyncServiceStub.class);
when(stub.withDeadlineAfter(anyLong(), any())).thenReturn(stub);
- doAnswer(new Answer() {
- public Void answer(InvocationOnMock invocation) {
- latch.countDown();
- Object[] args = invocation.getArguments();
- observer = (QueueingStreamObserver) args[1];
- return null;
- }
+ doAnswer((Answer) invocation -> {
+ Object[] args = invocation.getArguments();
+ observer = (QueueingStreamObserver) args[1];
+ latch.countDown();
+ return null;
})
.when(stub)
.syncFlags(any(SyncFlagsRequest.class), any(QueueingStreamObserver.class)); // Mock the initialize
diff --git a/providers/flagd/src/test/java/dev/openfeature/contrib/providers/flagd/resolver/process/targeting/FractionalTest.java b/providers/flagd/src/test/java/dev/openfeature/contrib/providers/flagd/resolver/process/targeting/FractionalTest.java
index ac3e6e19e..4520c0c66 100644
--- a/providers/flagd/src/test/java/dev/openfeature/contrib/providers/flagd/resolver/process/targeting/FractionalTest.java
+++ b/providers/flagd/src/test/java/dev/openfeature/contrib/providers/flagd/resolver/process/targeting/FractionalTest.java
@@ -41,7 +41,7 @@ void validate_emptyJson_targetingReturned(@ConvertWith(FileContentConverter.clas
data.put(FLAGD_PROPS_KEY, flagdProperties);
// when
- Object evaluate = fractional.evaluate(testData.rule, data);
+ Object evaluate = fractional.evaluate(testData.rule, data, "path");
// then
assertEquals(testData.result, evaluate);
diff --git a/providers/flagd/src/test/java/dev/openfeature/contrib/providers/flagd/resolver/process/targeting/SemVerTest.java b/providers/flagd/src/test/java/dev/openfeature/contrib/providers/flagd/resolver/process/targeting/SemVerTest.java
index 36a199e96..9448ca79c 100644
--- a/providers/flagd/src/test/java/dev/openfeature/contrib/providers/flagd/resolver/process/targeting/SemVerTest.java
+++ b/providers/flagd/src/test/java/dev/openfeature/contrib/providers/flagd/resolver/process/targeting/SemVerTest.java
@@ -33,7 +33,7 @@ void testValidCases(List args) throws JsonLogicEvaluationException {
final SemVer semVer = new SemVer();
// when
- Object result = semVer.evaluate(args, new Object());
+ Object result = semVer.evaluate(args, new Object(), "jsonPath");
// then
if (!(result instanceof Boolean)) {
@@ -58,6 +58,6 @@ void testInvalidCases(List args) throws JsonLogicEvaluationException {
final SemVer semVer = new SemVer();
// then
- assertNull(semVer.evaluate(args, new Object()));
+ assertNull(semVer.evaluate(args, new Object(), "jsonPath"));
}
}
diff --git a/providers/flagd/src/test/java/dev/openfeature/contrib/providers/flagd/resolver/process/targeting/StringCompTest.java b/providers/flagd/src/test/java/dev/openfeature/contrib/providers/flagd/resolver/process/targeting/StringCompTest.java
index 2ba8268dc..028f7ac8f 100644
--- a/providers/flagd/src/test/java/dev/openfeature/contrib/providers/flagd/resolver/process/targeting/StringCompTest.java
+++ b/providers/flagd/src/test/java/dev/openfeature/contrib/providers/flagd/resolver/process/targeting/StringCompTest.java
@@ -15,7 +15,7 @@ public void startsWithEvaluation() throws JsonLogicEvaluationException {
final StringComp startsWith = new StringComp(StringComp.Type.STARTS_WITH);
// when
- Object result = startsWith.evaluate(Arrays.asList("abc@123.com", "abc"), new Object());
+ Object result = startsWith.evaluate(Arrays.asList("abc@123.com", "abc"), new Object(), "jsonPath");
// then
if (!(result instanceof Boolean)) {
@@ -31,7 +31,7 @@ public void endsWithEvaluation() throws JsonLogicEvaluationException {
final StringComp endsWith = new StringComp(StringComp.Type.ENDS_WITH);
// when
- Object result = endsWith.evaluate(Arrays.asList("abc@123.com", "123.com"), new Object());
+ Object result = endsWith.evaluate(Arrays.asList("abc@123.com", "123.com"), new Object(), "jsonPath");
// then
if (!(result instanceof Boolean)) {
@@ -47,7 +47,7 @@ public void invalidTypeCheckArg1() throws JsonLogicEvaluationException {
final StringComp operator = new StringComp(StringComp.Type.STARTS_WITH);
// when
- Object result = operator.evaluate(Arrays.asList(1230, "12"), new Object());
+ Object result = operator.evaluate(Arrays.asList(1230, "12"), new Object(), "jsonPath");
// then
assertThat(result).isNull();
@@ -59,7 +59,7 @@ public void invalidTypeCheckArg2() throws JsonLogicEvaluationException {
final StringComp operator = new StringComp(StringComp.Type.STARTS_WITH);
// when
- Object result = operator.evaluate(Arrays.asList("abc@123.com", 123), new Object());
+ Object result = operator.evaluate(Arrays.asList("abc@123.com", 123), new Object(), "jsonPath");
// then
assertThat(result).isNull();
@@ -71,7 +71,7 @@ public void invalidNumberOfArgs() throws JsonLogicEvaluationException {
final StringComp operator = new StringComp(StringComp.Type.STARTS_WITH);
// when
- Object result = operator.evaluate(Arrays.asList("123", "12", "1"), new Object());
+ Object result = operator.evaluate(Arrays.asList("123", "12", "1"), new Object(), "jsonPath");
// then
assertThat(result).isNull();
From 93f9cf98765d1a3ce0e50646ab83e6f6fdf16b8f Mon Sep 17 00:00:00 2001
From: "christian.lutnik"
Date: Wed, 18 Jun 2025 08:36:31 +0200
Subject: [PATCH 3/4] Fix format
Signed-off-by: christian.lutnik
---
.../providers/flagd/resolver/process/targeting/Fractional.java | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/providers/flagd/src/main/java/dev/openfeature/contrib/providers/flagd/resolver/process/targeting/Fractional.java b/providers/flagd/src/main/java/dev/openfeature/contrib/providers/flagd/resolver/process/targeting/Fractional.java
index 35176f041..a3e381d5a 100644
--- a/providers/flagd/src/main/java/dev/openfeature/contrib/providers/flagd/resolver/process/targeting/Fractional.java
+++ b/providers/flagd/src/main/java/dev/openfeature/contrib/providers/flagd/resolver/process/targeting/Fractional.java
@@ -117,7 +117,8 @@ protected final void finalize() {
if (array.size() >= 2) {
// second element must be a number
if (!(array.get(1) instanceof Number)) {
- throw new JsonLogicException("Second element of the fraction property is not a number", jsonPath);
+ throw new JsonLogicException("Second element of the fraction property is not a number",
+ jsonPath);
}
weight = ((Number) array.get(1)).intValue();
} else {
From a5769a829fe6c2be51145d5a4bdb7de27287d55b Mon Sep 17 00:00:00 2001
From: "christian.lutnik"
Date: Wed, 18 Jun 2025 10:56:01 +0200
Subject: [PATCH 4/4] Fix format
Signed-off-by: christian.lutnik
---
.../flagd/resolver/process/targeting/Fractional.java | 7 +++----
1 file changed, 3 insertions(+), 4 deletions(-)
diff --git a/providers/flagd/src/main/java/dev/openfeature/contrib/providers/flagd/resolver/process/targeting/Fractional.java b/providers/flagd/src/main/java/dev/openfeature/contrib/providers/flagd/resolver/process/targeting/Fractional.java
index a3e381d5a..6658aab78 100644
--- a/providers/flagd/src/main/java/dev/openfeature/contrib/providers/flagd/resolver/process/targeting/Fractional.java
+++ b/providers/flagd/src/main/java/dev/openfeature/contrib/providers/flagd/resolver/process/targeting/Fractional.java
@@ -109,16 +109,15 @@ protected final void finalize() {
// first must be a string
if (!(array.get(0) instanceof String)) {
- throw new JsonLogicException("First element of the fraction property is not a string variant",
- jsonPath);
+ throw new JsonLogicException(
+ "First element of the fraction property is not a string variant", jsonPath);
}
variant = (String) array.get(0);
if (array.size() >= 2) {
// second element must be a number
if (!(array.get(1) instanceof Number)) {
- throw new JsonLogicException("Second element of the fraction property is not a number",
- jsonPath);
+ throw new JsonLogicException("Second element of the fraction property is not a number", jsonPath);
}
weight = ((Number) array.get(1)).intValue();
} else {