apache/seatunnel · error · ConfigCheckException

checkResult.getMsg()

Error message

checkResult.getMsg()

What it means

ConfigValidationUtils.validate checks the provided CheckResult and throws ConfigCheckException(checkResult.getMsg()) when it is not a success, then proceeds with plugin validation. The message text is whatever the failed check produced (the message shown is the msg accessor used at that throw site).

Source

Thrown at seatunnel-core/seatunnel-core-starter/src/main/java/org/apache/seatunnel/core/starter/utils/ConfigValidationUtils.java:115

                        for (URL url : urls) {
                            method.get().invoke(classLoader, url);
                        }
                    } catch (Exception e) {
                        throw new RuntimeException(
                                "Unsupported classloader: " + classLoader.getClass().getName(), e);
                    }
                }
            };

    private ConfigValidationUtils() {}

    public static void validate(Config config) {
        validate(config, CheckResult.success());
    }

    public static void validate(Config config, CheckResult checkResult) {
        if (!checkResult.isSuccess()) {
            throw new ConfigCheckException(checkResult.getMsg());
        }

        ClassLoader parentClassLoader = Thread.currentThread().getContextClassLoader();
        ClassLoader validationClassLoader = prepareClassLoader(config, parentClassLoader);
        Thread.currentThread().setContextClassLoader(validationClassLoader);
        try {
            validateEnvironmentConfig(config);
            JobContext jobContext = new JobContext();
            jobContext.setJobMode(RuntimeEnvironment.getJobMode(config));
            jobContext.setEnableCheckpoint(RuntimeEnvironment.getEnableCheckpoint(config));

            List<TableInfo> sourceTables =
                    validateSources(
                            TypesafeConfigUtils.getConfigList(
                                    config, Constants.SOURCE, Collections.emptyList()),
                            jobContext);
            if (sourceTables.isEmpty()) {
                throw new ConfigCheckException("At least one source plugin must be configured.");

View on GitHub (pinned to cf67b549a7)

Solutions

  1. Read the exception message (the check's msg) and fix the corresponding config option
  2. Run the config through the plugin docs to satisfy required options before validating
  3. In tests, expect ConfigCheckException for invalid configs; ensure success results are built with CheckResult.success()

Example fix

// before
CheckResult r = sourceFactory.check(cfg);
ConfigValidationUtils.validate(config, r);
// after
CheckResult r = sourceFactory.check(cfg);
if (!r.isSuccess()) { log.error("Config invalid: {}", r.getMsg()); return; }
ConfigValidationUtils.validate(config, r);
Defensive patterns

Strategy: validation

Validate before calling

CheckResult r = factory.check(cfg); if (!r.isSuccess()) { throw new ConfigCheckException(r.getMsg()); }

Try / catch

try { ConfigValidationUtils.validate(config, checkResult); } catch (ConfigCheckException e) { log.error("Config check failed: {}", e.getMessage()); }

Prevention

When it happens

Trigger: Calling ConfigValidationUtils.validate(config, checkResult) with a failed CheckResult, typically from testValidSourceConfiguration/testValidSinkConfiguration after plugin check() reported an error.

Common situations: Plugin factory checks (missing options, invalid ranges) return failed CheckResults; unit tests using assertInvalid; hand-built CheckResult passed by mistake.

Understand the failure class

Background: Schema validation failed / invalid input schema: payload rejected because its shape doesn't match the expected schema — this error's family across 28 libraries.

Related errors


AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10). Data as JSON: /api/errors/b600f4bd9a961e74. Report an issue: GitHub.