{"record":{"id":"497bf4cac3cf967e","repo":"apache/seatunnel","slug":"config-validation-failed-497bf4","errorCode":"CONFIG_VALIDATION_FAILED","errorMessage":"The Shopify source does not support the 'pageing' option: it would be accepted and then ignored, so only the first page of results would be read while the job reported success. Remove 'pageing' from the source configuration.","messagePattern":"The Shopify source does not support the 'pageing' option: it would be accepted and then ignored, so only the first page of results would be read while the job reported success\\. Remove 'pageing' from the source configuration\\.","errorType":"error_code","errorClass":"HttpConnectorException","httpStatus":null,"severity":"error","filePath":"seatunnel-connectors-v2/connector-http/connector-http-shopify/src/main/java/org/apache/seatunnel/connectors/seatunnel/shopify/source/ShopifySource.java","lineNumber":63,"sourceCode":"    public ShopifySource(ReadonlyConfig pluginConfig) {\n        super(pluginConfig);\n        rejectUnsupportedPagination(pluginConfig);\n        this.shopifySourceParameter.buildWithConfig(pluginConfig);\n    }\n\n    /**\n     * {@code pageing} is inherited from the HTTP source option rule, but this connector never hands\n     * a {@code PageInfo} to its reader, so accepting the option would read the first response and\n     * report success — a store with more than one page of results would lose the rest silently.\n     * Failing at startup keeps that from looking like a healthy job.\n     *\n     * <p>The Admin REST API returns its cursor in the {@code Link} response header, while the\n     * shared reader resolves cursors with a JsonPath against the response body, so supporting this\n     * properly needs a header-cursor mode in {@code connector-http-base} rather than a change here.\n     */\n    private static void rejectUnsupportedPagination(ReadonlyConfig pluginConfig) {\n        if (pluginConfig.getOptional(HttpSourceOptions.PAGEING).isPresent()) {\n            throw new HttpConnectorException(\n                    HttpConnectorErrorCode.CONFIG_VALIDATION_FAILED,\n                    \"The Shopify source does not support the 'pageing' option: it would be \"\n                            + \"accepted and then ignored, so only the first page of results would \"\n                            + \"be read while the job reported success. Remove 'pageing' from the \"\n                            + \"source configuration.\");\n        }\n    }\n\n    @Override\n    public String getPluginName() {\n        return \"Shopify\";\n    }\n\n    @Override\n    public AbstractSingleSplitReader<SeaTunnelRow> createReader(\n            SingleSplitReaderContext readerContext) throws Exception {\n        return new HttpSourceReader(\n                this.shopifySourceParameter,","sourceCodeStart":45,"sourceCodeEnd":81,"githubUrl":"https://github.com/apache/seatunnel/blob/cf67b549a7a6c35fa0beb12d83c62892427ea919/seatunnel-connectors-v2/connector-http/connector-http-shopify/src/main/java/org/apache/seatunnel/connectors/seatunnel/shopify/source/ShopifySource.java#L45-L81","documentation":"The Shopify source rejects the 'pageing' option at startup because it inherits the option from connector-http-base but never supplies a PageInfo to its reader. Accepting it would silently read only the first page while the job reported success. The Admin REST API returns cursors in the Link header, which the shared JsonPath-based reader cannot follow.","triggerScenarios":"A Shopify source config containing the 'pageing' option (inherited from HttpSourceOptions) causes ShopifySource's constructor to call rejectUnsupportedPagination and throw HttpConnectorException(CONFIG_VALIDATION_FAILED).","commonSituations":"Developers copy a generic HTTP source config and add 'pageing' assuming pagination works like the base connector; stores with >1 page of orders/products would otherwise silently lose data.","solutions":["Remove the 'pageing' option from the Shopify source configuration","Wait for/track header-cursor (Link header) pagination support in connector-http-base","If multiple pages are needed, filter requests (e.g. created_at_min/max, updated_at_min/max) so each result set fits in one page"],"exampleFix":"// before\nsource {\n  Shopify {\n    url = \"https://mystore.myshopify.com/admin/api/2023-01/orders.json\"\n    pageing {\n      page_size = 100\n    }\n  }\n}\n// after\nsource {\n  Shopify {\n    url = \"https://mystore.myshopify.com/admin/api/2023-01/orders.json\"\n  }\n}","handlingStrategy":"validation","validationCode":"if (config.containsKey(\"pageing\")) {\n  throw new IllegalArgumentException(\"Shopify source: remove 'pageing' — header-cursor pagination is unsupported\");\n}","typeGuard":null,"tryCatchPattern":"try { new ShopifySource(pluginConfig); } catch (HttpConnectorException e) {\n  if (e.getHttpConnectorErrorCode() == HttpConnectorErrorCode.CONFIG_VALIDATION_FAILED) { /* fix config, resubmit */ }\n}","preventionTips":["Never reuse HTTP-source pagination options blindly in the Shopify connector","Validate job configs against each connector's supported options before submission","Add config linting that flags 'pageing' for Shopify sources"],"tags":["config-validation","pagination","shopify","http-source"],"backgroundTag":"unsupported-config-value","analyzedSha":"cf67b549a7a6c35fa0beb12d83c62892427ea919","analyzedAt":"2026-09-10T21:44:55.265Z","contentChangedAt":"2026-09-10T21:44:55.265Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}