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
- Construct and pass a valid BizScenario (use BizScenario.valueOf(bizId, useCase, scenario)) before calling ExtensionExecutor.
- Validate the request fields feeding BizScenario.valueOf at the API boundary.
- Default to BizScenario.DEFAULT when no specific identity applies.
- 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
- Always construct BizScenario via valueOf with non-null, validated inputs
- Use BizScenario.DEFAULT when no identity applies
- Validate biz/useCase/scenario request fields at the boundary
- Never pass a BizScenario variable that is assigned conditionally without a default
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
- EXTENSION_NOT_FOUND
- EXTENSION_DEFINE_DUPLICATE
- random cannot be null.
- alphabet cannot be null.
- B_CUSTOMER_companyNameConflict
AI-assisted analysis of alibaba/COLA@352e1a8675 (2026-09-08).
Data as JSON: /api/errors/d199da1d0debabcb.
Report an issue: GitHub.