{"record":{"id":"a13e5645dbe7c0e4","repo":"apache/beam","slug":"unable-to-generate-a-setter-for-setter-name","errorCode":null,"errorMessage":"Unable to generate a setter for setter '${name}'","messagePattern":"Unable to generate a setter for setter '(.+?)'","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":623,"sourceCode":"            .defineConstructor(Modifier.PUBLIC)\n            .withParameters(List.class)\n            .intercept(new OneOfSetterConstructor());\n\n    List<FieldValueSetter<ProtoBuilderT, Object>> setters =\n        Lists.newArrayList(setterMethodMap.values());\n    try {\n      return builder\n          .visit(new AsmVisitorWrapper.ForDeclaredMethods().writerFlags(ClassWriter.COMPUTE_FRAMES))\n          .make()\n          .load(targetClass.getClassLoader(), getClassLoadingStrategy(targetClass))\n          .getLoaded()\n          .getDeclaredConstructor(List.class)\n          .newInstance(setters);\n    } catch (InstantiationException\n        | IllegalAccessException\n        | NoSuchMethodException\n        | InvocationTargetException e) {\n      throw new RuntimeException(\"Unable to generate a setter for setter '\" + name + \"'\", e);\n    }\n  }\n\n  private static boolean isContiguous(Set<Integer> indices) {\n    Preconditions.checkArgument(!indices.isEmpty());\n    Iterator<Integer> iter = indices.iterator();\n    Preconditions.checkArgument(iter.hasNext());\n    int current = iter.next();\n    while (iter.hasNext()) {\n      if (iter.next() > current + 1) {\n        return false;\n      }\n    }\n    return true;\n  }\n\n  private static class OneOfGetterConstructor implements Implementation {\n    @Override","sourceCodeStart":605,"sourceCodeEnd":641,"githubUrl":"https://github.com/apache/beam/blob/12126d8942aaf848030c478b4c6a28c6af861c66/sdks/java/extensions/protobuf/src/main/java/org/apache/beam/sdk/extensions/protobuf/ProtoByteBuddyUtils.java#L605-L641","documentation":"ProtoByteBuddyUtils.createOneOfSetter generates a runtime setter class for a proto oneof via Byte Buddy. If instantiating the generated class fails (InstantiationException, IllegalAccessException, NoSuchMethodException, InvocationTargetException), it throws a RuntimeException naming the setter, with the reflective exception attached as cause.","triggerScenarios":"Creating a proto field setter for a oneof member during schema generation when the Byte Buddy-generated class cannot be constructed (JDK/Byte Buddy incompatibility, restricted runtime, constructor signature mismatch).","commonSituations":"Newer JDKs with mismatched Byte Buddy versions; native-image or sandboxed environments blocking bytecode; schema generation over proto classes with unusual builders.","solutions":["Check the cause (here preserved via ', e') for the exact reflective failure","Align org.bytebuddy dependency version with the target JDK","Ensure the runtime allows class generation (no disallowed agents, standard JVM)","Regenerate the schema on a supported JDK, or hand-code the setter for the affected type"],"exampleFix":"// before\n<dependency> net.bytebuddy:byte-buddy:1.10.x on JDK 21\n// after\n<dependency> net.bytebuddy:byte-buddy:1.14.x (JDK 21-compatible)","handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"try { setters.add(getProtoFieldValueSetter(...)); } catch (RuntimeException e) { if (e.getMessage().contains(\"Unable to generate a setter\")) { LOG.error(\"ByteBuddy setter generation failed\", e.getCause()); } throw e; }","preventionTips":["Match Byte Buddy version to JDK (e.g. 1.14.x for JDK 21+)","Enable Byte Buddy type validation to surface generation errors earlier","Test schema building on the exact runtime JDK in CI"],"tags":["protobuf","beam","byte-buddy","reflection"],"backgroundTag":"internal-invariant-violation","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"}