Generating SBOMs
A Software Bill of Materials (SBOM) is a machine-readable inventory of every component in your software: direct dependencies, transitive dependencies, and their versions. SBOMs have become a key building block in supply chain security, enabling automated vulnerability scanning and license compliance analysis.
With the EU Cyber Resilience Act (CRA) requiring SBOM delivery for software sold in the EU, and US Executive Order 14028 making SBOMs a federal procurement expectation, many organizations now treat SBOM generation as a hard requirement.
Camel releases ship with SBOMs
Starting from Camel 4.0.3, every release ships with PGP-signed CycloneDX SBOMs (JSON and XML) covering all Camel modules and their dependencies. These are available on the download page alongside the release artifacts.
Generating SBOMs for your own applications
To produce an SBOM for your Camel application (as opposed to the framework itself), choose the approach that matches your runtime.
Camel CLI
The Camel CLI has a built-in sbom command that generates an SBOM for your integration project without any extra tooling.
camel sbom This produces a sbom.json file in CycloneDX format by default.
To use SPDX format instead:
camel sbom --sbom-format=spdx To generate for a specific target runtime:
camel sbom --runtime=spring-boot camel sbom --runtime=quarkus The output format can be switched between JSON and XML:
camel sbom --sbom-output-format=xml See the camel sbom command reference for all available options.
Camel Spring Boot
Spring Boot 3.3+ has built-in SBOM support: it generates a CycloneDX SBOM during the build, packages it inside the uber jar at META-INF/sbom/application.cdx.json, and can expose it via an actuator endpoint. Since Camel Spring Boot runs on top of Spring Boot, this automatically covers Camel and all its transitive dependencies — no extra plugin or Camel-specific configuration needed.
Camel Quarkus
Quarkus has its own dependency resolver that differs from standard Maven resolution, which means the generic CycloneDX Maven plugin will not capture the full dependency graph. Instead, use the native Quarkus CycloneDX extension. Add it to your project:
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-cyclonedx</artifactId>
</dependency> This generates a distribution SBOM automatically every time you build. You can also generate a dependency SBOM before building with mvn quarkus:dependency-sbom.
Analyzing SBOMs
Once you have a CycloneDX SBOM — a released Camel SBOM from the download page, the aggregate SBOM kept in the source tree under camel-sbom/, or one you generated for your own application — you can feed it into vulnerability scanners, license and policy tools, and continuous-monitoring platforms. Because the SBOM already captures the resolved dependency graph, these tools work from the file alone: no rebuild or re-resolution of the project is required.
The examples below assume a CycloneDX JSON file named camel-sbom.json; substitute the file you actually have (for a release, e.g. camel-4.23.0-sbom.json).
Scanning for known vulnerabilities
Several open source scanners read a CycloneDX SBOM directly and match its components against vulnerability databases:
# Anchore Grype
grype sbom:camel-sbom.json
# Aqua Trivy
trivy sbom camel-sbom.json
# Google OSV-Scanner (v2)
osv-scanner scan source -L camel-sbom.json OSV-Scanner auto-detects CycloneDX files whose name is bom.json / bom.xml or ends in .cdx.json / .cdx.xml. For any other name, point it at the file explicitly with -L as above. |
Inspecting, validating and converting
The CycloneDX CLI validates, converts and diffs BOMs. Camel’s SBOMs use CycloneDX specification version 1.6, and the CLI’s validate defaults to a newer schema version, so pass --input-version v1_6 explicitly:
# Validate against the CycloneDX 1.6 schema
cyclonedx validate --input-file camel-sbom.json --input-format json --input-version v1_6 --fail-on-errors
# Convert JSON to XML (use --output-format spdxjson to convert to SPDX)
cyclonedx convert --input-file camel-sbom.json --output-format xml --output-file camel-sbom.xml
# Diff two SBOMs — e.g. what dependencies changed between two Camel releases
cyclonedx diff camel-4.22.0-sbom.json camel-4.23.0-sbom.json --component-versions For quick, ad-hoc queries no dedicated tool is needed — the JSON can be sliced with jq:
# List every component as group:name:version
jq -r '.components[] | "\(.group // ""):\(.name):\(.version)"' camel-sbom.json
# Find the version of a specific library across the whole graph
jq -r '.components[] | select(.name | test("jackson")) | "\(.name) \(.version)"' camel-sbom.json Continuous monitoring with OWASP Dependency-Track
OWASP Dependency-Track ingests CycloneDX SBOMs and continuously re-evaluates them as new CVEs are disclosed, so a component that is clean today but vulnerable next week surfaces without re-scanning. Upload the SBOM through the UI (Projects → your project → Upload BOM), or automate it from CI through the REST API:
curl -X POST "https://<dependency-track-host>/api/v1/bom" \
-H "X-Api-Key: $DTRACK_API_KEY" \
-F "projectName=apache-camel" \
-F "projectVersion=4.23.0" \
-F "autoCreate=true" \
-F "bom=@camel-sbom.json" The /api/v1/bom endpoint expects multipart/form-data. Use autoCreate=true together with projectName/projectVersion to create the project on first upload, or target an existing one with -F "project=<project-uuid>" instead. See the Dependency-Track CI/CD guide for the maintained GitHub Action, Jenkins plugin and CLI wrappers.
Alongside each SBOM, Camel also publishes a CycloneDX VEX file (camel-sbom.vex.json). A VEX (Vulnerability Exploitability eXchange) document records which known vulnerabilities in the dependency graph are not exploitable as Camel ships them, so tools such as Dependency-Track can apply it to suppress those findings and reduce false-positive noise.