{"record":{"id":"edeb860f1a72c366","repo":"apache/beam","slug":"could-not-find-a-schematransform-with-identifier","errorCode":null,"errorMessage":"Could not find a SchemaTransform with identifier ","messagePattern":"Could not find a SchemaTransform with identifier ","errorType":"exception","errorClass":"java.lang.IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"sdks/java/expansion-service/src/main/java/org/apache/beam/sdk/expansion/service/ExpansionServiceSchemaTransformProvider.java","lineNumber":113,"sourceCode":"    SchemaTransformPayload payload;\n    try {\n      payload = SchemaTransformPayload.parseFrom(spec.getPayload());\n      String identifier = payload.getIdentifier();\n      if (!schemaTransformProviders.containsKey(identifier)) {\n        throw new RuntimeException(\n            \"Did not find a SchemaTransformProvider with the identifier \" + identifier);\n      }\n\n    } catch (InvalidProtocolBufferException e) {\n      throw new IllegalArgumentException(\n          \"Invalid payload type for URN \" + getUrn(ExpansionMethods.Enum.SCHEMA_TRANSFORM), e);\n    }\n\n    String identifier = payload.getIdentifier();\n    org.apache.beam.sdk.schemas.transforms.SchemaTransformProvider provider =\n        schemaTransformProviders.get(identifier);\n    if (provider == null) {\n      throw new IllegalArgumentException(\n          \"Could not find a SchemaTransform with identifier \" + identifier);\n    }\n\n    Schema configSchemaFromRequest =\n        SchemaTranslation.schemaFromProto(payload.getConfigurationSchema());\n    Schema configSchemaFromProvider = provider.configurationSchema();\n\n    if (!configSchemaFromRequest.assignableTo(configSchemaFromProvider)) {\n      throw new IllegalArgumentException(\n          String.format(\n              \"Config schema provided with the expansion request %s is not compatible with the \"\n                  + \"config of the Schema transform %s.\",\n              configSchemaFromRequest, configSchemaFromProvider));\n    }\n\n    Row configRow;\n    try {\n      configRow =","sourceCodeStart":95,"sourceCodeEnd":131,"githubUrl":"https://github.com/apache/beam/blob/12126d8942aaf848030c478b4c6a28c6af861c66/sdks/java/expansion-service/src/main/java/org/apache/beam/sdk/expansion/service/ExpansionServiceSchemaTransformProvider.java#L95-L131","documentation":"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.","triggerScenarios":"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.","commonSituations":"Custom extension code modifying the provider registry concurrently; defensive guard rarely hit in normal operation.","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)"],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"try { expanded = service.expand(request); } catch (IllegalArgumentException e) { if (e.getMessage().startsWith(\"Could not find a SchemaTransform\")) { /* restart service to rebuild registry */ } throw e; }","preventionTips":["Do not mutate provider registries at runtime","Restart the service after changing provider jars"],"tags":["java","beam","internal-state"],"backgroundTag":"resource-not-found","analyzedSha":"12126d8942aaf848030c478b4c6a28c6af861c66","analyzedAt":"2026-09-13T01:50:10.254Z","contentChangedAt":"2026-09-13T01:50:10.254Z","schemaVersion":2},"datasetVersion":"2026-09-20T03:17:13.778Z"}