{"record":{"id":"ecdc7869ac0067c4","repo":"apache/seatunnel","slug":"stripe-source-only-supports-batch-jobs","errorCode":null,"errorMessage":"Stripe source only supports batch jobs","messagePattern":"Stripe source only supports batch jobs","errorType":"exception","errorClass":"UnsupportedOperationException","httpStatus":null,"severity":"error","filePath":"seatunnel-connectors-v2/connector-http/connector-http-stripe/src/main/java/org/apache/seatunnel/connectors/seatunnel/stripe/source/StripeSource.java","lineNumber":81,"sourceCode":"                CatalogTable.of(\n                        TableIdentifier.of(PLUGIN_NAME, TablePath.DEFAULT),\n                        tableSchema,\n                        Collections.emptyMap(),\n                        Collections.emptyList(),\n                        null);\n    }\n\n    @Override\n    public String getPluginName() {\n        return PLUGIN_NAME;\n    }\n\n    @Override\n    public Boundedness getBoundedness() {\n        if (JobMode.BATCH.equals(jobContext.getJobMode())) {\n            return Boundedness.BOUNDED;\n        }\n        throw new UnsupportedOperationException(\"Stripe source only supports batch jobs\");\n    }\n\n    @Override\n    public List<CatalogTable> getProducedCatalogTables() {\n        return Lists.newArrayList(catalogTable);\n    }\n\n    @Override\n    public AbstractSingleSplitReader<SeaTunnelRow> createReader(\n            SingleSplitReaderContext readerContext) {\n        return new StripeSourceReader(sourceParameter, readerContext);\n    }\n\n    @Override\n    public void setJobContext(JobContext jobContext) {\n        this.jobContext = jobContext;\n    }\n}","sourceCodeStart":63,"sourceCodeEnd":99,"githubUrl":"https://github.com/apache/seatunnel/blob/cf67b549a7a6c35fa0beb12d83c62892427ea919/seatunnel-connectors-v2/connector-http/connector-http-stripe/src/main/java/org/apache/seatunnel/connectors/seatunnel/stripe/source/StripeSource.java#L63-L99","documentation":"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.","triggerScenarios":"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.","commonSituations":"Developers reuse a streaming job config template and swap in a Stripe source, or migrate a batch job to streaming without changing the connector.","solutions":["Set execution.mode = \"BATCH\" in the job env block","Split streaming requirements: batch-sync Stripe data to a store, then stream from that store","Use a different streaming-capable source connector for live data"],"exampleFix":"// before\nenv {\n  execution.mode = \"STREAMING\"\n}\n// after\nenv {\n  execution.mode = \"BATCH\"\n}","handlingStrategy":"validation","validationCode":"if (!\"BATCH\".equals(jobEnv.get(\"execution.mode\"))) {\n  throw new IllegalArgumentException(\"Stripe source requires execution.mode = BATCH\");\n}","typeGuard":null,"tryCatchPattern":"try { source.getBoundedness(); } catch (UnsupportedOperationException e) {\n  // switch job env to BATCH and resubmit\n}","preventionTips":["Keep a single job-mode convention for Stripe ingestion pipelines","Check connector docs for streaming support before reusing templates","Add a pre-submit check that source boundedness matches job mode"],"tags":["streaming","batch-mode","boundedness","stripe"],"backgroundTag":"unsupported-operation","analyzedSha":"cf67b549a7a6c35fa0beb12d83c62892427ea919","analyzedAt":"2026-09-10T21:44:55.265Z","contentChangedAt":"2026-09-10T21:44:55.265Z","schemaVersion":2},"datasetVersion":"2026-09-14T11:17:12.474Z"}