{"record":{"id":"664dae97f031785c","repo":"quarkusio/quarkus","slug":"graphql-client-with-config-key-s-wasn-t-present","errorCode":null,"errorMessage":"GraphQL client with config key '%s' wasn't present in the combined index, therefore Quarkus didn't generate required OIDC token provider","messagePattern":"GraphQL client with config key '(.+?)' wasn't present in the combined index, therefore Quarkus didn't generate required OIDC token provider","errorType":"exception","errorClass":"IllegalStateException","httpStatus":null,"severity":"error","filePath":"extensions/oidc-client-graphql/deployment/src/main/java/io/quarkus/oidc/client/graphql/OidcGraphQLClientIntegrationProcessor.java","lineNumber":147,"sourceCode":"                    .reason(getClass().getName())\n                    .publicConstructors().methods().fields().build());\n        });\n    }\n\n    @BuildStep\n    @Record(RUNTIME_INIT)\n    void initialize(BeanContainerBuildItem containerBuildItem,\n            OidcGraphQLClientIntegrationRecorder recorder,\n            OidcClientGraphQLConfig config,\n            BeanArchiveIndexBuildItem index,\n            GraphQLTokenProducerInfo graphQLTokenProducerInfo,\n            GraphQLClientConfigInitializedBuildItem configInitialized) {\n        Map<String, String> configKeysToOidcClients = getConfigKeysToOidcClientsFromIndex(index.getIndex(), true);\n        configKeysToOidcClients.forEach((graphQLConfigKey, oidcClient) -> {\n            if (!graphQLTokenProducerInfo.configKeysToOidcClientsFromCombinedIndex.containsValue(oidcClient)) {\n                // ATM GraphQL extension processor relies on the combined index as well, this validation is in place\n                // so that we don't miss future changes\n                throw new IllegalStateException(\"GraphQL client with config key '%s' wasn't present in the combined index,\"\n                        + \" therefore Quarkus didn't generate required OIDC token provider\");\n            }\n        });\n        config.additionalOidcClients()\n                .forEach((graphQlClient, oidcClient) -> configKeysToOidcClients.put(graphQlClient, oidcClient.clientName()));\n\n        recorder.enhanceGraphQLClientConfigurationWithOidc(configKeysToOidcClients,\n                config.clientName().orElse(DEFAULT_CLIENT_KEY),\n                graphQLTokenProducerInfo.oidcClientToTokenProducerBeanName);\n    }\n\n    private static Map<String, String> getConfigKeysToOidcClientsFromIndex(IndexView index, boolean withDefault) {\n        Map<String, String> configKeysToOidcClients = new HashMap<>();\n        for (AnnotationInstance annotation : index.getAnnotations(GRAPHQL_CLIENT_API)) {\n            ClassInfo clazz = annotation.target().asClass();\n            AnnotationInstance oidcClient = clazz.annotation(OIDC_CLIENT_FILTER);\n            if (oidcClient != null) {\n","sourceCodeStart":129,"sourceCodeEnd":165,"githubUrl":"https://github.com/quarkusio/quarkus/blob/e1c734241f34c7919086ceb4c9262b4a58f6de44/extensions/oidc-client-graphql/deployment/src/main/java/io/quarkus/oidc/client/graphql/OidcGraphQLClientIntegrationProcessor.java#L129-L165","documentation":"The OIDC GraphQL integration processor validates that each GraphQL client config key found via its own index also appears in the combined index that produced the OIDC token producer beans. This IllegalStateException is a build-time consistency check: if the combined index lacks the client, Quarkus did not generate the required token provider and codegen would fail downstream.","triggerScenarios":"Running the initialize build step when a GraphQL client config key maps to an OIDC client that is not among configKeysToOidcClientsFromCombinedIndex — i.e. the class containing the GraphQL client was not indexed in the combined (application+dependencies) Jandex index.","commonSituations":"GraphQL client interface in a module excluded from the combined index; missing Jandex index (no META-INF/jandex.idx and no @RegisterForReflection/index dependency) in a library; ordering issues between extension processors after adding a new integration path.","solutions":["Ensure the module containing the GraphQL client interface is Jandex-indexed (add jandex-maven-plugin or quarkus-index-dependency)","Verify the GraphQL client class is in the application or an indexed dependency","Rebuild with the index including all client interfaces","If developing Quarkus itself, check getConfigKeysToOidcClientsFromIndex flags match between processors"],"exampleFix":"<!-- before: library without index -->\n<!-- after -->\n<plugin>\n  <groupId>io.smallrye</groupId>\n  <artifactId>jandex-maven-plugin</artifactId>\n  <executions><execution><goals><goal>jandex</goal></goals></execution></executions>\n</plugin>","handlingStrategy":"validation","validationCode":"// at build/deploy time: verify combined index sees the client interface\nif (!combinedIndex.getClassByName(clientInterfaceName).isPresent()) {\n    throw new IllegalStateException(clientInterfaceName + \" missing from Jandex combined index; add jandex index to its module\");\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Index all modules containing GraphQL client interfaces (jandex-maven-plugin)","For third-party jars use quarkus.index-dependency.* properties","Keep GraphQL client interfaces in the application, not unindexed libraries"],"tags":["graphql","oidc","jandex","build-time"],"backgroundTag":"class-not-in-jandex-index","analyzedSha":"e1c734241f34c7919086ceb4c9262b4a58f6de44","analyzedAt":"2026-09-05T17:01:29.979Z","contentChangedAt":"2026-09-05T17:01:29.979Z","schemaVersion":2},"datasetVersion":"2026-09-12T22:17:10.623Z"}