{"record":{"id":"428db1097b422c2b","repo":"quarkusio/quarkus","slug":"mixing-quarkus-rest-and-resteasy-classic-client-pa","errorCode":null,"errorMessage":"Mixing Quarkus REST and RESTEasy Classic client parts is not supported","messagePattern":"Mixing Quarkus REST and RESTEasy Classic client parts is not supported","errorType":"exception","errorClass":"DeploymentException","httpStatus":null,"severity":"error","filePath":"extensions/resteasy-reactive/rest-common/deployment/src/main/java/io/quarkus/resteasy/reactive/common/deployment/ResteasyReactiveCommonProcessor.java","lineNumber":113,"sourceCode":"    void checkMixingStacks(Capabilities capabilities, CurateOutcomeBuildItem curateOutcomeBuildItem,\n            List<IgnoreStackMixingBuildItem> ignoreStackMixingItems) {\n        if (!ignoreStackMixingItems.isEmpty()) {\n            return;\n        }\n        List<ResolvedDependency> resteasyClassicDeps = curateOutcomeBuildItem.getApplicationModel().getDependencies().stream()\n                .filter(d -> d.getGroupId().equals(\"org.jboss.resteasy\")).toList();\n        boolean hasResteasyCoreDep = resteasyClassicDeps.stream()\n                .anyMatch(IS_NOT_TEST_SCOPED.and(IS_RESTEASY_CLASSIC_CORE_DEP));\n        if (!hasResteasyCoreDep) {\n            return;\n        }\n        boolean hasResteasyClassicClient = resteasyClassicDeps.stream()\n                .anyMatch(IS_NOT_TEST_SCOPED.and(IS_RESTEASY_CLASSIC_CLIENT_DEP));\n        if (!hasResteasyClassicClient) { // there is no bulletproof way of knowing whether a server specific dependency has been included, so we deduce it by the absence of client dependency\n            throw new DeploymentException(\"Mixing Quarkus REST and RESTEasy Classic server parts is not supported\");\n        }\n        if (capabilities.isPresent(Capability.REST_CLIENT_REACTIVE)) {\n            throw new DeploymentException(\n                    \"Mixing Quarkus REST and RESTEasy Classic client parts is not supported\");\n        } else {\n            LOG.warn(\n                    \"Mixing Quarkus REST server and RESTEasy Classic client parts might lead to unexpected results. Consider using 'quarkus-rest-client' instead of 'quarkus-resteasy-client'.\");\n        }\n    }\n\n    @BuildStep\n    void searchForProviders(Capabilities capabilities,\n            BuildProducer<AdditionalApplicationArchiveMarkerBuildItem> producer) {\n        if (capabilities.isPresent(Capability.RESTEASY) || capabilities.isPresent(Capability.RESTEASY_CLIENT)\n                || QuarkusClassLoader.isClassPresentAtRuntime(\n                        \"org.jboss.resteasy.plugins.providers.JaxrsServerFormUrlEncodedProvider\")) { // RESTEasy Classic could be imported via non-Quarkus dependencies\n            // in this weird case we don't want the providers to be registered automatically as this would lead to multiple bean definitions\n            return;\n        }\n        producer.produce(new AdditionalApplicationArchiveMarkerBuildItem(PROVIDERS_SERVICE_FILE));\n        producer.produce(new AdditionalApplicationArchiveMarkerBuildItem(","sourceCodeStart":95,"sourceCodeEnd":131,"githubUrl":"https://github.com/quarkusio/quarkus/blob/e1c734241f34c7919086ceb4c9262b4a58f6de44/extensions/resteasy-reactive/rest-common/deployment/src/main/java/io/quarkus/resteasy/reactive/common/deployment/ResteasyReactiveCommonProcessor.java#L95-L131","documentation":"Quarkus detected a Quarkus REST (reactive) client dependency (`quarkus-rest-client` capability) together with a RESTEasy Classic stack, which cannot coexist in one deployment. The two HTTP client stacks are incompatible, so deployment fails with a DeploymentException.","triggerScenarios":"Having `quarkus-resteasy` (classic) plus `quarkus-rest-client` (reactive client) in the same application — e.g. mixed quickstart code or a transitive reactive-client dependency.","commonSituations":"Following old docs using `quarkus-resteasy` with new reactive client starters; partial stack migration; a dependency transitively requiring the reactive client.","solutions":["Replace the Classic client `quarkus-resteasy-client` usage with `quarkus-rest-client` (reactive) — remove the classic client/server deps","Or go fully Classic: use `quarkus-resteasy` + `quarkus-resteasy-client` and remove all reactive rest extensions","Inspect `mvn dependency:tree` to find and exclude the dependency introducing the conflicting client capability"],"exampleFix":"// before\n<dependency>io.quarkus:quarkus-resteasy</dependency>\n<dependency>io.quarkus:quarkus-rest-client</dependency>\n// after\n<dependency>io.quarkus:quarkus-rest-client</dependency>\n<dependency>io.quarkus:quarkus-rest</dependency>","handlingStrategy":"validation","validationCode":"// CI check before build:\n// mvn dependency:tree -Dincludes=io.quarkus:quarkus-rest-client,io.quarkus:quarkus-resteasy-client\ngrep -q 'quarkus-rest-client' pom.xml && grep -q 'quarkus-resteasy<' pom.xml && echo 'MIXED STACK ERROR' && exit 1 || true","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Pair classic server only with quarkus-resteasy-client","Pair reactive server only with quarkus-rest-client","Validate dependency tree in CI"],"tags":["dependency-conflict","resteasy-classic","rest-client-reactive","quarkus"],"backgroundTag":"mixed-rest-stack-dependency","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"}