Skip to content

CAMEL-24961: Catalog body types for mina, mllp, grpc, thrift, avro, cometd, quickfix, jgroups and five more network components - #28413

Closed
davsclaus wants to merge 1 commit into
mainfrom
feature/CAMEL-24961-body-types-network-rpc
Closed

davsclaus wants to merge 1 commit into
mainfrom
feature/CAMEL-24961-body-types-network-rpc

Conversation

@davsclaus

@davsclaus davsclaus commented Oct 24, 2026 •

Copy link
Copy Markdown
Contributor

Claude Code on behalf of davsclaus

This group adds the catalog body types (CAMEL-24961) for thirteen network and RPC components: mina, mina-sftp, mllp, lumberjack, asterisk, grpc, thrift, avro, cometd, cometds, quickfix, jgroups and jgroups-raft. Each change is an @BodyTypes annotation on the Endpoint, plus the JSON it generates and the catalog copy. Three doc pages had their body text corrected.

What the catalog says now

Component Consumer Reply of the consumer Producer input Producer output
mina a String (the default object codec over TCP); byte[] over UDP; an IoBuffer with allowDefaultCodec=false a String, or no body a String; any body with textline; text, bytes, a stream or a file over UDP the reply as a String; byte[] over UDP
mina-sftp as sftp: a RemoteFile, a stream with streamDownload, no body with download=false text, bytes, a stream or a file unchanged
mllp the HL7 message as a String (byte[] with stringPayload=false) any: the body is not sent; the acknowledgement comes from the CamelMllpAcknowledgement properties or autoAck text or bytes unchanged, with the acknowledgement in headers
lumberjack the JSON of each log event as Java objects, normally a Map
asterisk a ManagerEvent any: the action and its arguments are headers the ManagerResponse
grpc the protobuf request; a List with AGGREGATION; no body with forwardOnCompleted the response message, or a List of them for a stream a message or a List a List by default; the message or a List with synchronous=true; unchanged with STREAMING
thrift a List of the arguments converted to the return type of the method a List of the arguments, or the one argument unknown: the return type of the IDL
avro an Object[] of the parameters, or the parameter with singleParameter the response type of the protocol, which is not converted an Object[] or the single parameter unknown: the response of the protocol
cometd, cometds the Bayeux data parsed from JSON: text, a value, a Map, a List the same, with InOut text, a value, a Map or a List unchanged
quickfix a quickfix.Message, or no body for the session events a Message, or FIX text or bytes, with InOut a Message, or FIX text or bytes unchanged, or the reply Message with InOut
jgroups unknown: what the peer serialized; View messages with enableViewMessages a Serializable body unchanged
jgroups-raft no body: the role change events, with the role in a header bytes, text, a stream or a file the result of the state machine as byte[]

Checked at runtime. Throwaway tests, not part of the PR, sent text, bytes, a stream, a file, a Map, a POJO, a number and no body. Every call stayed local. The setups:

  • Local sockets: mina (TCP, UDP, textline, the object codec), mllp, and a lumberjack client.
  • Embedded servers: Apache SSHD for mina-sftp, a fake AMI server, and the in-process quickfix acceptor and initiator.
  • RPC: the gRPC, Thrift and Avro servers in netty, with the Camel consumers.
  • cometd: the embedded Jetty CometD server, with a Bayeux client.
  • jgroups: local JGroups and jgroups-raft channels.

Not run: cometds over TLS, the avro http transport, the jgroups-raft FOLLOWER event, and the asterisk error answer.

Choices

  • mina does not copy netty. Its default TCP codec is Java object serialization, so only a String gets through unless objectCodecPattern lists more classes, and the descriptions say so.
  • mina-sftp copies the body types of sftp on main.
  • thrift and avro give unknown outputs, as the IDL or the protocol decides the class.

Doc fixes

  • mllp: the page said the component uses byte[] payloads. By default the consumer gives a String.
  • quickfix: the correlation predicate is not reversed. It is the session as the replier sees it, and it is required for InOut.
  • avro: in the singleParameter example, get receives the Key, and put an array of the Key and the Value.

