[
https://issues.apache.org/jira/browse/CAMEL-26166?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Work on CAMEL-26166 started by Claus Ibsen.
-------------------------------------------
> camel-stripe - a bytes or stream body is not converted to the request
> parameters, and the CamelStripeOperation header is never read
> -----------------------------------------------------------------------------------------------------------------------------------
>
> Key: CAMEL-26166
> URL: https://issues.apache.org/jira/browse/CAMEL-26166
> Project: Camel
> Issue Type: Bug
> Reporter: Claus Ibsen
> Assignee: Claus Ibsen
> Priority: Minor
> Fix For: 4.24.0
>
>
> Found while adding the catalog body types of stripe (CAMEL-24961, PR #28410).
> h4. 1. A bytes or stream body is not converted
> {{StripeProducer.getParametersFromBody}} (main 2a465aa4814c, lines 76-99)
> accepts only a {{Map}} or a {{String}} (by {{instanceof}}) and throws "Body
> must be a Map<String, Object> or a JSON String" for anything else. A JSON
> body as {{byte[]}} or {{InputStream}}, e.g. the body of a {{rest:post}} or
> {{platform-http}} route, fails. Checked on 4.24.0-SNAPSHOT with a local JDK
> HttpServer as {{apiBase}}: the REST example in the doc failed until a
> {{convertBodyTo}} String was added (done in the PR).
> Proposed: convert any other body with {{getBody(String.class)}} before
> parsing it as JSON.
> h4. 2. The CamelStripeOperation header is declared and documented but never
> read
> {{StripeConstants.OPERATION_HEADER}} (main 2a465aa4814c, lines 38-39) is
> listed in the docs as a header ("The operation to perform"), but
> {{StripeProducer.process}} (line 55) takes the operation only from the
> endpoint option, so the header has no effect. Checked on 4.24.0-SNAPSHOT with
> the local fake.
> Proposed: read the header first and fall back to the {{operation}} option (as
> is done for {{CamelStripeMethod}}), or remove the header from the docs.
> h4. 3. update, capture, delete and cancel make an extra retrieve GET first
> {{StripeProducer}} handles update, capture, delete and cancel by retrieving
> the object first and then calling the method on it (main 2a465aa4814c, e.g.
> lines 138, 144, 160 and 164, and the same for the other operations), so each
> call makes two HTTP requests to Stripe. Checked on 4.24.0-SNAPSHOT with the
> local fake, which received a GET before each update and delete.
> Proposed: call the Stripe API on the id directly (for example the
> {{StripeClient}} service API, {{client.customers().update(id, params)}}),
> without the retrieve.
> _Claude Code on behalf of davsclaus_
--
This message was sent by Atlassian Jira
(v10.3.26#10030026)