alibaba/COLA · error · IllegalArgumentException

BizScenario can not be null for extension

Error message

BizScenario can not be null for extension

What it means

ExtensionExecutor.checkNull validates that the BizScenario argument supplied to extension lookups is non-null before resolving the extension point. If null, it throws a plain IllegalArgumentException with 'BizScenario can not be null for extension'. This is a programmer-error guard: the extension mechanism cannot route behavior without a business identity.

Source

Thrown at cola-components/cola-component-extension-starter/src/main/java/com/alibaba/cola/extension/ExtensionExecutor.java:118

    /**
     * third try with default use case + default scenario
     * <p>
     * example:  biz1.#defaultUseCase#.#defaultScenario#
     */
    private <Ext> Ext defaultUseCaseTry(Class<Ext> targetClz, BizScenario bizScenario) {
        logger.debug("Third trying with " + bizScenario.getIdentityWithDefaultUseCase());
        return locate(targetClz.getName(), bizScenario.getIdentityWithDefaultUseCase());
    }

    private <Ext> Ext locate(String name, String uniqueIdentity) {
        final Ext ext = (Ext) extensionRepository.getExtensionRepo().
                get(new ExtensionCoordinate(name, uniqueIdentity));
        return ext;
    }

    private void checkNull(BizScenario bizScenario) {
        if (bizScenario == null) {
            throw new IllegalArgumentException("BizScenario can not be null for extension");
        }
    }

}

View on GitHub (pinned to 352e1a8675)

Solutions

  1. Construct and pass a valid BizScenario (use BizScenario.valueOf(bizId, useCase, scenario)) before calling ExtensionExecutor.
  2. Validate the request fields feeding BizScenario.valueOf at the API boundary.
  3. Default to BizScenario.DEFAULT when no specific identity applies.
  4. Catch IllegalArgumentException if calling third-party code that may pass null, and surface a clear validation message.

Example fix

// before
extensionExecutor.execute(ExtPt.class, bizCode, ...);  // bizCode is null
// after
BizScenario scenario = BizScenario.valueOf(
    Optional.ofNullable(bizCode).orElse("defaultBiz"),
    Optional.ofNullable(useCase).orElse("defaultUseCase"),
    Optional.ofNullable(scenario_).orElse("defaultScenario"));
extensionExecutor.execute(ExtPt.class, scenario, ...);
Defensive patterns

Strategy: validation

Validate before calling

Objects.requireNonNull(bizScenario, "BizScenario is required for extension execution");

Type guard

static BizScenario requireScenario(BizScenario s) { return java.util.Objects.requireNonNull(s, "BizScenario can not be null for extension"); }

Try / catch

try { return extensionExecutor.execute(ExtPt.class, bizScenario, ...); } catch (IllegalArgumentException e) { log.error("Missing BizScenario: {}", e.getMessage()); return badRequest(); }

Prevention

When it happens

Trigger: Calling any ExtensionExecutor method (execute, responseCode, keyOf, locateExtension path) passing null for the BizScenario parameter, e.g. when the BizScenario was computed from a null request field or not initialized.

Common situations: A request DTO's bizId/useCase/scenario fields were not populated, so BizScenario.valueOf received nulls or the variable was never assigned; forgetting to derive BizScenario from context in generic/reusable service code.

Related errors


AI-assisted analysis of alibaba/COLA@352e1a8675 (2026-09-08). Data as JSON: /api/errors/d199da1d0debabcb. Report an issue: GitHub.