{"record":{"id":"4854b38c8274bfef","repo":"apache/beam","slug":"unable-to-generate-a-creator-for-class-builderclass-with-4854b3","errorCode":null,"errorMessage":"Unable to generate a creator for class ${builderClass} with schema ${schema}","messagePattern":"Unable to generate a creator for class (.+?) with schema (.+?)","errorType":"exception","errorClass":"java.lang.RuntimeException","httpStatus":null,"severity":"error","filePath":"sdks/java/extensions/protobuf/src/main/java/org/apache/beam/sdk/extensions/protobuf/ProtoByteBuddyUtils.java","lineNumber":1147,"sourceCode":"                          .build())\n                  .method(ElementMatchers.named(\"get\"))\n                  .intercept(new BuilderSupplier(protoClass));\n      Supplier<ProtoBuilderT> supplier =\n          builder\n              .visit(\n                  new AsmVisitorWrapper.ForDeclaredMethods()\n                      .writerFlags(ClassWriter.COMPUTE_FRAMES))\n              .make()\n              .load(targetClass.getClassLoader(), getClassLoadingStrategy(targetClass))\n              .getLoaded()\n              .getDeclaredConstructor()\n              .newInstance();\n      return new ProtoCreatorFactory<>(supplier, setters);\n    } catch (InstantiationException\n        | IllegalAccessException\n        | NoSuchMethodException\n        | InvocationTargetException e) {\n      throw new RuntimeException(\n          \"Unable to generate a creator for class \" + builderClass + \" with schema \" + schema);\n    }\n  }\n\n  static class ProtoCreatorFactory<ProtoBuilderT extends MessageLite.Builder>\n      implements SchemaUserTypeCreator {\n    private final Supplier<ProtoBuilderT> builderCreator;\n    private final List<FieldValueSetter<ProtoBuilderT, Object>> setters;\n\n    public ProtoCreatorFactory(\n        Supplier<ProtoBuilderT> builderCreator,\n        List<FieldValueSetter<ProtoBuilderT, Object>> setters) {\n      this.builderCreator = builderCreator;\n      this.setters = setters;\n    }\n\n    @Override\n    public Object create(@Nullable Object... params) {","sourceCodeStart":1129,"sourceCodeEnd":1165,"githubUrl":"https://github.com/apache/beam/blob/12126d8942aaf848030c478b4c6a28c6af861c66/sdks/java/extensions/protobuf/src/main/java/org/apache/beam/sdk/extensions/protobuf/ProtoByteBuddyUtils.java#L1129-L1165","documentation":"ProtoByteBuddyUtils' creator factory builds a SchemaUserTypeCreator that instantiates a proto Builder via its no-arg newInstance. If that reflective instantiation fails (InstantiationException, IllegalAccessException, NoSuchMethodException, InvocationTargetException), a RuntimeException is thrown naming the builder class and schema. The reflective cause is dropped here.","triggerScenarios":"Generating a creator for a proto message schema where builderClass has no accessible no-arg newBuilder()/newInstance-equivalent constructor, or instantiation is blocked by the environment.","commonSituations":"Abstract or non-standard proto classes passed as the builder type; nested/inner classes with implicit constructor args; restricted JVMs; schema built against a proto class that changed shape.","solutions":["Check e.getCause() in a debugger to find the exact reflective failure","Ensure the builder class is a concrete MessageLite.Builder subclass with an accessible no-arg constructor","Regenerate proto classes; don't pass abstract/manual builder classes to the schema creator","Avoid environments that block reflection/bytecode (e.g. native-image without config)"],"exampleFix":"// before\n// passing abstract CustomBuilder extends Builder to schema creator\n// after\n// use MyMessage.Builder (generated, concrete no-arg newBuilder())","handlingStrategy":"validation","validationCode":"// ensure builderClass is instantiable via no-arg newInstance before schema build\nif (Modifier.isAbstract(builderClass.getModifiers()) || builderClass.isMemberClass()) throw new IllegalStateException(\"builderClass must be a top-level concrete Builder\");","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Only pass generated concrete Builder classes","Avoid inner/abstract builders in schema registration","Run schema generation on a JVM permitting reflection and bytecode generation"],"tags":["protobuf","beam","byte-buddy","reflection"],"backgroundTag":"invalid-constructor-argument","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"}