Fix #1060: add an SMPP source Kamelet - #2989
Merged
Merged
Conversation
Receives SMS messages and delivery receipts from a SMSC using the SMPP protocol (camel-smpp). The short message text becomes the body; the received PDU details stay in the CamelSmpp* headers the component sets. Exposes the connection options an operator needs -- host, port, systemId, password, systemType, encoding and usingSSL -- plus addressRange, which is the consumer-side option that tells the SMSC which messages to route to this ESME. systemId and password carry the credentials descriptor; password is format: password. Marked Preview for the same reason as the sink (apache#1059): there is no SMSC simulator in the project's test toolchain, so this ships without a Citrus test and without kamelet.verified. Parameter binding verified against the real camel-smpp component with `camel run`: the consumer endpoint is created and startup fails only with ConnectException (no SMSC on localhost), not with an unknown-option error. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
oscerd
added a commit
to oscerd/camel-kamelets-validator
that referenced
this pull request
Sep 1, 2026
KameletsCatalogTest.testGetKameletsByNamespace asserts an exact count for the AWS namespace, so adding aws-bedrock-agent-sink takes it from 31 to 32 and the catalog module's tests fail. Verified against the tree rather than just following the CI delta: 31 kamelets carry kamelet.namespace "AWS" on main, 32 with this branch. Only the AWS namespace is count-asserted, which is why the SMPP and SNMP Kamelets added in apache#2988, apache#2989 and apache#2990 did not trip it. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
oscerd
added a commit
that referenced
this pull request
Sep 3, 2026
* Fix #1938: add an AWS Bedrock Agent sink Kamelet The catalog already covers aws-bedrock (aws-bedrock-text-sink) and aws-bedrock-agent-runtime (aws-bedrock-agent-runtime-sink). The aws-bedrock-agent component had no Kamelet, which is the gap this closes: managing the data source ingestion jobs of a knowledge base via startIngestionJob, listIngestionJobs and getIngestionJob. BedrockAgentProducer.determineOperation reads CamelAwsBedrockAgentOperation from the message before falling back to the endpoint, and knowledgeBaseId and dataSourceId are header-overridable the same way. A sink that pins those three as properties therefore has to strip the family, or an inbound header could redirect the call to a different knowledge base or a different operation. Same shape as the aws-ec2-sink strip. CamelAwsBedrockAgentIngestionJobId is excluded from the strip: it is the one input the Kamelet deliberately takes from the message, since getIngestionJob has to name a job. Marked Preview, no Citrus test: exercising this needs a real Bedrock knowledge base and there is no emulator for it in the project's toolchain. Verified with `camel run` against the real component -- the route starts with every parameter bound -- and the strip verified with the terminal endpoint swapped for a log: in: Operation=listIngestionJobs, KnowledgeBaseId=attacker-kb, DataSourceId=attacker-ds, IngestionJobId=job-42, keepMe=yes out: CamelAwsBedrockAgentIngestionJobId=job-42, keepMe=yes Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> * Fix #1938: update the AWS namespace count in KameletsCatalogTest KameletsCatalogTest.testGetKameletsByNamespace asserts an exact count for the AWS namespace, so adding aws-bedrock-agent-sink takes it from 31 to 32 and the catalog module's tests fail. Verified against the tree rather than just following the CI delta: 31 kamelets carry kamelet.namespace "AWS" on main, 32 with this branch. Only the AWS namespace is count-asserted, which is why the SMPP and SNMP Kamelets added in #2988, #2989 and #2990 did not trip it. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes #1060. Companion to #2988 (
smpp-sink, #1059) — same component, same connection surface, reviewable independently.Adds
smpp-source, which receives SMS messages and delivery receipts from a SMSC usingcamel-smpp. The short message text becomes the body; the received PDU details stay in theCamelSmpp*headers the component already sets (CamelSmppMessageType,CamelSmppStatus,CamelSmppDelivered,CamelSmppSubmitDate,CamelSmppOptionalParameters, …), so nothing is remapped or hidden.Properties
Only
hostis required.hostport2775systemIdsmppclientpasswordformat: password+ credentials descriptorsystemTypeaddressRangeencodingISO-8859-1usingSSLfalseaddressRangeis the one option that differs from the sink — it is the consumer-labelled option in the component and has no meaning on the producer side. Conversely the sink'ssourceAddr/destAddr/splittingPolicyare producer-only and are deliberately absent here.Verification
script/validatorreports no errors,script/generatoradds thenav.adocentry,mvn clean installpasses from the repository root.Parameter binding checked against the real component with
camel runrather than by eye — the consumer endpoint is constructed and startup fails only on the missing SMSC:A mistyped option would have failed earlier with
unknown optioninstead.Same two caveats as the sink
No Citrus test —
camel-smppneeds a live SMSC and the project's Citrus/Testcontainers toolchain has no SMSC simulator. MarkedPreview, nokamelet.verified=true. Happy to add the test in a follow-up if there is an SMSC image the project will depend on.usingSSLdefaults tofalse, matching the component default and the plainsmppscheme. Worth a reviewer's eye given the catalog's secure-by-default direction (#2954, #2955, #2956), but SMPP-over-TLS is not widely supported by SMSCs, so defaulting it on would make the Kamelet unusable against most of them.This is a source Kamelet, so the usual operator note applies: it binds outward to the SMSC you configure, and the SMSC decides what to deliver to it via
addressRange.Claude Code on behalf of Andrea Cosentino