{"record":{"id":"d64a61ba8b190f8f","repo":"apache/beam","slug":"invalid-payload-type-for-urn-beamurns-geturn","errorCode":null,"errorMessage":"Invalid payload type for URN ${BeamUrns.getUrn(ExternalTransforms.ExpansionMethods.Enum.SCHEMA_TRANSFORM)}","messagePattern":"Invalid payload type for URN (.+?)","errorType":"exception","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"sdks/java/expansion-service/src/main/java/org/apache/beam/sdk/expansion/service/TransformProvider.java","lineNumber":162,"sourceCode":"                    .decode(new ByteArrayInputStream(payload.getConfigurationRow().toByteArray()));\n\n            for (String field : configRow.getSchema().getFieldNames()) {\n              if (field.equals(\"transform_identifier\")) {\n                return configRow.getValue(field);\n              }\n            }\n            throw new RuntimeException(\n                \"Expected the ManagedTransform schema to include a field named \"\n                    + \"'transform_identifier' but received \"\n                    + configRow);\n          } catch (IOException e) {\n            throw new RuntimeException(e);\n          }\n        } else {\n          return payload.getIdentifier();\n        }\n      } catch (InvalidProtocolBufferException e) {\n        throw new IllegalArgumentException(\n            \"Invalid payload type for URN \"\n                + BeamUrns.getUrn(ExternalTransforms.ExpansionMethods.Enum.SCHEMA_TRANSFORM),\n            e);\n      }\n    }\n    return spec.getUrn();\n  }\n\n  default List<String> getDependencies(RunnerApi.FunctionSpec spec, PipelineOptions options) {\n    ExpansionServiceConfig config =\n        options.as(ExpansionServiceOptions.class).getExpansionServiceConfig();\n    String transformUniqueID = getTransformUniqueID(spec);\n\n    boolean isManagedExpansion = false;\n    if (getUrn(ExternalTransforms.ExpansionMethods.Enum.SCHEMA_TRANSFORM).equals(spec.getUrn())) {\n      try {\n        ExternalTransforms.SchemaTransformPayload schemaTransformPayload =\n            ExternalTransforms.SchemaTransformPayload.parseFrom(spec.getPayload());","sourceCodeStart":144,"sourceCodeEnd":180,"githubUrl":"https://github.com/apache/beam/blob/12126d8942aaf848030c478b4c6a28c6af861c66/sdks/java/expansion-service/src/main/java/org/apache/beam/sdk/expansion/service/TransformProvider.java#L144-L180","documentation":"Thrown by getTransformUniqueID when the SchemaTransform payload bytes cannot be parsed as an ExternalTransforms.SchemaTransformPayload protobuf. The expansion service requires SCHEMA_TRANSFORM urns to carry a valid SchemaTransformPayload; a malformed or wrong-type payload makes unique-ID derivation impossible.","triggerScenarios":"Calling transformUniqueID/getTransformUniqueID with an ExpansionRequest whose spec has urn SCHEMA_TRANSFORM but whose payload was built by a different Beam version, hand-crafted, truncated, or is not a SchemaTransformPayload message.","commonSituations":"Cross-version Beam SDK/gradle-version mismatch between pipeline submitting the transform and the expansion service jar; corrupt payloads from custom ExternalTransformRegistrar implementations; manually constructed RunnerApi.FunctionSpec.","solutions":["Align the Beam SDK version of the submitting pipeline with the expansion service version so payload serialization matches","Verify the transform's ExternalTransformRegistrar produces a valid SchemaTransformPayload (test expansion locally)","Inspect the payload bytes; if hand-built, regenerate via SchemaTransformPayload.newBuilder() and build()","Catch IllegalArgumentException in the expansion caller and log the payload identifier for diagnosis"],"exampleFix":"// before\nString id = expansionService.transformUniqueID(spec); // spec payload not a SchemaTransformPayload\n// after\ntry {\n  String id = expansionService.transformUniqueID(spec);\n} catch (IllegalArgumentException e) {\n  // fall back to spec.getUrn() or fail with a clear message about version mismatch\n  String id = spec.getUrn();\n}","handlingStrategy":"validation","validationCode":"boolean isValidSchemaTransformPayload(RunnerApi.FunctionSpec spec) {\n  try {\n    ExternalTransforms.SchemaTransformPayload.parseFrom(spec.getPayload());\n    return true;\n  } catch (InvalidProtocolBufferException e) { return false; }\n}","typeGuard":null,"tryCatchPattern":"try { id = provider.transformUniqueID(spec); } catch (IllegalArgumentException e) { log.error(\"bad SCHEMA_TRANSFORM payload\", e); id = spec.getUrn(); }","preventionTips":["Keep expansion service and SDK versions identical","Never hand-build FunctionSpec payloads; use registrar APIs","Unit-test expansion of each registered transform"],"tags":["java","expansion-service","protobuf","schema-transform"],"backgroundTag":"protobuf-unmarshal-failed","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"}