Claus Ibsen created CAMEL-26154:
-----------------------------------
Summary: camel-iggy - the producer turns a byte[] body into a
String and corrupts binary data, and the consumer decodes with the platform
charset
Key: CAMEL-26154
URL: https://issues.apache.org/jira/browse/CAMEL-26154
Project: Camel
Issue Type: Bug
Reporter: Claus Ibsen
Fix For: 4.24.0
Found while adding the catalog body types of rocketmq, hivemq, iggy and
kafka-share (CAMEL-24961, PR #28394).
h4. 1. The producer corrupts binary bodies
{{IggyProducer.process}} (main 2a465aa4814c, line 102) converts every body that
is not a {{List}} or an Iggy {{Message}} to a {{String}} and sends
{{Message.of(String)}}. A {{byte[]}} that is not valid UTF-8 is corrupted: the
bytes {{ff fe 00 41}} are stored as {{EF BF BD EF BF BD 00 41}}. Checked on
4.24.0-SNAPSHOT with iggy 0.9.0 in Docker.
Proposed: send {{byte[]}} (and streams, files) as bytes with
{{Message.of(MessageHeader, byte[], ...)}}, and convert only other bodies to
text.
h4. 2. The consumer decodes the payload with the platform charset
{{IggyFetchRecords}} (line 191) sets the body to {{new
String(message.payload())}}, which uses the JVM default charset (the line has a
{{TODO is it ok?}}). Text sent as UTF-8 is read wrong on a JVM with another
default charset, and binary payloads cannot be read back. Read in the code, not
run.
Proposed: give the payload as {{byte[]}} (or decode as UTF-8, or by a charset
option).
h4. 3. No body fails with a NullPointerException
With a null body, {{IggyProducer.process}} (line 102) calls
{{Message.of(null)}}, which throws a {{NullPointerException}} inside the Iggy
client. Checked on 4.24.0-SNAPSHOT with iggy 0.9.0.
Proposed: fail with a clear message (or send an empty payload) when there is no
body.
h4. 4. An empty List fails with an unclear error
An empty {{List}} body (line 85) passes {{isListOfStrings}} and is sent as an
empty batch and fails with {{Cannot encode an empty message batch}} from the
client. Checked on 4.24.0-SNAPSHOT with iggy 0.9.0.
Proposed: skip the send for an empty List, or fail with a message that says the
List is empty.
h4. 5. camel-test-infra-iggy cannot start the 0.9.0 image
{{IggyContainer}} (test-infra/camel-test-infra-iggy, line 43) sets only the
root user, password and TCP address. The {{mirror.gcr.io/apache/iggy:0.9.0}}
image of {{container.properties}} also needs {{IGGY_NODE_ADVERTISED_ADDRESS}}
and {{IGGY_SHARDING_CPU_ALLOCATION}} to start. Checked on 4.24.0-SNAPSHOT with
iggy 0.9.0 in Docker: the container does not start without them.
Proposed: set both environment variables in {{IggyContainer}}.
_Claude Code on behalf of davsclaus_
--
This message was sent by Atlassian Jira
(v10.3.26#10030026)