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

  1. Restart the expansion service to rebuild the provider registry
  2. Avoid concurrent mutation of the provider registry; load all providers at startup
  3. 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

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


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)