{"record":{"id":"beca63562dc030dc","repo":"apache/beam","slug":"conflicting-registrations-for-s","errorCode":null,"errorMessage":"Conflicting registrations for: %s","messagePattern":"Conflicting registrations for: (.+?)","errorType":"exception","errorClass":"java.lang.IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"sdks/java/core/src/main/java/org/apache/beam/sdk/util/construction/PTransformTranslation.java","lineNumber":471,"sourceCode":"        TransformPayloadTranslator newTranslator = entry.getValue();\n        @Nullable TransformPayloadTranslator existingTranslator = translators.get(ptransformClass);\n\n        if (existingTranslator == null) {\n          translators.put(ptransformClass, newTranslator);\n        } else {\n          LOG.error(\n              \"Conflicting registrations for {}: {} and {}\",\n              ptransformClass,\n              existingTranslator,\n              newTranslator);\n          conflictingRegistrations.add(ptransformClass);\n        }\n      }\n    }\n    Set<Class<? extends PTransform>> conflictingRegistrationSet = conflictingRegistrations.build();\n\n    if (!conflictingRegistrationSet.isEmpty()) {\n      throw new IllegalArgumentException(\n          String.format(\n              \"Conflicting registrations for: %s\",\n              Joiner.on(\", \").join(conflictingRegistrationSet)));\n    }\n\n    return ImmutableMap.copyOf(translators);\n  }\n\n  /**\n   * Translates a set of registered transforms whose content only differs based by differences in\n   * their {@link FunctionSpec}s and URNs.\n   */\n  private static class KnownTransformPayloadTranslator<T extends PTransform<?, ?>>\n      implements TransformTranslator<T> {\n\n    @Override\n    public boolean canTranslate(PTransform pTransform) {\n      return getKnownPayloadTranslators().containsKey(pTransform.getClass());","sourceCodeStart":453,"sourceCodeEnd":489,"githubUrl":"https://github.com/apache/beam/blob/12126d8942aaf848030c478b4c6a28c6af861c66/sdks/java/core/src/main/java/org/apache/beam/sdk/util/construction/PTransformTranslation.java#L453-L489","documentation":"loadTransformPayloadTranslators aggregates PTransformPayloadTranslators via ServiceLoader and detects when two translators claim the same PTransform class. If the conflicting-registration set is non-empty, this IllegalArgumentException lists the conflicting classes, indicating a duplicate/ambiguous translator registration on the classpath.","triggerScenarios":"Multiple jars on the classpath each provide a ServiceLoader-registered translator for the same PTransform subclass (e.g. two versions of a custom transform library, or a vendored copy of Beam's own translators alongside the official one).","commonSituations":"Duplicate Beam SDK versions on the classpath; shading/packaging that includes both a library and its vendored translator; two plugins registering translators for the same custom transform.","solutions":["Remove one of the duplicate translator registrations (delete the older/duplicate jar from the classpath).","Run `mvn dependency:tree` (or equivalent) to find duplicate Beam/transform-library artifacts and exclude one.","Ensure only one META-INF/services file per translator class exists across shaded jars; fix shade plugin resource filtering.","If intentional override is desired, register the translator in the built-in override list rather than alongside."],"exampleFix":"// before\n<dependency>org.example:custom-beam-transforms:1.0</dependency>\n<dependency>org.example:custom-beam-transforms:2.0</dependency> // both register translators\n// after: keep exactly one\n<dependency>org.example:custom-beam-transforms:2.0</dependency>","handlingStrategy":"validation","validationCode":"// inspect duplicate ServiceLoader registrations at startup\nSet<String> classes = new HashSet<>();\nfor (PTransformPayloadTranslator t : ServiceLoader.load(PTransformPayloadTranslator.class)) { if (!classes.add(t.getClass().getName())) log.warn(\"duplicate translator: \" + t.getClass()); }","typeGuard":null,"tryCatchPattern":"try { PTransformTranslation.getKnownPayloadTranslators(); } catch (IllegalArgumentException e) { /* conflicting registrations: dedupe classpath */ throw e; }","preventionTips":["Avoid duplicate Beam versions on the classpath","Exclude vendored copies of translator libraries","Run mvn dependency:tree in CI to catch duplicates"],"tags":["java","serviceloader","registration","classpath"],"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-20T03:17:13.778Z"}