Skip to content

CAMEL-24203: camel-aws-security-hub - implement the declared getFindingAggregator operation#24940

Merged
oscerd merged 1 commit into
apache:mainfrom
oscerd:fix/CAMEL-24203
Jul 21, 2026
Merged

CAMEL-24203: camel-aws-security-hub - implement the declared getFindingAggregator operation#24940
oscerd merged 1 commit into
apache:mainfrom
oscerd:fix/CAMEL-24203

Conversation

@oscerd

@oscerd oscerd commented Jul 20, 2026

Copy link
Copy Markdown
Contributor

Description

Fixes CAMEL-24203. SecurityHubOperations declares getFindingAggregator, but SecurityHubProducer.process had no case for it, so the switch fell through to:

default:
    throw new IllegalArgumentException("Unsupported operation");

Selecting operation=getFindingAggregator therefore always failed, even though the enum and catalog advertise it.

Fix

  • Implements the operation using the module's existing executeOperation helper — POJO GetFindingAggregatorRequest support plus a header-driven path.
  • Adds the CamelAwsSecurityHubFindingAggregatorArn header constant the AWS GetFindingAggregator API requires (it is mandatory, so the header path fails fast with a clear message when absent).

Chose to implement rather than drop the enum value, since removing a published operation would be a breaking API change.

Tests

Adds SecurityHubGetFindingAggregatorTest — drives the operation through a route with a mocked SecurityHubClient and asserts the ARN header reaches the request. Against the old code the exchange fails with "Unsupported operation".

Regenerated component/catalog/endpoint-DSL metadata for the new header is included.

Backport

Same code on camel-4.18.x and camel-4.14.x; will be backported after merge (fixVersions 4.22.0 / 4.18.4 / 4.14.9).


Claude Code on behalf of oscerd

…ngAggregator operation

SecurityHubOperations declared getFindingAggregator but SecurityHubProducer had
no case for it, so selecting that operation always failed with "Unsupported
operation" even though the catalog advertised it.

Implements the operation with the existing executeOperation helper (POJO
GetFindingAggregatorRequest plus a header-driven path) and adds the
CamelAwsSecurityHubFindingAggregatorArn header it requires.

Adds SecurityHubGetFindingAggregatorTest asserting the operation runs and passes
the ARN header through to the request.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Signed-off-by: Andrea Cosentino <ancosen@gmail.com>
@oscerd
oscerd requested a review from davsclaus July 20, 2026 12:24
@oscerd oscerd added the bug Something isn't working label Jul 20, 2026
@oscerd
oscerd requested a review from Croway July 20, 2026 12:24
@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.

@gnodet gnodet left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Clean fix — the getFindingAggregator enum value was declared in SecurityHubOperations but had no case in the producer's switch, so the operation always threw IllegalArgumentException. This PR implements it properly.

What I checked:

  • Pattern consistency: the new getFindingAggregator method follows the exact same executeOperation helper pattern as getFindingHistory and other operations — POJO body support plus a header-driven fallback path.
  • Header constant: FINDING_AGGREGATOR_ARN follows the established naming convention (CamelAwsSecurityHub*) and is correctly annotated with @Metadata.
  • Validation: the ARN is validated as non-empty before use, consistent with how other required headers are validated (e.g., getFindingHistory validates findingId and productArn).
  • Test: SecurityHubGetFindingAggregatorTest uses a Mockito mock for SecurityHubClient, verifies the ARN header is correctly propagated to the GetFindingAggregatorRequest via ArgumentCaptor. Good coverage for the fix.
  • Generated files: catalog JSON and endpoint DSL factory correctly include the new header at index 21.
  • API compatibility: implementing the existing enum value (rather than removing it) is the right call — removing a published operation would be a breaking change.

LGTM ✅

Claude Code on behalf of gnodet — AI-generated review

@davsclaus davsclaus left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Clean fix for a declared-but-unimplemented operation. The getFindingAggregator enum value has existed since the component was introduced (CAMEL-22919), but the producer switch had no case for it — this PR fills that gap.

What looks good:

  • Implementation follows the exact same executeOperation helper pattern used by all other operations in SecurityHubProducer
  • New FINDING_AGGREGATOR_ARN header constant properly annotated with @Metadata
  • Test uses Mockito to mock the SecurityHubClient, drives the operation through a Camel route, and asserts the ARN header reaches the AWS request — effectively proving the fix
  • Catalog, component JSON, and endpoint-DSL metadata regenerated correctly
  • mockito-junit-jupiter test dependency already used by several other camel-aws modules

