apache/seatunnel · error · SeaTunnelException

${CommonError.convertToConnectorPropsBlankError(Paimon, prop

Error message

${CommonError.convertToConnectorPropsBlankError(Paimon, propKey)}

What it means

PaimonConfig.checkArgumentNotBlank validates a connector property and, when the value is blank, throws SeaTunnelException carrying CommonError.convertToConnectorPropsBlankError("Paimon", propKey) — a standardized 'Paimon property <key> cannot be blank' message. PaimonConfig's constructor uses it for required string options (e.g. user/password/warehouse-related fields) that must be non-empty for the connector to function.

Source

Thrown at seatunnel-connectors-v2/connector-paimon/src/main/java/org/apache/seatunnel/connectors/seatunnel/paimon/config/PaimonConfig.java:85

        this.namespace = readonlyConfig.get(PaimonBaseOptions.DATABASE);
        this.table = readonlyConfig.get(PaimonBaseOptions.TABLE);
        this.hdfsSitePath = readonlyConfig.get(PaimonBaseOptions.HDFS_SITE_PATH);
        this.hadoopConfProps = readonlyConfig.get(PaimonBaseOptions.HADOOP_CONF);
        this.hadoopConfPath = readonlyConfig.get(PaimonBaseOptions.HADOOP_CONF_PATH);
        this.catalogType = readonlyConfig.get(PaimonBaseOptions.CATALOG_TYPE);
        if (PaimonCatalogEnum.HIVE.getType().equals(catalogType.getType())) {
            this.catalogUri =
                    checkArgumentNotBlank(
                            readonlyConfig.get(PaimonBaseOptions.CATALOG_URI),
                            PaimonBaseOptions.CATALOG_URI.key());
        }
        this.user = readonlyConfig.get(PaimonBaseOptions.USER);
        this.password = readonlyConfig.get(PaimonBaseOptions.PASSWORD);
    }

    protected String checkArgumentNotBlank(String propValue, String propKey) {
        if (StringUtils.isBlank(propValue)) {
            throw new SeaTunnelException(
                    CommonError.convertToConnectorPropsBlankError("Paimon", propKey));
        }
        return propValue;
    }

    protected static List<String> stringToList(String value, String regex) {
        if (value == null || value.isEmpty()) {
            return ImmutableList.of();
        }
        return Arrays.stream(value.split(regex)).map(String::trim).collect(toList());
    }
}

View on GitHub (pinned to cf67b549a7)

Solutions

  1. Set the reported property (see propKey in the message) to a real non-blank value in the SeaTunnel connector config.
  2. Fix variable/secret substitution so placeholders resolve before job submission.
  3. Quote and trim values in HOCON/YAML to avoid accidental whitespace-only strings.
  4. Validate required options in your submission pipeline before launching the job.

Example fix

// before
Paimon {
  user = ""
  password = ""
}
// after
Paimon {
  user = "etl_user"
  password = "${PAIMON_PASSWORD}"
}
Defensive patterns

Strategy: validation

Validate before calling

for (Option<String> opt : List.of(PaimonBaseOptions.USER, PaimonBaseOptions.PASSWORD)) {
    String v = readonlyConfig.get(opt);
    if (v == null || v.trim().isEmpty()) {
        throw new ConfigValidationException(opt.key() + " must be non-blank");
    }
}

Try / catch

try {
    PaimonConfig cfg = new PaimonConfig(readonlyConfig);
} catch (SeaTunnelException e) {
    if (e.getMessage() != null && e.getMessage().contains("cannot be blank")) {
        LOG.error("fill in the reported Paimon option before submitting");
    }
    throw e;
}

Prevention

When it happens

Trigger: Instantiating PaimonConfig (from a SeaTunnel ReadonlyConfig) where a required string option such as PaimonBaseOptions.USER or PASSWORD resolves to blank (empty or whitespace) and passes through checkArgumentNotBlank.

Common situations: Credentials supplied as empty strings from templated configs; env-var placeholders that resolved to nothing; copying a config sample and leaving a value empty; whitespace-only values that look non-empty in YAML/HOCON.

Understand the failure class

Background: "must not be empty", "cannot be empty" — required-field validation errors across open-source libraries — this error's family across 41 libraries.

Related errors


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