{"record":{"id":"d0e5eb762abb92e1","repo":"apache/beam","slug":"could-not-find-class","errorCode":null,"errorMessage":"Could not find class ","messagePattern":"Could not find class ","errorType":"exception","errorClass":"java.lang.IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"sdks/java/expansion-service/src/main/java/org/apache/beam/sdk/expansion/service/JavaClassLookupTransformProvider.java","lineNumber":132,"sourceCode":"        Constructor<PTransform<InputT, OutputT>> constructor =\n            findMappingConstructor(constructors, payload);\n        Object[] parameterValues =\n            getParameterValues(\n                constructor.getParameters(),\n                constructorRow,\n                constructor.getGenericParameterTypes());\n        transform = (PTransform<PInput, POutput>) constructor.newInstance(parameterValues);\n      } else {\n        Method[] methods = transformClass.getMethods();\n        Method method = findMappingConstructorMethod(methods, payload, allowlistClass);\n        Object[] parameterValues =\n            getParameterValues(\n                method.getParameters(), constructorRow, method.getGenericParameterTypes());\n        transform = (PTransform<PInput, POutput>) method.invoke(null /* static */, parameterValues);\n      }\n      return applyBuilderMethods(transform, payload, allowlistClass);\n    } catch (ClassNotFoundException e) {\n      throw new IllegalArgumentException(\"Could not find class \" + className, e);\n    } catch (InstantiationException\n        | IllegalArgumentException\n        | IllegalAccessException\n        | InvocationTargetException e) {\n      throw new IllegalArgumentException(\"Could not instantiate class \" + className, e);\n    }\n  }\n\n  @SuppressWarnings(\"assignment\")\n  private PTransform<PInput, POutput> applyBuilderMethods(\n      PTransform<PInput, POutput> transform,\n      JavaClassLookupPayload payload,\n      AllowedClass allowListClass) {\n    for (BuilderMethod builderMethod : payload.getBuilderMethodsList()) {\n      Method method = getMethod(transform, builderMethod, allowListClass);\n      try {\n        Row builderMethodRow = decodeRow(builderMethod.getSchema(), builderMethod.getPayload());\n        transform =","sourceCodeStart":114,"sourceCodeEnd":150,"githubUrl":"https://github.com/apache/beam/blob/12126d8942aaf848030c478b4c6a28c6af861c66/sdks/java/expansion-service/src/main/java/org/apache/beam/sdk/expansion/service/JavaClassLookupTransformProvider.java#L114-L150","documentation":"getTransform reflectively loads and instantiates the requested class (Class.forName / constructors / static methods) from the allow-listed class name. If the class cannot be loaded (ClassNotFoundException) it throws IllegalArgumentException('Could not find class <className>'). The class named in the JavaClassLookupPayload is not on the expansion service classpath.","triggerScenarios":"Requesting JavaClassLookup expansion for a class that is not on the expansion service's classpath, or whose name is mistyped (wrong package/class spelling).","commonSituations":"Expansion service launched without the jar containing the target transform class; refactoring renamed/moved the class while clients still send old names; using the default (non-cross-language-safe) class lookup with user classes absent from the service image.","solutions":["Add the jar containing the class to the expansion service classpath and restart","Verify the fully-qualified class name in the request matches the deployed class (package + name)","Rebuild/redploy clients after class renames so payload class names are current","Prefer registered SchemaTransforms over raw JavaClassLookup to avoid classpath coupling"],"exampleFix":"// before\njava -cp expansion-service.jar ...ExpansionService  // MyTransform missing\n// after\njava -cp expansion-service.jar:my-transforms.jar ...ExpansionService","handlingStrategy":"validation","validationCode":"try { Class.forName(\"com.example.MyTransform\", false, expansionServiceClassloader); } catch (ClassNotFoundException e) { throw new IllegalStateException(\"Class not on expansion service classpath\"); }","typeGuard":null,"tryCatchPattern":"try { expanded = service.expand(request); } catch (IllegalArgumentException e) { if (e.getMessage().startsWith(\"Could not find class \")) { /* add jar / fix FQCN */ } throw e; }","preventionTips":["Ship all referenced transform classes in the expansion service image/jar","Use fully-qualified class names verified against the deployed build","Prefer SchemaTransform registration over raw JavaClassLookup for cross-language use"],"tags":["java","classpath","reflection"],"backgroundTag":"class-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"}