quarkusio/quarkus · error · DeploymentException
${wrappedErrorMessage}
Error message
${wrappedErrorMessage} What it means
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.
Source
Thrown at extensions/smallrye-fault-tolerance/runtime/src/main/java/io/quarkus/smallrye/faulttolerance/runtime/SmallRyeFaultToleranceRecorder.java:44
FaultToleranceOperation operation = new FaultToleranceOperation(ftMethod);
try {
operation.validate();
QuarkusFaultToleranceOperationProvider.CacheKey cacheKey = new QuarkusFaultToleranceOperationProvider.CacheKey(
ftMethod.beanClass, ftMethod.method.reflect());
operationCache.put(cacheKey, operation);
} catch (FaultToleranceDefinitionException | NoSuchMethodException e) {
allExceptions.add(e);
}
}
if (!allExceptions.isEmpty()) {
if (allExceptions.size() == 1) {
Throwable error = allExceptions.get(0);
if (error instanceof DeploymentException) {
throw (DeploymentException) error;
} else {
throw new DeploymentException(error);
}
} else {
StringBuilder message = new StringBuilder("Found " + allExceptions.size() + " deployment problems: ");
int idx = 1;
for (Throwable error : allExceptions) {
message.append("\n").append("[").append(idx++).append("] ").append(error.getMessage());
}
DeploymentException deploymentException = new DeploymentException(message.toString());
for (Throwable error : allExceptions) {
deploymentException.addSuppressed(error);
}
throw deploymentException;
}
}
Arc.container().instance(QuarkusFaultToleranceOperationProvider.class).get().init(operationCache);
}
View on GitHub (pinned to e1c734241f)
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
Example fix
// before
@Fallback(fallbackMethod = "fallback") // method 'fallback' does not exist
public String call() { ... }
// after
@Fallback(fallbackMethod = "fallback")
public String call() { ... }
public String fallback() { return "default"; } Defensive patterns
Strategy: validation
Validate before calling
// Pre-validate fallback methods referenced by @Fallback exist with matching signature
for (Method m : MyBean.class.getDeclaredMethods()) {
Fallback fb = m.getAnnotation(Fallback.class);
if (fb != null) {
boolean found = Arrays.stream(MyBean.class.getDeclaredMethods())
.anyMatch(f -> f.getName().equals(fb.fallbackMethod()));
if (!found) throw new IllegalStateException("Fallback method missing: " + fb.fallbackMethod());
}
} Prevention
- 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
When it happens
Trigger: 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.
Common situations: 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.
Related errors
- Invalid fileName
- CardAction title is required
- CardText requires either staticText(), dynamicText(), or str
- Not enough information to build the page. Set at least one o
- Invalid global variable name found: %s - supplied by %s -
AI-assisted analysis of quarkusio/quarkus@e1c734241f (2026-09-05).
Data as JSON: /api/errors/f1ccb4befaa09660.
Report an issue: GitHub.