diff --git a/README.md b/README.md
index 39adb61..465d37e 100644
--- a/README.md
+++ b/README.md
@@ -18,13 +18,13 @@ This library provides extended validation of fields and field arguments for [gra
com.graphql-java
graphql-java-extended-validation
- 16.0.0
+ 17.0.0
pom
```
```groovy
-compile 'com.graphql-java:graphql-java-extended-validation:16.0.0'
+compile 'com.graphql-java:graphql-java-extended-validation:17.0.0'
```
> Note:
@@ -36,8 +36,10 @@ compile 'com.graphql-java:graphql-java-extended-validation:16.0.0'
> use 15.0.1 or above for graphql-java 15.x and above
>
> use 16.0.0 or above for graphql-java 16.x and above
+>
+> use 17.0.0 or above for graphql-java 17.x and above
-Its currently available from JCenter repo and Maven central.
+It's currently available from Maven central.
# SDL @Directive constraints
diff --git a/build.gradle b/build.gradle
index 8cd0cca..79ddf05 100644
--- a/build.gradle
+++ b/build.gradle
@@ -3,6 +3,7 @@ import java.text.SimpleDateFormat
plugins {
id 'java'
+ id 'groovy'
id 'java-library'
id 'maven'
id 'maven-publish'
@@ -39,8 +40,9 @@ repositories {
dependencies {
- compile "com.graphql-java:graphql-java:16.2"
- compile "org.hibernate.validator:hibernate-validator:6.2.0.Final"
+ compile "com.graphql-java:graphql-java:17.0-beta1"
+ compile "com.graphql-java:graphql-java-extended-scalars:17.0-beta1"
+ compile "org.hibernate.validator:hibernate-validator:7.0.1.Final"
compile "org.glassfish:jakarta.el:4.0.0"
testCompile 'org.slf4j:slf4j-simple:1.7.31'
diff --git a/src/main/java/graphql/validation/constraints/AbstractDirectiveConstraint.java b/src/main/java/graphql/validation/constraints/AbstractDirectiveConstraint.java
index d268689..4b0138d 100644
--- a/src/main/java/graphql/validation/constraints/AbstractDirectiveConstraint.java
+++ b/src/main/java/graphql/validation/constraints/AbstractDirectiveConstraint.java
@@ -193,9 +193,10 @@ protected int getIntArg(GraphQLDirective directive, String argName) {
if (argument == null) {
return assertExpectedArgType(argName, "Int");
}
- Number value = (Number) argument.getValue();
+
+ Number value = GraphQLArgument.getArgumentValue(argument);
if (value == null) {
- value = (Number) argument.getDefaultValue();
+ value = GraphQLArgument.getArgumentDefaultValue(argument);
if (value == null) {
return assertExpectedArgType(argName, "Int");
}
@@ -216,9 +217,9 @@ protected String getStrArg(GraphQLDirective directive, String argName) {
if (argument == null) {
return assertExpectedArgType(argName, "String");
}
- String value = (String) argument.getValue();
+ String value = GraphQLArgument.getArgumentValue(argument);
if (value == null) {
- value = (String) argument.getDefaultValue();
+ value = GraphQLArgument.getArgumentDefaultValue(argument);
if (value == null) {
return assertExpectedArgType(argName, "String");
}
@@ -239,9 +240,9 @@ protected boolean getBoolArg(GraphQLDirective directive, String argName) {
if (argument == null) {
return assertExpectedArgType(argName, "Boolean");
}
- Object value = argument.getValue();
+ Object value = GraphQLArgument.getArgumentValue(argument);
if (value == null) {
- value = argument.getDefaultValue();
+ value = GraphQLArgument.getArgumentDefaultValue(argument);
if (value == null) {
return assertExpectedArgType(argName, "Boolean");
}
@@ -261,9 +262,9 @@ protected String getMessageTemplate(GraphQLDirective directive) {
String msg = null;
GraphQLArgument arg = directive.getArgument("message");
if (arg != null) {
- msg = (String) arg.getValue();
+ msg = GraphQLArgument.getArgumentValue(arg);
if (msg == null) {
- msg = (String) arg.getDefaultValue();
+ msg = GraphQLArgument.getArgumentDefaultValue(arg);
}
}
if (msg == null) {
@@ -316,7 +317,7 @@ protected List mkError(ValidationEnvironment validationEnvironment
*/
protected boolean isStringOrIDOrList(GraphQLInputType inputType) {
return isStringOrID(inputType) ||
- isList(inputType);
+ isList(inputType);
}
/**
diff --git a/src/main/java/graphql/validation/constraints/standard/AbstractDecimalMinMaxConstraint.java b/src/main/java/graphql/validation/constraints/standard/AbstractDecimalMinMaxConstraint.java
index f02688d..1fb9119 100644
--- a/src/main/java/graphql/validation/constraints/standard/AbstractDecimalMinMaxConstraint.java
+++ b/src/main/java/graphql/validation/constraints/standard/AbstractDecimalMinMaxConstraint.java
@@ -2,6 +2,7 @@
import graphql.GraphQLError;
import graphql.Scalars;
+import graphql.scalars.ExtendedScalars;
import graphql.schema.GraphQLDirective;
import graphql.schema.GraphQLInputType;
import graphql.schema.GraphQLScalarType;
@@ -24,24 +25,24 @@ public AbstractDecimalMinMaxConstraint(String name) {
public boolean appliesToType(GraphQLInputType inputType) {
return isOneOfTheseTypes(inputType,
Scalars.GraphQLString, // note we allow strings
- Scalars.GraphQLByte,
- Scalars.GraphQLShort,
+ ExtendedScalars.GraphQLByte,
+ ExtendedScalars.GraphQLShort,
Scalars.GraphQLInt,
- Scalars.GraphQLLong,
- Scalars.GraphQLBigDecimal,
- Scalars.GraphQLBigInteger,
+ ExtendedScalars.GraphQLLong,
+ ExtendedScalars.GraphQLBigDecimal,
+ ExtendedScalars.GraphQLBigInteger,
Scalars.GraphQLFloat
);
}
public List getApplicableTypeNames() {
return Stream.of(Scalars.GraphQLString, // note we allow strings
- Scalars.GraphQLByte,
- Scalars.GraphQLShort,
+ ExtendedScalars.GraphQLByte,
+ ExtendedScalars.GraphQLShort,
Scalars.GraphQLInt,
- Scalars.GraphQLLong,
- Scalars.GraphQLBigDecimal,
- Scalars.GraphQLBigInteger,
+ ExtendedScalars.GraphQLLong,
+ ExtendedScalars.GraphQLBigDecimal,
+ ExtendedScalars.GraphQLBigInteger,
Scalars.GraphQLFloat)
.map(GraphQLScalarType::getName)
.collect(Collectors.toList());
diff --git a/src/main/java/graphql/validation/constraints/standard/AbstractMinMaxConstraint.java b/src/main/java/graphql/validation/constraints/standard/AbstractMinMaxConstraint.java
index 1463e1c..52efb2e 100644
--- a/src/main/java/graphql/validation/constraints/standard/AbstractMinMaxConstraint.java
+++ b/src/main/java/graphql/validation/constraints/standard/AbstractMinMaxConstraint.java
@@ -2,6 +2,7 @@
import graphql.GraphQLError;
import graphql.Scalars;
+import graphql.scalars.ExtendedScalars;
import graphql.schema.GraphQLDirective;
import graphql.schema.GraphQLInputType;
import graphql.schema.GraphQLScalarType;
@@ -24,23 +25,23 @@ public AbstractMinMaxConstraint(String name) {
@Override
public boolean appliesToType(GraphQLInputType inputType) {
return isOneOfTheseTypes(inputType,
- Scalars.GraphQLByte,
- Scalars.GraphQLShort,
+ ExtendedScalars.GraphQLByte,
+ ExtendedScalars.GraphQLShort,
Scalars.GraphQLInt,
- Scalars.GraphQLLong,
- Scalars.GraphQLBigDecimal,
- Scalars.GraphQLBigInteger,
+ ExtendedScalars.GraphQLLong,
+ ExtendedScalars.GraphQLBigDecimal,
+ ExtendedScalars.GraphQLBigInteger,
Scalars.GraphQLFloat
);
}
public List getApplicableTypeNames() {
- return Stream.of(Scalars.GraphQLByte,
- Scalars.GraphQLShort,
+ return Stream.of(ExtendedScalars.GraphQLByte,
+ ExtendedScalars.GraphQLShort,
Scalars.GraphQLInt,
- Scalars.GraphQLLong,
- Scalars.GraphQLBigDecimal,
- Scalars.GraphQLBigInteger,
+ ExtendedScalars.GraphQLLong,
+ ExtendedScalars.GraphQLBigDecimal,
+ ExtendedScalars.GraphQLBigInteger,
Scalars.GraphQLFloat)
.map(GraphQLScalarType::getName)
.collect(toList());
diff --git a/src/main/java/graphql/validation/constraints/standard/AbstractPositiveNegativeConstraint.java b/src/main/java/graphql/validation/constraints/standard/AbstractPositiveNegativeConstraint.java
index b2a89e3..916875d 100644
--- a/src/main/java/graphql/validation/constraints/standard/AbstractPositiveNegativeConstraint.java
+++ b/src/main/java/graphql/validation/constraints/standard/AbstractPositiveNegativeConstraint.java
@@ -2,6 +2,7 @@
import graphql.GraphQLError;
import graphql.Scalars;
+import graphql.scalars.ExtendedScalars;
import graphql.schema.GraphQLDirective;
import graphql.schema.GraphQLInputType;
import graphql.schema.GraphQLScalarType;
@@ -24,23 +25,23 @@ public AbstractPositiveNegativeConstraint(String name) {
@Override
public boolean appliesToType(GraphQLInputType inputType) {
return isOneOfTheseTypes(inputType,
- Scalars.GraphQLByte,
- Scalars.GraphQLShort,
+ ExtendedScalars.GraphQLByte,
+ ExtendedScalars.GraphQLShort,
Scalars.GraphQLInt,
- Scalars.GraphQLLong,
- Scalars.GraphQLBigDecimal,
- Scalars.GraphQLBigInteger,
+ ExtendedScalars.GraphQLLong,
+ ExtendedScalars.GraphQLBigDecimal,
+ ExtendedScalars.GraphQLBigInteger,
Scalars.GraphQLFloat
);
}
public List getApplicableTypeNames() {
- return Stream.of(Scalars.GraphQLByte,
- Scalars.GraphQLShort,
+ return Stream.of(ExtendedScalars.GraphQLByte,
+ ExtendedScalars.GraphQLShort,
Scalars.GraphQLInt,
- Scalars.GraphQLLong,
- Scalars.GraphQLBigDecimal,
- Scalars.GraphQLBigInteger,
+ ExtendedScalars.GraphQLLong,
+ ExtendedScalars.GraphQLBigDecimal,
+ ExtendedScalars.GraphQLBigInteger,
Scalars.GraphQLFloat)
.map(GraphQLScalarType::getName)
.collect(toList());
diff --git a/src/main/java/graphql/validation/constraints/standard/DigitsConstraint.java b/src/main/java/graphql/validation/constraints/standard/DigitsConstraint.java
index 11da22b..c162c36 100644
--- a/src/main/java/graphql/validation/constraints/standard/DigitsConstraint.java
+++ b/src/main/java/graphql/validation/constraints/standard/DigitsConstraint.java
@@ -2,6 +2,7 @@
import graphql.GraphQLError;
import graphql.Scalars;
+import graphql.scalars.ExtendedScalars;
import graphql.schema.GraphQLDirective;
import graphql.schema.GraphQLInputType;
import graphql.schema.GraphQLScalarType;
@@ -32,12 +33,12 @@ public Documentation getDocumentation() {
.example("buyCar( carCost : Float @Digits(integer : 5, fraction : 2) : DriverDetails")
.applicableTypeNames(Stream.of(Scalars.GraphQLString,
- Scalars.GraphQLByte,
- Scalars.GraphQLShort,
+ ExtendedScalars.GraphQLByte,
+ ExtendedScalars.GraphQLShort,
Scalars.GraphQLInt,
- Scalars.GraphQLLong,
- Scalars.GraphQLBigDecimal,
- Scalars.GraphQLBigInteger,
+ ExtendedScalars.GraphQLLong,
+ ExtendedScalars.GraphQLBigDecimal,
+ ExtendedScalars.GraphQLBigInteger,
Scalars.GraphQLFloat)
.map(GraphQLScalarType::getName)
.collect(toList()))
@@ -52,12 +53,12 @@ public Documentation getDocumentation() {
public boolean appliesToType(GraphQLInputType inputType) {
return isOneOfTheseTypes(inputType,
Scalars.GraphQLString,
- Scalars.GraphQLByte,
- Scalars.GraphQLShort,
+ ExtendedScalars.GraphQLByte,
+ ExtendedScalars.GraphQLShort,
Scalars.GraphQLInt,
- Scalars.GraphQLLong,
- Scalars.GraphQLBigDecimal,
- Scalars.GraphQLBigInteger,
+ ExtendedScalars.GraphQLLong,
+ ExtendedScalars.GraphQLBigDecimal,
+ ExtendedScalars.GraphQLBigInteger,
Scalars.GraphQLFloat
);
}
diff --git a/src/main/java/graphql/validation/constraints/standard/RangeConstraint.java b/src/main/java/graphql/validation/constraints/standard/RangeConstraint.java
index 292320b..17c28a8 100644
--- a/src/main/java/graphql/validation/constraints/standard/RangeConstraint.java
+++ b/src/main/java/graphql/validation/constraints/standard/RangeConstraint.java
@@ -2,6 +2,7 @@
import graphql.GraphQLError;
import graphql.Scalars;
+import graphql.scalars.ExtendedScalars;
import graphql.schema.GraphQLDirective;
import graphql.schema.GraphQLInputType;
import graphql.schema.GraphQLScalarType;
@@ -35,12 +36,12 @@ public Documentation getDocumentation() {
.example("driver( milesTravelled : Int @Range( min : 1000, max : 100000)) : DriverDetails")
.applicableTypeNames(Stream.of(GraphQLString,
- Scalars.GraphQLByte,
- Scalars.GraphQLShort,
+ ExtendedScalars.GraphQLByte,
+ ExtendedScalars.GraphQLShort,
Scalars.GraphQLInt,
- Scalars.GraphQLLong,
- Scalars.GraphQLBigDecimal,
- Scalars.GraphQLBigInteger,
+ ExtendedScalars.GraphQLLong,
+ ExtendedScalars.GraphQLBigDecimal,
+ ExtendedScalars.GraphQLBigInteger,
Scalars.GraphQLFloat)
.map(GraphQLScalarType::getName)
.collect(toList()))
@@ -55,12 +56,12 @@ Integer.MAX_VALUE, getMessageTemplate())
public boolean appliesToType(GraphQLInputType inputType) {
return isOneOfTheseTypes(inputType,
GraphQLString,
- Scalars.GraphQLByte,
- Scalars.GraphQLShort,
+ ExtendedScalars.GraphQLByte,
+ ExtendedScalars.GraphQLShort,
Scalars.GraphQLInt,
- Scalars.GraphQLLong,
- Scalars.GraphQLBigDecimal,
- Scalars.GraphQLBigInteger,
+ ExtendedScalars.GraphQLLong,
+ ExtendedScalars.GraphQLBigDecimal,
+ ExtendedScalars.GraphQLBigInteger,
Scalars.GraphQLFloat
);
}
diff --git a/src/main/java/graphql/validation/interpolation/ResourceBundleMessageInterpolator.java b/src/main/java/graphql/validation/interpolation/ResourceBundleMessageInterpolator.java
index 8a1ac8a..0896a8b 100644
--- a/src/main/java/graphql/validation/interpolation/ResourceBundleMessageInterpolator.java
+++ b/src/main/java/graphql/validation/interpolation/ResourceBundleMessageInterpolator.java
@@ -15,9 +15,9 @@
import java.util.MissingResourceException;
import java.util.Optional;
import java.util.ResourceBundle;
-import javax.validation.Constraint;
-import javax.validation.Path;
-import javax.validation.Payload;
+import jakarta.validation.Constraint;
+import jakarta.validation.Path;
+import jakarta.validation.Payload;
import org.hibernate.validator.internal.engine.MessageInterpolatorContext;
import org.hibernate.validator.internal.metadata.core.ConstraintHelper;
import org.hibernate.validator.internal.metadata.descriptor.ConstraintDescriptorImpl;
@@ -160,7 +160,7 @@ private MessageInterpolatorContext buildHibernateContext(Map mes
return new MessageInterpolatorContext(
constraintDescriptor, validatedValue, rootBeanType,
- propertyPath, messageParams, expressionVariables, ExpressionLanguageFeatureLevel.DEFAULT, true);
+ propertyPath, messageParams, expressionVariables, ExpressionLanguageFeatureLevel.BEAN_PROPERTIES, true);
}
private org.hibernate.validator.messageinterpolation.ResourceBundleMessageInterpolator hibernateInterpolator() {
diff --git a/src/main/java/graphql/validation/rules/TargetedValidationRules.java b/src/main/java/graphql/validation/rules/TargetedValidationRules.java
index 2ef7207..b12a8aa 100644
--- a/src/main/java/graphql/validation/rules/TargetedValidationRules.java
+++ b/src/main/java/graphql/validation/rules/TargetedValidationRules.java
@@ -69,7 +69,7 @@ public List runValidationRules(DataFetchingEnvironment env, Messag
List errors = new ArrayList<>();
- GraphQLObjectType fieldContainer = env.getExecutionStepInfo().getFieldContainer();
+ GraphQLObjectType fieldContainer = env.getExecutionStepInfo().getObjectType();
GraphQLFieldDefinition fieldDefinition = env.getFieldDefinition();
ResultPath fieldPath = env.getExecutionStepInfo().getPath();
//
@@ -162,8 +162,7 @@ private List walkObjectArg(ValidationRule rule, ValidationEnvironm
for (GraphQLInputObjectField inputField : fieldDefinitions) {
GraphQLInputType fieldType = inputField.getType();
- List directives = inputField.getDirectives();
- Object validatedValue = objectMap.getOrDefault(inputField.getName(), inputField.getDefaultValue());
+ Object validatedValue = objectMap.getOrDefault(inputField.getName(), GraphQLInputObjectField.getInputFieldDefaultValue(inputField));
if (validatedValue == null) {
continue;
}
diff --git a/src/test/groovy/ELDiscover.java b/src/test/groovy/ELDiscover.java
index b03459d..e09e511 100644
--- a/src/test/groovy/ELDiscover.java
+++ b/src/test/groovy/ELDiscover.java
@@ -1,3 +1,11 @@
+import jakarta.el.ELContext;
+import jakarta.el.ELManager;
+import jakarta.el.ExpressionFactory;
+import jakarta.el.StandardELContext;
+import jakarta.el.ValueExpression;
+import jakarta.validation.MessageInterpolator;
+import jakarta.validation.constraints.Email;
+import jakarta.validation.constraints.NotNull;
import org.hibernate.validator.constraints.Range;
import org.hibernate.validator.internal.engine.MessageInterpolatorContext;
import org.hibernate.validator.internal.engine.path.PathImpl;
@@ -6,16 +14,9 @@
import org.hibernate.validator.internal.metadata.descriptor.ConstraintDescriptorImpl.ConstraintType;
import org.hibernate.validator.internal.metadata.location.ConstraintLocation.ConstraintLocationKind;
import org.hibernate.validator.internal.util.annotation.ConstraintAnnotationDescriptor;
+import org.hibernate.validator.messageinterpolation.ExpressionLanguageFeatureLevel;
import org.hibernate.validator.messageinterpolation.ResourceBundleMessageInterpolator;
-import javax.el.ELContext;
-import javax.el.ELManager;
-import javax.el.ExpressionFactory;
-import javax.el.StandardELContext;
-import javax.el.ValueExpression;
-import javax.validation.MessageInterpolator;
-import javax.validation.constraints.Email;
-import javax.validation.constraints.NotNull;
import java.lang.reflect.Method;
import java.util.Collections;
import java.util.HashMap;
@@ -104,8 +105,13 @@ public static void main(String[] args) throws Exception {
PathImpl rootPath = PathImpl.createRootPath();
+ ExpressionLanguageFeatureLevel level = ExpressionLanguageFeatureLevel.BEAN_METHODS;
MessageInterpolator.Context context = new MessageInterpolatorContext(
- constraintDescriptor, user, null, rootPath, Collections.emptyMap(), Collections.emptyMap());
+ constraintDescriptor, user, null, rootPath,
+ Collections.emptyMap(), Collections.emptyMap(),
+ level,
+ true);
+
print("${validatedValue.age}", messageInterpolator, context);
print("${validatedValue}", messageInterpolator, context);