apache/seatunnel · error · UnsupportedOperationException

Stripe source only supports batch jobs

Error message

Stripe source only supports batch jobs

What it means

StripeSource.getBoundedness returns BOUNDED only when the job runs in BATCH mode; in any other mode it throws UnsupportedOperationException. The Stripe reader is a simple cursor-paginated REST reader and has no continuous/streaming implementation.

Source

Thrown at seatunnel-connectors-v2/connector-http/connector-http-stripe/src/main/java/org/apache/seatunnel/connectors/seatunnel/stripe/source/StripeSource.java:81

                CatalogTable.of(
                        TableIdentifier.of(PLUGIN_NAME, TablePath.DEFAULT),
                        tableSchema,
                        Collections.emptyMap(),
                        Collections.emptyList(),
                        null);
    }

    @Override
    public String getPluginName() {
        return PLUGIN_NAME;
    }

    @Override
    public Boundedness getBoundedness() {
        if (JobMode.BATCH.equals(jobContext.getJobMode())) {
            return Boundedness.BOUNDED;
        }
        throw new UnsupportedOperationException("Stripe source only supports batch jobs");
    }

    @Override
    public List<CatalogTable> getProducedCatalogTables() {
        return Lists.newArrayList(catalogTable);
    }

    @Override
    public AbstractSingleSplitReader<SeaTunnelRow> createReader(
            SingleSplitReaderContext readerContext) {
        return new StripeSourceReader(sourceParameter, readerContext);
    }

    @Override
    public void setJobContext(JobContext jobContext) {
        this.jobContext = jobContext;
    }
}

View on GitHub (pinned to cf67b549a7)

Solutions

  1. Set execution.mode = "BATCH" in the job env block
  2. Split streaming requirements: batch-sync Stripe data to a store, then stream from that store
  3. Use a different streaming-capable source connector for live data

Example fix

// before
env {
  execution.mode = "STREAMING"
}
// after
env {
  execution.mode = "BATCH"
}
Defensive patterns

Strategy: validation

Validate before calling

if (!"BATCH".equals(jobEnv.get("execution.mode"))) {
  throw new IllegalArgumentException("Stripe source requires execution.mode = BATCH");
}

Try / catch

try { source.getBoundedness(); } catch (UnsupportedOperationException e) {
  // switch job env to BATCH and resubmit
}

Prevention

When it happens

Trigger: Submitting a job with env { execution.mode = "STREAMING" } (or any non-BATCH JobMode) against a Stripe source triggers the throw when the framework calls getBoundedness.

Common situations: Developers reuse a streaming job config template and swap in a Stripe source, or migrate a batch job to streaming without changing the connector.

Understand the failure class

Background: UnsupportedOperationException and "is not supported" errors: when a library deliberately refuses a call — this error's family across 30 libraries.

Related errors


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