PRs #28214, #28373 (camel-mina-sftp), #28360 (camel-avro-rpc) and #28378 (camel-quickfix) change code of these modules, but not their Endpoint classes or generated files.

Bugs found, not fixed here. Filed one JIRA per component: CAMEL-26182 (camel-mina), CAMEL-26183 (camel-mllp), CAMEL-26184 (camel-quickfix), CAMEL-26185 (camel-asterisk), CAMEL-26186 (camel-thrift), CAMEL-26187 (camel-grpc), CAMEL-26188 (camel-cometd), CAMEL-26189 (camel-jgroups-raft), CAMEL-26190 (camel-jgroups).

  • quickfix:
    • An InOut consumer replies to every event, so messages the route does not answer are echoed back. The reply to the Logon re-sends the Logon until a StackOverflowError. The example of the page is affected.
    • An InOut reply that does not convert fails inside fromApp. The sequence does not move on, so the counterparty asks for resends without end.
    • An InOut producer without CorrelationCriteria leaves a rule with a null predicate, and every later engine event fails with a NullPointerException.
    • A producer body that does not convert fails with a bare "message is null".
  • mina:
    • With sync=false and InOut, the body and the headers are lost after the producer, as getOut() creates an empty message.
    • A textline reply is not type converted, so bytes are written as [B@….
    • The consumer ignores sync=false and always replies.
  • mllp: a body that is not a String or bytes is sent as an empty message, and the producer then times out waiting for the acknowledgement.
  • asterisk: QUEUE_STATUS and SIP_PEERS give only the first response, as the events that follow are not collected.
  • grpc: a reply is not checked against the response type of the method. A request body left as the reply was decoded by the client as a response.
  • thrift:
    • On the async server, a reply that does not convert gives the client a null result or "unknown result", with no error.
    • On the sync server, a null reply for an i32 method sends 0.
  • cometd:
    • A stream is published as its toString, and a File as its path.
    • No body publishes nothing, with no error.
  • jgroups-raft:
    • A Map, a number or a POJO body is skipped, with no error.
    • A List fails with a misleading conversion error.
    • raftId and channelProperties work as endpoint parameters, but are only component options in the catalog.
  • jgroups: a stream body fails with NotSerializableException, with no hint to convert it.

Local checks

  • The changed modules build, with no change to the generated files after the build.
  • The catalog copies equal their modules.
  • camel-catalog, camel-yaml-dsl-validator and camel-jbang-core tests pass.
  • The Endpoint and Component DSLs regenerate with no change.

🤖 Generated with Claude Code

@davsclaus davsclaus added this to the 4.24.0 milestone Oct 24, 2026
@davsclaus davsclaus added the enhancement New feature or request label Oct 24, 2026
@github-actions

Copy link
Copy Markdown
Contributor

🌟 Thank you for your contribution to the Apache Camel project! 🌟
🤖 CI automation will test this PR automatically.

🐫 Apache Camel Committers, please review the following items:

  • First-time contributors require MANUAL approval for the GitHub Actions to run
  • You can use the command /component-test (camel-)component-name1 (camel-)component-name2.. to request a test from the test bot although they are normally detected and executed by CI.
  • You can label PRs using skip-tests and test-dependents to fine-tune the checks executed by this PR.
  • Build and test logs are available in the summary page. Only Apache Camel committers have access to the summary.

⚠️ Be careful when sharing logs. Review their contents before sharing them publicly.

@github-actions

github-actions Bot commented Oct 24, 2026 •

Copy link
Copy Markdown
Contributor

🧪 CI tested the following changed modules:

  • catalog/camel-catalog
  • components/camel-asterisk
  • components/camel-avro-rpc/camel-avro-rpc-component
  • components/camel-cometd
  • components/camel-grpc
  • components/camel-jgroups-raft
  • components/camel-jgroups
  • components/camel-lumberjack
  • components/camel-mina-sftp
  • components/camel-mina
  • components/camel-mllp
  • components/camel-quickfix
  • components/camel-thrift

🔁 1 test passed only after a retry on JDK 21 (1 retried attempt)

Recovered flaky tests on JDK 21 (1)
Module Test Failed attempts First failure
dsl/camel-jbang/camel-jbang-plugin-tui LaunchManagerOutcomeTest.startedWhenTheStatusFileSaysSo 1 expected: null but was: LaunchOutcome[ok=false, log=null]

ℹ️ These tests did not fail the build. Surefire retried them and they passed.
Retries are enabled project-wide by surefire.rerunFailingTestsCount in parent/pom.xml.


🔬 Scalpel shadow comparison — Scalpel: 22 of 707 tested, 26 compile-only — current: 22 all tested

Maveniverse Scalpel detected 22 affected modules (current approach: 22).

Skip-tests mode would test 22 modules (13 direct + 10 downstream), skip tests for 26 (generated code, meta-modules)

Modules Scalpel would test (22)
  • camel-asterisk ← components/camel-asterisk/src/generated/resources/META-INF/org/apache/camel/component/asterisk/asterisk.json, components/camel-asterisk/src/main/java/org/apache/camel/component/asterisk/AsteriskEndpoint.java
  • camel-avro-rpc ← components/camel-avro-rpc/camel-avro-rpc-component/src/generated/resources/META-INF/org/apache/camel/component/avro/avro.json, components/camel-avro-rpc/camel-avro-rpc-component/src/main/docs/avro-component.adoc, components/camel-avro-rpc/camel-avro-rpc-component/src/main/java/org/apache/camel/component/avro/AvroEndpoint.java
  • camel-cometd ← components/camel-cometd/src/generated/resources/META-INF/org/apache/camel/component/cometd/cometd.json, components/camel-cometd/src/generated/resources/META-INF/org/apache/camel/component/cometd/cometds.json, components/camel-cometd/src/main/java/org/apache/camel/component/cometd/CometdEndpoint.java
  • camel-fhir ← downstream of org.apache.camel:camel-hl7
  • camel-grpc ← components/camel-grpc/src/generated/resources/META-INF/org/apache/camel/component/grpc/grpc.json, components/camel-grpc/src/main/java/org/apache/camel/component/grpc/GrpcEndpoint.java
  • camel-hl7 ← downstream of org.apache.camel:camel-mina
  • camel-jbang-mcp ← downstream of org.apache.camel:camel-catalog
  • camel-jbang-plugin-mcp ← downstream of org.apache.camel:camel-jbang-core
  • camel-jbang-plugin-tui ← downstream of org.apache.camel:camel-catalog
  • camel-jbang-plugin-validate ← downstream of org.apache.camel:camel-yaml-dsl-validator
  • camel-jgroups ← components/camel-jgroups/src/generated/resources/META-INF/org/apache/camel/component/jgroups/jgroups.json, components/camel-jgroups/src/main/java/org/apache/camel/component/jgroups/JGroupsEndpoint.java
  • camel-jgroups-raft ← components/camel-jgroups-raft/src/generated/resources/META-INF/org/apache/camel/component/jgroups/raft/jgroups-raft.json, components/camel-jgroups-raft/src/main/java/org/apache/camel/component/jgroups/raft/JGroupsRaftEndpoint.java
  • camel-launcher-container ← downstream of org.apache.camel:camel-launcher
  • camel-lumberjack ← components/camel-lumberjack/src/generated/resources/META-INF/org/apache/camel/component/lumberjack/lumberjack.json, components/camel-lumberjack/src/main/java/org/apache/camel/component/lumberjack/LumberjackEndpoint.java
  • camel-mina ← components/camel-mina/src/generated/resources/META-INF/org/apache/camel/component/mina/mina.json, components/camel-mina/src/main/java/org/apache/camel/component/mina/MinaEndpoint.java
  • camel-mina-sftp ← components/camel-mina-sftp/src/generated/resources/META-INF/org/apache/camel/component/file/remote/mina/mina-sftp.json, components/camel-mina-sftp/src/main/java/org/apache/camel/component/file/remote/mina/MinaSftpEndpoint.java
  • camel-mllp ← components/camel-mllp/src/generated/resources/META-INF/org/apache/camel/component/mllp/mllp.json, components/camel-mllp/src/main/docs/mllp-component.adoc, components/camel-mllp/src/main/java/org/apache/camel/component/mllp/MllpEndpoint.java
  • camel-quickfix ← components/camel-quickfix/src/generated/resources/META-INF/org/apache/camel/component/quickfixj/quickfix.json, components/camel-quickfix/src/main/docs/quickfix-component.adoc, components/camel-quickfix/src/main/java/org/apache/camel/component/quickfixj/QuickfixjEndpoint.java
  • camel-syslog ← downstream of org.apache.camel:camel-mina
  • camel-thrift ← components/camel-thrift/src/generated/resources/META-INF/org/apache/camel/component/thrift/thrift.json, components/camel-thrift/src/main/java/org/apache/camel/component/thrift/ThriftEndpoint.java
  • camel-yaml-dsl-validator ← downstream of org.apache.camel:camel-catalog
  • camel-yaml-dsl-validator-maven-plugin ← downstream of org.apache.camel:camel-yaml-dsl-validator
Modules with tests skipped (26)
  • apache-camel
  • camel-allcomponents
  • camel-catalog-console
  • camel-catalog-maven
  • camel-catalog-suggest
  • camel-componentdsl
  • camel-endpointdsl
  • camel-endpointdsl-support
  • camel-itest
  • camel-jbang-core
  • camel-jbang-it
  • camel-jbang-main
  • camel-jbang-plugin-edit
  • camel-jbang-plugin-generate
  • camel-jbang-plugin-kubernetes
  • camel-jbang-plugin-test
  • camel-kamelet-main
  • camel-launcher
  • camel-report-maven-plugin
  • camel-route-parser
  • camel-yaml-dsl
  • camel-yaml-dsl-deserializers
  • camel-yaml-dsl-maven-plugin
  • coverage
  • docs
  • dummy-component

ℹ️ Shadow mode — Scalpel observes but does not affect test execution. Learn more

⚠️ Some tests are disabled on GitHub Actions (@DisabledIfSystemProperty(named = "ci.env.name")) and require manual verification:

  • components/camel-lumberjack: 1 test(s) disabled on GitHub Actions
  • components/camel-mllp: 1 test(s) disabled on GitHub Actions
All tested modules (49 modules, 8m 56s total)

Total reactor time: 8m 56s

Module Duration Status
Camel :: MINA 55.2s SUCCESS
Camel :: Launcher 49.2s SUCCESS
Camel :: Lumberjack 45.7s SUCCESS
Camel :: JBang :: MCP 41.3s SUCCESS
Camel :: Component DSL 28.9s SUCCESS
Camel :: JBang :: Plugin :: Validate 28.5s SUCCESS
Camel :: YAML DSL :: Validator 26.0s SUCCESS
Camel :: HL7 24.2s SUCCESS
Camel :: Catalog :: Camel Catalog 23.7s SUCCESS
Camel :: YAML DSL 21.7s SUCCESS
Camel :: gRPC 18.3s SUCCESS
Camel :: QuickFIX/J 16.6s SUCCESS
Camel :: Kamelet Main 15.5s SUCCESS
Camel :: JGroups Raft 15.1s SUCCESS
Camel :: Docs 15.0s SUCCESS
Camel :: JBang :: Plugin :: Testing 14.1s SUCCESS
Camel :: Cometd 13.7s SUCCESS
Camel :: Syslog 13.4s SUCCESS
Camel :: JBang :: Plugin :: Kubernetes 12.7s SUCCESS
Camel :: Catalog :: Camel Report Maven Plugin 7.6s SUCCESS
Camel :: Catalog :: Camel Route Parser 7.5s SUCCESS
Camel :: YAML DSL :: Deserializers 6.7s SUCCESS
Camel :: All Components Sync point 5.0s SUCCESS
Camel :: YAML DSL :: Validator Maven Plugin 4.4s SUCCESS
Camel :: Asterisk 4.3s SUCCESS
Camel :: Assembly 3.6s SUCCESS
Camel :: Catalog :: Maven 2.9s SUCCESS
Camel :: Catalog :: Suggest (deprecated) 2.9s SUCCESS
Camel :: YAML DSL :: Maven Plugins 2.6s SUCCESS
Camel :: Coverage 1.5s SUCCESS
Camel :: JBang :: Plugin :: Edit 1.2s SUCCESS
Camel :: Catalog :: Dummy Component 1.1s SUCCESS
Camel :: Endpoint DSL :: Support 1.1s SUCCESS
Camel :: JBang :: Plugin :: Generate 1.0s SUCCESS
Camel :: JBang :: Plugin :: MCP 1.0s SUCCESS
Camel :: JBang :: Integration tests 0.9s SUCCESS
Camel :: Launcher :: Container 0.8s SUCCESS
Camel :: Catalog :: Console 0.7s SUCCESS
Camel :: JBang :: Main 0.6s SUCCESS
Camel :: Avro RPC n/a
Camel :: Endpoint DSL n/a
Camel :: FHIR n/a
Camel :: Integration Tests n/a
Camel :: JBang :: Core n/a
Camel :: JBang :: Plugin :: TUI n/a
Camel :: JGroups n/a
Camel :: MINA SFTP n/a
Camel :: MLLP n/a
Camel :: Thrift n/a

Top 20 slowest modules:

  • Camel :: MINA (55.2s)
  • Camel :: Launcher (49.2s)
  • Camel :: Lumberjack (45.7s)
  • Camel :: JBang :: MCP (41.3s)
  • Camel :: Component DSL (28.9s)
  • Camel :: JBang :: Plugin :: Validate (28.5s)
  • Camel :: YAML DSL :: Validator (26.0s)
  • Camel :: HL7 (24.2s)
  • Camel :: Catalog :: Camel Catalog (23.7s)
  • Camel :: YAML DSL (21.7s)
  • Camel :: gRPC (18.3s)
  • Camel :: QuickFIX/J (16.6s)
  • Camel :: Kamelet Main (15.5s)
  • Camel :: JGroups Raft (15.1s)
  • Camel :: Docs (15.0s)
  • Camel :: JBang :: Plugin :: Testing (14.1s)
  • Camel :: Cometd (13.7s)
  • Camel :: Syslog (13.4s)
  • Camel :: JBang :: Plugin :: Kubernetes (12.7s)
  • Camel :: Catalog :: Camel Report Maven Plugin (7.6s)

⚙️ View full build and test results

…, asterisk, grpc, thrift, avro, cometd, cometds, quickfix, jgroups and jgroups-raft

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Signed-off-by: Claus Ibsen <claus.ibsen@gmail.com>
@davsclaus
davsclaus force-pushed the feature/CAMEL-24961-body-types-network-rpc branch from 489811a to ea47364 Compare October 24, 2026 15:32
davsclaus added a commit that referenced this pull request Oct 24, 2026
…ometd, quickfix, jgroups and five more network components (#28413)

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Signed-off-by: Claus Ibsen <claus.ibsen@gmail.com>
@davsclaus

Copy link
Copy Markdown
Contributor Author

Merged to main as ad0525e (squashed with the other CAMEL-24961 body type groups, tested together locally).

Claude Code on behalf of davsclaus

@davsclaus davsclaus closed this Oct 24, 2026
@davsclaus
davsclaus deleted the feature/CAMEL-24961-body-types-network-rpc branch October 24, 2026 18:08
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant