{"record":{"id":"d500f57260443e0d","repo":"apache/beam","slug":"creator-parameter-paramname-doesn-t-correspond-to-a-schema","errorCode":null,"errorMessage":"Creator parameter ${paramName} Doesn't correspond to a schema field. Make sure that you are compiling with -parameters parameter to include constructor parameter information in class files.","messagePattern":"Creator parameter (.+?) Doesn't correspond to a schema field\\. Make sure that you are compiling with -parameters parameter to include constructor parameter information in class files\\.","errorType":"exception","errorClass":"RuntimeException","httpStatus":null,"severity":"error","filePath":"sdks/java/core/src/main/java/org/apache/beam/sdk/schemas/utils/ByteBuddyUtils.java","lineNumber":1622,"sourceCode":"            fieldsByJavaClassMember.put(name, i);\n          }\n        }\n      }\n\n      fieldMapping = Maps.newHashMap();\n      for (int i = 0; i < parameters.size(); ++i) {\n        Parameter parameter = parameters.get(i);\n        String paramName = parameter.getName();\n        Integer index = fieldsByLogicalName.get(paramName);\n        if (index == null) {\n          index = fieldsByJavaClassMember.get(paramName);\n        }\n        if (index == null && paramName.endsWith(\"$\")) {\n          // AutoValue appends \"$\" in some cases\n          index = fieldsByJavaClassMember.get(paramName.substring(0, paramName.length() - 1));\n        }\n        if (index == null) {\n          throw new RuntimeException(\n              \"Creator parameter \"\n                  + paramName\n                  + \" Doesn't correspond to a schema field.\"\n                  + \" Make sure that you are compiling with -parameters parameter to include\"\n                  + \" constructor parameter information in class files.\");\n        }\n        fieldMapping.put(i, index);\n      }\n    }\n\n    @Override\n    public InstrumentedType prepare(InstrumentedType instrumentedType) {\n      return instrumentedType;\n    }\n\n    @Override\n    public ByteCodeAppender appender(final Target implementationTarget) {\n      return (methodVisitor, implementationContext, instrumentedMethod) -> {","sourceCodeStart":1604,"sourceCodeEnd":1640,"githubUrl":"https://github.com/apache/beam/blob/12126d8942aaf848030c478b4c6a28c6af861c66/sdks/java/core/src/main/java/org/apache/beam/sdk/schemas/utils/ByteBuddyUtils.java#L1604-L1640","documentation":"When generating a from-row creator, Beam matches each creator method/constructor parameter name to a schema field. If a parameter name cannot be resolved to any field (including after trimming AutoValue's '$' suffix), it throws RuntimeException. The message specifically hints at the -parameters javac flag because without it parameter names are erased and become arg0, arg1, etc.","triggerScenarios":"Compiling without javac -parameters so reflection sees arg0/arg1 names that match no schema field; a creator parameter whose name differs from the schema field name; AutoValue '$'-suffixed names that still don't map after trimming.","commonSituations":"Maven/Gradle builds missing the -parameters compiler flag; renaming a schema field without renaming the creator parameter; using minified/obfuscated builds where parameter names are stripped.","solutions":["Enable the -parameters javac flag in your build (maven-compiler-plugin <parameters>true</parameters> or Gradle compileJava { options.compilerArgs << '-parameters' }).","Rename creator parameters to exactly match schema field names.","Rebuild and clean stale class files after changing compiler options.","Disable code obducers/minifiers that strip parameter names for schema classes."],"exampleFix":"// before (pom.xml)\n<maven.compiler.source>1.8</maven.compiler.source>\n// after\n<properties><maven.compiler.parameters>true</maven.compiler.parameters></properties>\n// or Gradle: tasks.withType(JavaCompile) { options.compilerArgs.add(\"-parameters\") }","handlingStrategy":"validation","validationCode":"for (java.lang.reflect.Constructor<?> c : MyType.class.getDeclaredConstructors()) { for (java.lang.reflect.Parameter p : c.getParameters()) { if (p.isNamePresent() == false) throw new IllegalStateException(\"Compile with -parameters\"); } }","typeGuard":null,"tryCatchPattern":"try { beamConvert(rows, MyType.class); } catch (RuntimeException e) { if (e.getMessage().contains(\"-parameters\")) { /* rebuild with -parameters */ } throw e; }","preventionTips":["Add -parameters to javac options in every module's build config.","Verify with a startup check that Parameter.isNamePresent() is true for schema classes.","Never obfuscate schema classes (keep -dontobfuscate for them in ProGuard/R8)."],"tags":["java","schema","compiler-flags","reflection"],"backgroundTag":"missing-required-config-field","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"}