A minimal Viaduct GraphQL application using Eclipse Jetty servlet container. This example demonstrates how to integrate Viaduct with a lightweight HTTP server using servlets.
- Java JDK 21 is installed
JAVA_HOMEenvironment variable is set correctly orjavais in the classpath
Check out the Getting Started docs.
./gradlew runThe server will start on http://localhost:8080.
With the server running, you can use the following curl command to send GraphQL queries:
curl 'http://localhost:8080/graphql' -H 'content-type: application/json' --data-raw '{"query":"{ greeting }"}'You should see the following output:
{"data":{"greeting":"Hello from Jetty + Viaduct!"}}curl 'http://localhost:8080/graphql' -H 'content-type: application/json' --data-raw '{"query":"query HelloWorld { greeting author }"}'Response:
{
"data": {
"greeting": "Hello from Jetty + Viaduct!",
"author": "Viaduct GraphQL with Jetty"
}
}The servlet also supports GET requests with query parameters:
curl 'http://localhost:8080/graphql?query=%7B%20greeting%20%7D'With the server running, navigate to the following URL in your browser to bring up the GraphiQL interface:
http://localhost:8080/graphiql
Then, run the following query:
query HelloWorld {
greeting
author
}You should see this response:
{
"data": {
"greeting": "Hello from Jetty + Viaduct!",
"author": "Viaduct GraphQL with Jetty"
}
}Run the integration tests with:
./gradlew testThe tests start an embedded Jetty server and verify the GraphQL endpoint behavior.
jetty-starter/
├── src/main/kotlin/com/example/viadapp/
│ ├── JettyViaductApplication.kt # Main application entry point
│ └── ViaductServlet.kt # GraphQL servlet implementation
├── resolvers/ # GraphQL resolver module
│ └── src/main/
│ ├── kotlin/com/example/viadapp/resolvers/
│ │ └── HelloWorldResolvers.kt
│ └── viaduct/schema/
│ └── schema.graphqls # GraphQL schema definition
└── src/test/kotlin/ # Integration tests
This example demonstrates:
- BasicViaductFactory: Creates a Viaduct engine with automatic module discovery
- Custom Servlet: Implements a GraphQL-over-HTTP servlet that handles POST and GET requests
- Jetty Server: Lightweight embedded HTTP server
- Module-based Architecture: Resolvers are organized as a Viaduct module with automatic schema generation
The servlet supports:
- POST requests with JSON body (
application/json) - POST requests with GraphQL query body (
application/graphql) - GET requests with query parameters
- Proper error handling and status codes