Operator Invocation Internals ​
Build-Time Flow ​
Core Build Items ​
PipelineConfigBuildItem: parsed operator step declarations.OperatorBuildItem: resolved class/method/input/normalized return/category metadata.
Resolution Contract ​
- Jandex-only resolution for operator classes and methods.
- Fail-fast diagnostics for unresolved or ambiguous methods.
- Return-type normalization to reactive metadata (
Uni<T>/Multi<T>).
Link Validation Contract ​
OperatorLinkValidationBuildSteps validates adjacent links before generation:
- cardinality constraints,
- assignability checks (with generic compatibility),
- mapper presence checks when direct assignability fails.
Invoker Generation Contract ​
OperatorInvokerBuildSteps generates operator invoker bytecode with Gizmo:
- direct invocation (no reflection lookup),
- CDI bean registration,
- unary reactive contract (
ReactiveService), - checked/runtime exceptions adapted to
Uni.createFrom().failure(e).
Note: this is specific to operator invokers in the Quarkus build-step path. Other generation paths in the annotation processor still render Java sources with JavaPoet.
Generated Equivalent (Conceptual) ​
Non-reactive operator ​
java
@Singleton
public class EnrichPaymentOperatorInvoker implements ReactiveService<PaymentIn, PaymentOut> {
@Inject
PaymentOperators target;
@Override
public Uni<PaymentOut> process(PaymentIn input) {
try {
PaymentOut out = target.enrich(input);
return Uni.createFrom().item(out);
} catch (Exception e) {
return Uni.createFrom().failure(e);
}
}
}Reactive operator ​
java
@Singleton
public class ScorePaymentOperatorInvoker implements ReactiveService<PaymentIn, PaymentScore> {
@Inject
PaymentScoringOperators target;
@Override
public Uni<PaymentScore> process(PaymentIn input) {
try {
return target.score(input);
} catch (Exception e) {
return Uni.createFrom().failure(e);
}
}
}Current Scope ​
- Unary invocation is the supported path for generated operator invokers.
- Streaming service interfaces exist in runtime and transport layers, but operator invoker generation is still unary-scoped.