{"record":{"id":"ec598dd3994522f8","repo":"apache/beam","slug":"unable-to-find-schema-for-identifier-schematransformprovider-ec598d","errorCode":null,"errorMessage":"Unable to find schema for ${identifier}SchemaTransformProvider's config","messagePattern":"Unable to find schema for (.+?)SchemaTransformProvider's config","errorType":"exception","errorClass":"RuntimeException","httpStatus":null,"severity":"error","filePath":"sdks/java/core/src/main/java/org/apache/beam/sdk/schemas/transforms/TypedSchemaTransformProvider.java","lineNumber":138,"sourceCode":"    try {\n      SchemaRegistry registry = SchemaRegistry.createDefault();\n      SerializableFunction<Row, ConfigT> rowToConfigT =\n          registry.getFromRowFunction(configurationClass());\n\n      // Configuration objects handled by the AutoValueSchema provider will expect Row fields with\n      // camelCase naming convention\n      SchemaProvider schemaProvider = registry.getSchemaProvider(configurationClass());\n      if (schemaProvider.getClass().equals(DefaultSchemaProvider.class)\n          && checkNotNull(\n                  ((DefaultSchemaProvider) schemaProvider)\n                      .getUnderlyingSchemaProvider(configurationClass()))\n              .getClass()\n              .equals(AutoValueSchema.class)) {\n        configuration = configuration.toCamelCase();\n      }\n      return rowToConfigT.apply(configuration);\n    } catch (NoSuchSchemaException e) {\n      throw new RuntimeException(\n          \"Unable to find schema for \" + identifier() + \"SchemaTransformProvider's config\");\n    }\n  }\n}\n","sourceCodeStart":120,"sourceCodeEnd":143,"githubUrl":"https://github.com/apache/beam/blob/12126d8942aaf848030c478b4c6a28c6af861c66/sdks/java/core/src/main/java/org/apache/beam/sdk/schemas/transforms/TypedSchemaTransformProvider.java#L120-L143","documentation":"configFromRow() builds the configuration object from a configuration Row using the schema registered for configurationClass(). When the registry lookup fails with NoSuchSchemaException (no schema registered for the provider's config class), it is rethrown as a RuntimeException naming the provider's identifier.","triggerScenarios":"Calling TypedSchemaTransformProvider.from(configRow) (or dependencies()) for a provider whose configuration class has no schema in the default registry — same root cause as configurationSchema() failing.","commonSituations":"Custom SchemaTransformProvider implementations without @DefaultSchema on their config class; YAML/SQL expansion pipelines constructing providers whose config classes lost schema registration (annotation processing not run, shading dropping generated classes).","solutions":["Add @DefaultSchema with a suitable SchemaClass to configurationClass() so it registers with the default SchemaRegistry.","Ensure annotation processing generates AutoValue_/builder classes and they are packaged (check shaded jars).","Test SchemaRegistry.createDefault().getSchema(provider.configurationClass()) directly to confirm registration.","Align Beam versions between pipeline authoring and expansion service to avoid registry/classloader mismatches."],"exampleFix":"// before\nabstract class MyConfig { abstract String getName(); }\n// after\n@DefaultSchema(AutoValueSchema.class)\n@AutoValue abstract class MyConfig { abstract String getName(); }","handlingStrategy":"validation","validationCode":"try { SchemaRegistry.createDefault().getSchema(provider.configurationClass()); } catch (NoSuchSchemaException e) { throw new IllegalStateException(\"Config class lacks schema: \" + provider.configurationClass(), e); }","typeGuard":null,"tryCatchPattern":"try { P p = MyProvider.from(configRow); } catch (RuntimeException e) { if (e.getMessage().contains(\"Unable to find schema\")) { /* fix schema registration before expansion */ } throw e; }","preventionTips":["Use @DefaultSchema(AutoValueSchema.class) on config classes","Check shaded jars retain generated schema classes","Run expansion in CI to catch missing registrations early"],"tags":["java","apache-beam","schematransform","schema-registry","config"],"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-14T16:17:12.679Z"}