apache/beam · error · java.lang.IllegalArgumentException
Could not find a SchemaTransform with identifier
Error message
Could not find a SchemaTransform with identifier
What it means
After parsing, getTransform fetches the provider from its map and throws IllegalArgumentException if the lookup returns null with this message. This is a defensive check for the same unregistered-identifier condition as error 902, raised when the map was mutated or race/change between the containsKey check and get.
Solutions
- Restart the expansion service to rebuild the provider registry
- Avoid concurrent mutation of the provider registry; load all providers at startup
- Ensure the provider jar for the requested identifier is on the classpath (same fix as the 'Did not find' variant)
Defensive patterns
Strategy: try-catch
Try / catch
try { expanded = service.expand(request); } catch (IllegalArgumentException e) { if (e.getMessage().startsWith("Could not find a SchemaTransform")) { /* restart service to rebuild registry */ } throw e; } Prevention
- Do not mutate provider registries at runtime
- Restart the service after changing provider jars
When it happens
Trigger: Map lookup returning null in getTransform despite the earlier containsKey check — effectively a concurrent modification of the provider registry or an internal inconsistency in the expansion service.
Common situations: Custom extension code modifying the provider registry concurrently; defensive guard rarely hit in normal operation.
Understand the failure class
Background: 'Could not be found', 'does not exist', 'not found in database': the resource-not-found family when an ID, slug, key, or URI lookup comes back empty — this error's family across 20 libraries.
Related errors
- A list of URNs for overriding transforms was provided but…
- A cannot be expanded
- A transform cannot be initiated using the provided config…
- AVRO schema doesn't match row schema. Row schema
- BigQuery data contained value
AI-assisted analysis of apache/beam@12126d8942 (2026-09-13).
Data as JSON: /api/errors/edeb860f1a72c366.
Report an issue: GitHub.
Appendix: source
Thrown at sdks/java/expansion-service/src/main/java/org/apache/beam/sdk/expansion/service/ExpansionServiceSchemaTransformProvider.java:113
SchemaTransformPayload payload;
try {
payload = SchemaTransformPayload.parseFrom(spec.getPayload());
String identifier = payload.getIdentifier();
if (!schemaTransformProviders.containsKey(identifier)) {
throw new RuntimeException(
"Did not find a SchemaTransformProvider with the identifier " + identifier);
}
} catch (InvalidProtocolBufferException e) {
throw new IllegalArgumentException(
"Invalid payload type for URN " + getUrn(ExpansionMethods.Enum.SCHEMA_TRANSFORM), e);
}
String identifier = payload.getIdentifier();
org.apache.beam.sdk.schemas.transforms.SchemaTransformProvider provider =
schemaTransformProviders.get(identifier);
if (provider == null) {
throw new IllegalArgumentException(
"Could not find a SchemaTransform with identifier " + identifier);
}
Schema configSchemaFromRequest =
SchemaTranslation.schemaFromProto(payload.getConfigurationSchema());
Schema configSchemaFromProvider = provider.configurationSchema();
if (!configSchemaFromRequest.assignableTo(configSchemaFromProvider)) {
throw new IllegalArgumentException(
String.format(
"Config schema provided with the expansion request %s is not compatible with the "
+ "config of the Schema transform %s.",
configSchemaFromRequest, configSchemaFromProvider));
}
Row configRow;
try {
configRow =View on GitHub (pinned to 12126d8942)