{"record":{"id":"feaa8f70b6585e41","repo":"quarkusio/quarkus","slug":"jdk-http-adapter-is-not-available-in-native-mode","errorCode":null,"errorMessage":"JDK HTTP adapter is not available in native mode. Please use the Vertx adapter by setting the HTTP adapter type to VERTX in your RegistryClientOptions or configuration.","messagePattern":"JDK HTTP adapter is not available in native mode\\. Please use the Vertx adapter by setting the HTTP adapter type to VERTX in your RegistryClientOptions or configuration\\.","errorType":"exception","errorClass":"java.lang.UnsupportedOperationException","httpStatus":null,"severity":"error","filePath":"extensions/schema-registry/apicurio/common/runtime/src/main/java/io/quarkus/apicurio/registry/graal/Substitutions.java","lineNumber":38,"sourceCode":"\n@TargetClass(className = \"io.apicurio.registry.client.common.RegistryClientRequestAdapterFactory\")\nfinal class Target_RegistryClientRequestAdapterFactory {\n\n    @Substitute\n    static Vertx getVertxFromCDI(String CDIClassName, String InstanceClassName) {\n        try {\n            return Arc.container().instance(Vertx.class).get();\n        } catch (Throwable t) {\n            // Log and ignore\n            return null;\n        }\n    }\n\n    @Substitute\n    private static RequestAdapter createJdkAdapter(RegistryClientOptions options) {\n        // JDK HTTP adapter is not supported in native mode because kiota-http-jdk is excluded.\n        // Use Vertx adapter instead by setting the adapter type in RegistryClientOptions.\n        throw new UnsupportedOperationException(\n                \"JDK HTTP adapter is not available in native mode. Please use the Vertx adapter by setting \" +\n                        \"the HTTP adapter type to VERTX in your RegistryClientOptions or configuration.\");\n    }\n}\n","sourceCodeStart":20,"sourceCodeEnd":43,"githubUrl":"https://github.com/quarkusio/quarkus/blob/e1c734241f34c7919086ceb4c9262b4a58f6de44/extensions/schema-registry/apicurio/common/runtime/src/main/java/io/quarkus/apicurio/registry/graal/Substitutions.java#L20-L43","documentation":"In native (GraalVM) mode, the Apicurio Registry client's JDK HTTP adapter (kiota-http-jdk) is not reachable in the Quarkus substitution layer, so Substitutions.createJdkAdapter() deliberately throws UnsupportedOperationException. Only the Vert.x HTTP adapter is supported for native-image builds.","triggerScenarios":"Running a native-image build/execution of an application whose RegistryClientOptions set the HTTP adapter type to JDK (explicitly or via configuration), causing the substituted factory to be invoked at runtime in native mode.","commonSituations":"Setting quarkus.apicurio-registry or RegistryClientOptions adapter type to JDK because it worked in JVM mode; default client settings changed across Apicurio client versions; copying JVM-mode client configuration into a native build.","solutions":["Set the HTTP adapter type to VERTX in RegistryClientOptions (options.setHttpAdapterType(AdapterType.VERTX)).","Set the adapter via configuration (e.g. the apicurio client http.adapter property) to VERTX before building native.","If JDK adapter is genuinely required, run the application in JVM mode instead of native.","Upgrade the Quarkus Apicurio extension in case newer versions support additional native adapters."],"exampleFix":"// before\nRegistryClientOptions options = new RegistryClientOptions();\noptions.setHttpAdapterType(AdapterType.JDK);\n// after\nRegistryClientOptions options = new RegistryClientOptions();\noptions.setHttpAdapterType(AdapterType.VERTX);","handlingStrategy":"validation","validationCode":"if (options.getHttpAdapterType() == AdapterType.JDK && isNativeImage()) {\n    options.setHttpAdapterType(AdapterType.VERTX);\n}","typeGuard":null,"tryCatchPattern":"try {\n    client = registryClientFactory.create(options);\n} catch (UnsupportedOperationException e) {\n    if (e.getMessage().contains(\"JDK HTTP adapter\")) {\n        options.setHttpAdapterType(AdapterType.VERTX);\n        client = registryClientFactory.create(options);\n    } else {\n        throw e;\n    }\n}","preventionTips":["Always configure AdapterType.VERTX for native-image builds","Test native mode (mvn verify -Dnative) when adding Apicurio clients","Don't copy JVM-mode client options into native builds unchanged"],"tags":["native-image","apicurio","schema-registry","http-client"],"backgroundTag":"feature-not-supported-in-native","analyzedSha":"e1c734241f34c7919086ceb4c9262b4a58f6de44","analyzedAt":"2026-09-05T17:01:29.979Z","contentChangedAt":"2026-09-05T17:01:29.979Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}