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

  1. Read the numbered list in the error message and fix each problem individually (missing fallback methods, invalid annotation placements, duplicate annotations)
  2. Run with quarkus.smallrye-fault-tolerance.enabled=false temporarily to isolate whether failures come from fault tolerance processing
  3. Check the SmallRye Fault Tolerance version's documentation for annotation constraints after an upgrade
  4. 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

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


AI-assisted analysis of quarkusio/quarkus@e1c734241f (2026-09-05). Data as JSON: /api/errors/f1ccb4befaa09660. Report an issue: GitHub.