Claus Ibsen created CAMEL-26177:
-----------------------------------
Summary: camel-dhis2 - post/put send bytes as base64 and a File as
its path, and a leftover body is sent on delete
Key: CAMEL-26177
URL: https://issues.apache.org/jira/browse/CAMEL-26177
Project: Camel
Issue Type: Bug
Components: camel-dhis2
Reporter: Claus Ibsen
Fix For: 4.24.0
Found while adding the catalog body types of dhis2 (CAMEL-24961, PR #28412).
h4. 1. post, put and delete send bytes as base64 and a File as its path, and an
InputStream fails
{{Dhis2Producer.findMethod}} (main 2a465aa4814c, lines 36-37) passes the body
as is as the {{resource}} argument, and {{Dhis2Post.resource}} (line 48, same
in {{Dhis2Put}} and {{Dhis2Delete}}) hands it to the DHIS2 client, which writes
it with Jackson. So a {{byte[]}} with JSON is sent as a base64 JSON string and
a {{java.io.File}} as its path string, with no error, and an {{InputStream}}
fails in Jackson. Checked on 4.24.0-SNAPSHOT with a JDK HTTP server as the
DHIS2 API.
Proposed: send text, byte array, stream and file bodies as the raw JSON payload
instead of serializing them with Jackson.
h4. 2. A leftover body is sent as the payload of delete/resource
{{Dhis2Producer.findMethod}} (main 2a465aa4814c, lines 36-37) sets {{resource}}
from the body for every call, so for {{delete/resource}} (whose {{resource}} is
optional) any body left by an earlier step is sent as the DELETE payload.
Checked on 4.24.0-SNAPSHOT with the local server.
Proposed: take the body as the resource only for the methods that need one
({{post}} and {{put}}), or only through {{inBody=resource}}.
h4. 3. The get/collection consumer emits one message with an Iterator body
{{Dhis2Get.collection}} (main 2a465aa4814c, line 80) returns an
{{Iterator<Dhis2Resource>}}, and {{ApiConsumerHelper.getResultsProcessed}}
(camel-support, lines 100-112) splits Lists, Iterables and arrays but not an
Iterator, so the consumer sends one message whose body is the Iterator instead
of one message per resource. Checked on 4.24.0-SNAPSHOT with the local server.
Proposed: split an Iterator too (in {{ApiConsumerHelper}}, or by wrapping it in
{{Dhis2Consumer.splitResult}}).
_Claude Code on behalf of davsclaus_
--
This message was sent by Atlassian Jira
(v10.3.26#10030026)