LGTM.

This review was generated by an AI agent and may contain inaccuracies. Please verify all suggestions before applying.

@github-actions

Copy link
Copy Markdown
Contributor

🧪 CI tested the following changed modules:

  • catalog/camel-catalog
  • components/camel-aws/camel-aws-security-hub
  • dsl/camel-endpointdsl

🔬 Scalpel shadow comparison — Scalpel: 11 tested, 27 compile-only — current: 9 all tested

Maveniverse Scalpel detected 38 affected modules (current approach: 9).

⚠️ Modules only in Scalpel (29)
  • apache-camel
  • camel-allcomponents
  • camel-catalog
  • camel-catalog-console
  • camel-catalog-lucene
  • camel-catalog-maven
  • camel-catalog-suggest
  • camel-componentdsl
  • camel-csimple-maven-plugin
  • 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

Skip-tests mode would test 11 modules (3 direct + 8 downstream), skip tests for 27 (generated code, meta-modules)

Modules Scalpel would test (11)
  • camel-aws-security-hub
  • camel-catalog
  • camel-endpointdsl
  • camel-jbang-mcp
  • camel-jbang-plugin-mcp
  • camel-jbang-plugin-route-parser
  • camel-jbang-plugin-tui
  • camel-jbang-plugin-validate
  • camel-launcher-container
  • camel-yaml-dsl-validator
  • camel-yaml-dsl-validator-maven-plugin
Modules with tests skipped (27)
  • apache-camel
  • camel-allcomponents
  • camel-catalog-console
  • camel-catalog-lucene
  • camel-catalog-maven
  • camel-catalog-suggest
  • camel-componentdsl
  • camel-csimple-maven-plugin
  • 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

All tested modules (38 modules)
  • Camel :: AWS Security Hub
  • Camel :: All Components Sync point
  • Camel :: Assembly
  • Camel :: Catalog :: CSimple Maven Plugin (deprecated)
  • Camel :: Catalog :: Camel Catalog
  • Camel :: Catalog :: Camel Report Maven Plugin
  • Camel :: Catalog :: Camel Route Parser
  • Camel :: Catalog :: Console
  • Camel :: Catalog :: Dummy Component
  • Camel :: Catalog :: Lucene (deprecated)
  • Camel :: Catalog :: Maven
  • Camel :: Catalog :: Suggest
  • Camel :: Component DSL
  • Camel :: Coverage
  • Camel :: Docs
  • Camel :: Endpoint DSL
  • Camel :: Endpoint DSL :: Support
  • Camel :: Integration Tests
  • Camel :: JBang :: Core
  • Camel :: JBang :: Integration tests
  • Camel :: JBang :: MCP
  • Camel :: JBang :: Main
  • Camel :: JBang :: Plugin :: Edit
  • Camel :: JBang :: Plugin :: Generate
  • Camel :: JBang :: Plugin :: Kubernetes
  • Camel :: JBang :: Plugin :: MCP
  • Camel :: JBang :: Plugin :: Route Parser
  • Camel :: JBang :: Plugin :: TUI
  • Camel :: JBang :: Plugin :: Testing
  • Camel :: JBang :: Plugin :: Validate
  • Camel :: Kamelet Main
  • Camel :: Launcher
  • Camel :: Launcher :: Container
  • Camel :: YAML DSL
  • Camel :: YAML DSL :: Deserializers
  • Camel :: YAML DSL :: Maven Plugins
  • Camel :: YAML DSL :: Validator
  • Camel :: YAML DSL :: Validator Maven Plugin

⚙️ View full build and test results

@oscerd oscerd self-assigned this Jul 21, 2026
@oscerd oscerd added this to the 4.22.0 milestone Jul 21, 2026
@oscerd
oscerd merged commit 7208f2a into apache:main Jul 21, 2026
5 checks passed
oscerd added a commit that referenced this pull request Jul 21, 2026
…ngAggregator operation (4.18.x backport) (#24973)

Backport of #24940 to camel-4.18.x.

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
@oscerd
oscerd deleted the fix/CAMEL-24203 branch July 21, 2026 09:46
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants