diff --git a/extensions/smallrye-graphql/deployment/src/main/java/io/quarkus/smallrye/graphql/deployment/SmallRyeGraphQLConfig.java b/extensions/smallrye-graphql/deployment/src/main/java/io/quarkus/smallrye/graphql/deployment/SmallRyeGraphQLConfig.java index b0ea61a69c6ab..58609a93d7fee 100644 --- a/extensions/smallrye-graphql/deployment/src/main/java/io/quarkus/smallrye/graphql/deployment/SmallRyeGraphQLConfig.java +++ b/extensions/smallrye-graphql/deployment/src/main/java/io/quarkus/smallrye/graphql/deployment/SmallRyeGraphQLConfig.java @@ -96,6 +96,12 @@ public class SmallRyeGraphQLConfig { @ConfigItem(defaultValue = "false") boolean printDataFetcherException; + /** + * Make the schema available over HTTP. + */ + @ConfigItem(defaultValue = "true") + boolean schemaAvailable; + /** * Include the Scalar definitions in the schema. */ diff --git a/extensions/smallrye-graphql/deployment/src/main/java/io/quarkus/smallrye/graphql/deployment/SmallRyeGraphQLProcessor.java b/extensions/smallrye-graphql/deployment/src/main/java/io/quarkus/smallrye/graphql/deployment/SmallRyeGraphQLProcessor.java index 2d24a73be2118..607de666f4a30 100644 --- a/extensions/smallrye-graphql/deployment/src/main/java/io/quarkus/smallrye/graphql/deployment/SmallRyeGraphQLProcessor.java +++ b/extensions/smallrye-graphql/deployment/src/main/java/io/quarkus/smallrye/graphql/deployment/SmallRyeGraphQLProcessor.java @@ -193,7 +193,8 @@ void buildSchemaEndpoint( SmallRyeGraphQLRecorder recorder, SmallRyeGraphQLConfig graphQLConfig) { - Handler schemaHandler = recorder.schemaHandler(graphQLInitializedBuildItem.getInitialized()); + Handler schemaHandler = recorder.schemaHandler(graphQLInitializedBuildItem.getInitialized(), + graphQLConfig.schemaAvailable); routeProducer.produce(httpRootPathBuildItem.routeBuilder() .nestedRoute(graphQLConfig.rootPath, SCHEMA_PATH) diff --git a/extensions/smallrye-graphql/deployment/src/test/java/io/quarkus/smallrye/graphql/deployment/GraphQLSchemaUnavailableTest.java b/extensions/smallrye-graphql/deployment/src/test/java/io/quarkus/smallrye/graphql/deployment/GraphQLSchemaUnavailableTest.java new file mode 100644 index 0000000000000..a4083dd72c2f4 --- /dev/null +++ b/extensions/smallrye-graphql/deployment/src/test/java/io/quarkus/smallrye/graphql/deployment/GraphQLSchemaUnavailableTest.java @@ -0,0 +1,50 @@ +package io.quarkus.smallrye.graphql.deployment; + +import java.util.HashMap; +import java.util.Map; + +import org.jboss.logging.Logger; +import org.jboss.shrinkwrap.api.ShrinkWrap; +import org.jboss.shrinkwrap.api.asset.EmptyAsset; +import org.jboss.shrinkwrap.api.asset.StringAsset; +import org.jboss.shrinkwrap.api.spec.JavaArchive; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.RegisterExtension; + +import io.quarkus.test.QuarkusUnitTest; +import io.restassured.RestAssured; +import io.restassured.response.Response; +import io.restassured.specification.RequestSpecification; + +/** + * Test when schema is not available + */ +public class GraphQLSchemaUnavailableTest extends AbstractGraphQLTest { + + private static final Logger LOG = Logger.getLogger(GraphQLSchemaUnavailableTest.class); + + @RegisterExtension + static QuarkusUnitTest test = new QuarkusUnitTest() + .setArchiveProducer(() -> ShrinkWrap.create(JavaArchive.class) + .addClasses(TestResource.class, TestPojo.class, TestRandom.class, TestGenericsPojo.class, + BusinessException.class) + .addAsResource(new StringAsset(getPropertyAsString(configuration())), "application.properties") + .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml")); + + @Test + public void testSchema() { + RequestSpecification request = RestAssured.given(); + request.accept(MEDIATYPE_TEXT); + request.contentType(MEDIATYPE_TEXT); + Response response = request.get("/graphql/schema.graphql"); + + Assertions.assertEquals(404, response.statusCode()); + } + + private static Map configuration() { + Map m = new HashMap<>(); + m.put("quarkus.smallrye-graphql.schema-available", "false"); + return m; + } +} diff --git a/extensions/smallrye-graphql/runtime/src/main/java/io/quarkus/smallrye/graphql/runtime/SmallRyeGraphQLRecorder.java b/extensions/smallrye-graphql/runtime/src/main/java/io/quarkus/smallrye/graphql/runtime/SmallRyeGraphQLRecorder.java index 6ffea9b7bab75..ecdd37560565c 100644 --- a/extensions/smallrye-graphql/runtime/src/main/java/io/quarkus/smallrye/graphql/runtime/SmallRyeGraphQLRecorder.java +++ b/extensions/smallrye-graphql/runtime/src/main/java/io/quarkus/smallrye/graphql/runtime/SmallRyeGraphQLRecorder.java @@ -43,8 +43,8 @@ public Handler subscriptionHandler(BeanContainer beanContainer, CDI.current().select(CurrentVertxRequest.class).get()); } - public Handler schemaHandler(RuntimeValue initialized) { - if (initialized.getValue()) { + public Handler schemaHandler(RuntimeValue initialized, boolean schemaAvailable) { + if (initialized.getValue() && schemaAvailable) { return new SmallRyeGraphQLSchemaHandler(); } else { return new SmallRyeGraphQLNoEndpointHandler();