Skip to content

Commit b6532ea

Browse files
author
Thomas Draier
committed
GQL 4.2 : argumnents map does not contain null arguments
1 parent b180bdc commit b6532ea

File tree

3 files changed

+26
-10
lines changed

3 files changed

+26
-10
lines changed

src/main/java/graphql/annotations/ExtensionDataFetcherWrapper.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,9 @@ public ExtensionDataFetcherWrapper(Class declaringClass, DataFetcher<T> dataFetc
3737
public T get(DataFetchingEnvironment environment) {
3838
Object source = environment.getSource();
3939
if (source != null && (!declaringClass.isInstance(source)) && !(source instanceof Map)) {
40-
environment = new DataFetchingEnvironmentImpl(newInstance(declaringClass, source), environment.getArguments(),
41-
environment.getContext(), environment.getFields(), environment.getFieldType(), environment.getParentType(),
42-
environment.getGraphQLSchema(), environment.getFragmentsByName(), environment.getExecutionId(), environment.getSelectionSet());
40+
environment = new DataFetchingEnvironmentImpl(newInstance(declaringClass, source), environment.getArguments(), environment.getContext(),
41+
environment.getRoot(), environment.getFieldDefinition(), environment.getFields(), environment.getFieldType(), environment.getParentType(), environment.getGraphQLSchema(),
42+
environment.getFragmentsByName(), environment.getExecutionId(), environment.getSelectionSet(), environment.getFieldTypeInfo());
4343
}
4444

4545
return dataFetcher.get(environment);

src/main/java/graphql/annotations/MethodDataFetcher.java

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,11 @@
1818
import graphql.schema.GraphQLType;
1919

2020
import java.lang.reflect.*;
21+
import java.lang.reflect.Constructor;
22+
import java.lang.reflect.InvocationTargetException;
23+
import java.lang.reflect.Method;
24+
import java.lang.reflect.Modifier;
25+
import java.lang.reflect.Parameter;
2126
import java.util.*;
2227

2328
import static graphql.annotations.ReflectionKit.constructNewInstance;
@@ -63,17 +68,28 @@ public Object get(DataFetchingEnvironment environment) {
6368

6469
private Object[] invocationArgs(DataFetchingEnvironment environment) {
6570
List<Object> result = new ArrayList<>();
66-
Iterator envArgs = environment.getArguments().values().iterator();
71+
Map<String,Object> envArgs = environment.getArguments();
6772
for (Parameter p : method.getParameters()) {
73+
String parameterName;
74+
GraphQLName name = p.getAnnotation(GraphQLName.class);
75+
if (name != null) {
76+
parameterName = toGraphqlName(name.value());
77+
} else {
78+
parameterName = toGraphqlName(p.getName());
79+
}
80+
6881
Class<?> paramType = p.getType();
6982
if (DataFetchingEnvironment.class.isAssignableFrom(paramType)) {
7083
result.add(environment);
7184
continue;
7285
}
7386

7487
graphql.schema.GraphQLType graphQLType = typeFunction.buildType(true, paramType, p.getAnnotatedType());
75-
Object arg = envArgs.next();
76-
result.add(buildArg(p.getParameterizedType(), graphQLType, arg));
88+
if (envArgs.containsKey(parameterName)) {
89+
result.add(buildArg(p.getParameterizedType(), graphQLType, envArgs.get(parameterName)));
90+
} else {
91+
result.add(null);
92+
}
7793
}
7894
return result.toArray();
7995
}

src/test/java/graphql/annotations/GraphQLConnectionTest.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -112,8 +112,8 @@ public List<Obj> getNonNullObjs() {
112112
}
113113

114114
@GraphQLField
115-
@GraphQLConnection(name = "null")
116-
public List<Obj> getNull() {
115+
@GraphQLConnection(name = "nullObj")
116+
public List<Obj> getNullObj() {
117117
return null;
118118
}
119119

@@ -197,14 +197,14 @@ public void methodNull() {
197197
GraphQLSchema schema = newSchema().query(object).build();
198198

199199
GraphQL graphQL = GraphQL.newGraphQL(schema).build();
200-
ExecutionResult result = graphQL.execute("{ null(first: 1) { edges { cursor node { id, val } } } }",
200+
ExecutionResult result = graphQL.execute("{ nullObj(first: 1) { edges { cursor node { id, val } } } }",
201201
new TestConnections(Arrays.asList(new Obj("1", "test"), new Obj("2", "hello"), new Obj("3", "world"))));
202202

203203
assertTrue(result.getErrors().isEmpty());
204204

205205
Map<String, Map<String, List<Map<String, Map<String, Object>>>>> data = result.getData();
206206

207-
assertEquals(data.get("null"), null);
207+
assertEquals(data.get("nullObj"), null);
208208
}
209209

210210
@Test

0 commit comments

Comments
 (0)