{"record":{"id":"4cd6116908e639b6","repo":"apache/beam","slug":"conflicting-registrations-for-s-expansionservice","errorCode":null,"errorMessage":"Conflicting registrations for: %s","messagePattern":"Conflicting registrations for: (.+?)","errorType":"exception","errorClass":"java.lang.IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"sdks/java/expansion-service/src/main/java/org/apache/beam/sdk/expansion/service/ExpansionService.java","lineNumber":232,"sourceCode":"            registrar.knownBuilderInstances().entrySet()) {\n\n          String urn = entry.getKey();\n          ExternalTransformBuilder newBuilder = entry.getValue();\n          @Nullable ExternalTransformBuilder existingBuilder = registeredBuilders.get(urn);\n\n          if (existingBuilder == null) {\n            registeredBuilders.put(urn, newBuilder);\n          } else {\n            LOG.error(\n                \"Conflicting registrations for {}: {} and {}\", urn, existingBuilder, newBuilder);\n            conflictingRegistrations.add(urn);\n          }\n        }\n      }\n\n      Set<String> conflictingRegistrationSet = conflictingRegistrations.build();\n      if (!conflictingRegistrationSet.isEmpty()) {\n        throw new IllegalArgumentException(\n            String.format(\n                \"Conflicting registrations for: %s\",\n                Joiner.on(\", \").join(conflictingRegistrationSet)));\n      }\n      return registeredBuilders;\n    }\n  }\n\n  private static class TransformProviderForPayloadTranslator<\n          InputT extends PInput, OutputT extends POutput>\n      implements TransformProvider<InputT, OutputT> {\n\n    private final TransformPayloadTranslator<PTransform<InputT, OutputT>> payloadTranslator;\n\n    // Returns true if the underlying transform represented by this is a schema-aware transform.\n    private boolean isSchemaTransform() {\n      return (payloadTranslator instanceof SchemaTransformPayloadTranslator);\n    }","sourceCodeStart":214,"sourceCodeEnd":250,"githubUrl":"https://github.com/apache/beam/blob/12126d8942aaf848030c478b4c6a28c6af861c66/sdks/java/expansion-service/src/main/java/org/apache/beam/sdk/expansion/service/ExpansionService.java#L214-L250","documentation":"ExpansionService.loadTransformBuilders scans the classpath for transform builders registered via META-INF services and throws IllegalArgumentException when two providers register builders under the same URN with conflicting implementations. It protects against ambiguous transform resolution at expansion time.","triggerScenarios":"Starting an ExpansionService (or calling registeredBuilders) when the classpath contains multiple expansion service providers claiming the same transform URN with different builder implementations.","commonSituations":"Multiple Beam expansion JARs on the classpath (e.g., two versions of beam-sdks-java-io-... or beam-runners-...); fat JARs bundling duplicate service files; adding a connector already included in the expansion service bundle.","solutions":["Run `mvn dependency:tree` and exclude duplicate Beam IO/expansion jars","Remove or align versions of conflicting expansion service dependencies","Check META-INF/services/org.apache.beam.model.expansion.v1.ExpansionService files for duplicates","If intentional, use one consolidated expansion service or shade/merge service files properly"],"exampleFix":"// before\n<dependency><groupId>org.apache.beam</groupId><artifactId>beam-sdks-java-io-jdbc</artifactId><version>2.40.0</version></dependency>\n<dependency><groupId>org.apache.beam</groupId><artifactId>beam-sdks-java-io-jdbc</artifactId><version>2.50.0</version></dependency>\n// after\n<dependency>\n  <groupId>org.apache.beam</groupId>\n  <artifactId>beam-sdks-java-io-jdbc</artifactId>\n  <version>2.50.0</version>\n</dependency>","handlingStrategy":"validation","validationCode":"Map<String, String> urns = new HashMap<>();\n// before starting service, scan META-INF/services entries for duplicate URNs and fail early","typeGuard":null,"tryCatchPattern":"try { expansionService.start(); } catch (IllegalArgumentException e) { if (e.getMessage().startsWith(\"Conflicting registrations\")) { /* dedupe classpath */ } throw e; }","preventionTips":["Run mvn dependency:tree and exclude duplicate Beam expansion artifacts","Avoid fat JARs that merge duplicate service files","Upgrade all Beam modules to the same version"],"tags":["java","beam","expansion-service","classpath","duplicate-registration"],"backgroundTag":"conflicting-config-options","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"}