use of graphql.validation.Validator in project graphql-java by graphql-java.
the class GraphQL method validate.
private List<ValidationError> validate(ExecutionInput executionInput, Document document, GraphQLSchema graphQLSchema, InstrumentationState instrumentationState) {
InstrumentationContext<List<ValidationError>> validationCtx = instrumentation.beginValidation(new InstrumentationValidationParameters(executionInput, document, graphQLSchema, instrumentationState));
Validator validator = new Validator();
List<ValidationError> validationErrors = validator.validateDocument(graphQLSchema, document);
validationCtx.onCompleted(validationErrors, null);
return validationErrors;
}
use of graphql.validation.Validator in project structr by structr.
the class GraphQLServlet method handleGraphQLRequest.
// ----- private methods -----
private void handleGraphQLRequest(final HttpServletRequest request, final HttpServletResponse response, final String query) throws IOException, FrameworkException {
final SecurityContext securityContext;
final Authenticator authenticator;
try {
// isolate request authentication in a transaction
try (final Tx tx = StructrApp.getInstance().tx()) {
authenticator = config.getAuthenticator();
securityContext = authenticator.initializeAndExamineRequest(request, response);
tx.success();
}
final App app = StructrApp.getInstance(securityContext);
if (securityContext != null) {
// isolate write output
try (final Tx tx = app.tx()) {
final Document doc = GraphQLRequest.parse(new Parser(), query);
if (doc != null) {
final List<ValidationError> errors = new Validator().validateDocument(SchemaService.getGraphQLSchema(), doc);
if (errors.isEmpty()) {
// no validation errors in query, do request
final GraphQLWriter graphQLWriter = new GraphQLWriter(true);
// no trailing semicolon so we dont trip MimeTypes.getContentTypeWithoutCharset
response.setContentType("application/json; charset=utf-8");
final Writer writer = response.getWriter();
graphQLWriter.stream(securityContext, writer, new GraphQLRequest(securityContext, doc, query));
// useful newline
writer.append("\n");
} else {
final Map<String, Object> map = new LinkedHashMap<>();
final Writer writer = response.getWriter();
final Gson gson = getGson();
map.put("errors", errors);
gson.toJson(map, writer);
// useful newline
writer.append("\n");
// send 422 status
response.setStatus(422);
}
}
tx.success();
}
}
} catch (FrameworkException frameworkException) {
// set status & write JSON output
response.setStatus(frameworkException.getStatus());
getGson().toJson(frameworkException, response.getWriter());
response.getWriter().println();
} catch (IllegalStateException | IllegalArgumentException iex) {
final Map<String, Object> map = new LinkedHashMap<>();
map.put("code", 422);
map.put("message", iex.getMessage());
// set status & write JSON output
response.setStatus(422);
getGson().toJson(map, response.getWriter());
response.getWriter().println();
} catch (UnsupportedOperationException uoe) {
logger.warn("POST not supported");
int code = HttpServletResponse.SC_BAD_REQUEST;
response.setStatus(code);
response.getWriter().append(RestMethodResult.jsonError(code, "POST not supported: " + uoe.getMessage()));
} catch (Throwable t) {
logger.warn("Exception in POST", t);
int code = HttpServletResponse.SC_INTERNAL_SERVER_ERROR;
response.setStatus(code);
response.getWriter().append(RestMethodResult.jsonError(code, "JsonSyntaxException in POST: " + t.getMessage()));
} finally {
try {
// response.getWriter().flush();
response.getWriter().close();
} catch (Throwable t) {
logger.warn("Unable to flush and close response: {}", t.getMessage());
}
}
}
use of graphql.validation.Validator in project structr by structr.
the class GraphQLCommand method processMessage.
@Override
public void processMessage(final WebSocketMessage webSocketData) {
final StructrWebSocket socket = getWebSocket();
final SecurityContext securityContext = socket.getSecurityContext();
final List<GraphObject> result = new LinkedList<>();
final String query = (String) webSocketData.getNodeData().get("query");
if (query != null) {
if (securityContext != null) {
try {
final Document doc = GraphQLRequest.parse(new Parser(), query);
if (doc != null) {
final List<ValidationError> errors = new Validator().validateDocument(SchemaService.getGraphQLSchema(), doc);
if (errors.isEmpty()) {
// no validation errors in query, do request
result.addAll(createResult(securityContext, new GraphQLRequest(securityContext, doc, query)));
} else {
final Map<String, Object> map = new LinkedHashMap<>();
map.put("errors", errors);
logger.warn("Errors occured while processing GraphQL request.");
getWebSocket().send(MessageBuilder.status().data(map).code(422).message("Errors occured while processing GraphQL request.").build(), true);
return;
}
}
} catch (IOException ioex) {
logger.warn("Could not process GraphQL request.", ioex);
getWebSocket().send(MessageBuilder.status().code(422).message(ioex.getMessage()).build(), true);
return;
} catch (FrameworkException ex) {
logger.warn("Could not process GraphQL request.", ex);
getWebSocket().send(MessageBuilder.status().code(ex.getStatus()).message(ex.getMessage()).build(), true);
return;
}
}
}
webSocketData.setResult(result);
// send only over local connection (no broadcast)
getWebSocket().send(webSocketData, true);
}
Aggregations