{"record":{"id":"f1ccb4befaa09660","repo":"quarkusio/quarkus","slug":"wrappederrormessage","errorCode":null,"errorMessage":"${wrappedErrorMessage}","messagePattern":"\\$\\{wrappedErrorMessage\\}","errorType":"exception","errorClass":"DeploymentException","httpStatus":null,"severity":"error","filePath":"extensions/smallrye-fault-tolerance/runtime/src/main/java/io/quarkus/smallrye/faulttolerance/runtime/SmallRyeFaultToleranceRecorder.java","lineNumber":44,"sourceCode":"            FaultToleranceOperation operation = new FaultToleranceOperation(ftMethod);\n            try {\n                operation.validate();\n\n                QuarkusFaultToleranceOperationProvider.CacheKey cacheKey = new QuarkusFaultToleranceOperationProvider.CacheKey(\n                        ftMethod.beanClass, ftMethod.method.reflect());\n                operationCache.put(cacheKey, operation);\n            } catch (FaultToleranceDefinitionException | NoSuchMethodException e) {\n                allExceptions.add(e);\n            }\n        }\n\n        if (!allExceptions.isEmpty()) {\n            if (allExceptions.size() == 1) {\n                Throwable error = allExceptions.get(0);\n                if (error instanceof DeploymentException) {\n                    throw (DeploymentException) error;\n                } else {\n                    throw new DeploymentException(error);\n                }\n            } else {\n                StringBuilder message = new StringBuilder(\"Found \" + allExceptions.size() + \" deployment problems: \");\n                int idx = 1;\n                for (Throwable error : allExceptions) {\n                    message.append(\"\\n\").append(\"[\").append(idx++).append(\"] \").append(error.getMessage());\n                }\n                DeploymentException deploymentException = new DeploymentException(message.toString());\n                for (Throwable error : allExceptions) {\n                    deploymentException.addSuppressed(error);\n                }\n                throw deploymentException;\n            }\n        }\n\n        Arc.container().instance(QuarkusFaultToleranceOperationProvider.class).get().init(operationCache);\n    }\n","sourceCodeStart":26,"sourceCodeEnd":62,"githubUrl":"https://github.com/quarkusio/quarkus/blob/e1c734241f34c7919086ceb4c9262b4a58f6de44/extensions/smallrye-fault-tolerance/runtime/src/main/java/io/quarkus/smallrye/faulttolerance/runtime/SmallRyeFaultToleranceRecorder.java#L26-L62","documentation":"SmallRyeFaultToleranceRecorder.createFaultToleranceOperation collects all problems found while creating fault tolerance operations at deployment time and rethrows them as a single Jakarta DeploymentException whose message lists each problem numbered ([1]..[N]). The ${wrappedErrorMessage} placeholder resolves to this aggregated message listing every deployment problem individually.","triggerScenarios":"Any build-time fault tolerance configuration problem, e.g. @Fallback pointing to a missing fallback method, @BulkName/@CircuitBreakerName referencing unregistered limits, invalid annotation combinations (e.g. multiple fault tolerance annotations of the same type on one method), or methods annotated on non-public/invalid targets — when more than one problem occurs, all are aggregated.","commonSituations":"Migrating applications between SmallRye Fault Tolerance versions where validation rules tightened; bulk-testing configurations where several methods are misconfigured at once; typos in fallback method names across multiple beans.","solutions":["Read the numbered list in the error message and fix each problem individually (missing fallback methods, invalid annotation placements, duplicate annotations)","Run with quarkus.smallrye-fault-tolerance.enabled=false temporarily to isolate whether failures come from fault tolerance processing","Check the SmallRye Fault Tolerance version's documentation for annotation constraints after an upgrade","Fix the first reported problem, rebuild, and iterate — problems are reported together only when detected in the same build"],"exampleFix":"// before\n@Fallback(fallbackMethod = \"fallback\")  // method 'fallback' does not exist\npublic String call() { ... }\n// after\n@Fallback(fallbackMethod = \"fallback\")\npublic String call() { ... }\n\npublic String fallback() { return \"default\"; }","handlingStrategy":"validation","validationCode":"// Pre-validate fallback methods referenced by @Fallback exist with matching signature\nfor (Method m : MyBean.class.getDeclaredMethods()) {\n    Fallback fb = m.getAnnotation(Fallback.class);\n    if (fb != null) {\n        boolean found = Arrays.stream(MyBean.class.getDeclaredMethods())\n            .anyMatch(f -> f.getName().equals(fb.fallbackMethod()));\n        if (!found) throw new IllegalStateException(\"Fallback method missing: \" + fb.fallbackMethod());\n    }\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Always pair @Fallback with an existing same-class method returning a compatible type","After Quarkus/SmallRye upgrades, review the changelog for tightened annotation validation","Fix numbered problems top-down; each rebuild reveals remaining issues","Avoid duplicate fault tolerance annotations of the same type on one method"],"tags":["fault-tolerance","deployment","build-time","validation"],"backgroundTag":"deployment-problem-aggregate","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"}