diff --git a/providers/flagd/pom.xml b/providers/flagd/pom.xml
index b8f728997..437e9e145 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/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..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
@@ -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/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();
diff --git a/providers/jsonlogic-eval-provider/pom.xml b/providers/jsonlogic-eval-provider/pom.xml
index 80a230ec6..9148a1a2f 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