From 4c9c6268881f553cdb0fda46cfadc1c2f5db6d4c Mon Sep 17 00:00:00 2001 From: Hakan Dilek Date: Thu, 13 Mar 2025 16:52:16 +0100 Subject: [PATCH 1/2] fix: inject json schema definition to the final document Final document should contain JSON $schema definitions Sample data should also contain the echema definition --- .../sbom/standardbom/StandardBomParser.java | 23 +++++++++++++++++++ .../sbom/standardbom/full-valid-1.4.cdx.json | 1 + .../sbom/standardbom/full-valid.cdx.json | 1 + 3 files changed, 25 insertions(+) diff --git a/src/main/java/com/siemens/sbom/standardbom/StandardBomParser.java b/src/main/java/com/siemens/sbom/standardbom/StandardBomParser.java index 763d368..a8662e2 100644 --- a/src/main/java/com/siemens/sbom/standardbom/StandardBomParser.java +++ b/src/main/java/com/siemens/sbom/standardbom/StandardBomParser.java @@ -184,11 +184,34 @@ public String stringify(@Nonnull final StandardBom pBom) json = unescapeComponentFields(json); json = unescapeExtRefPurls(json); json = removeEmptyServicesMetadata(json); + json = injectSchemaSpec(json); return json.concat(System.lineSeparator()); } + @Nonnull + private String injectSchemaSpec(@Nonnull String json) + { + String schemaAttribute = " \"$schema\": \"http://cyclonedx.org/schema/bom-1.6.schema.json\"," + .concat(System.lineSeparator()); + + // Check if $schema attribute already exists + if (json.contains("\"$schema\"")) { + return json; + } + + // Find the position right after the opening curly brace + int insertPosition = json.indexOf("{\n") + 2; + + // Insert the $schema attribute at the found position + StringBuilder sb = new StringBuilder(json); + sb.insert(insertPosition, schemaAttribute); + return sb.toString(); + } + + + private void escapeExtRefPurls(@Nonnull final StandardBom pBom) { if (pBom.getCycloneDxBom().getExternalReferences() != null) { diff --git a/src/test/resources/com/siemens/sbom/standardbom/full-valid-1.4.cdx.json b/src/test/resources/com/siemens/sbom/standardbom/full-valid-1.4.cdx.json index 5d97fba..d41429b 100644 --- a/src/test/resources/com/siemens/sbom/standardbom/full-valid-1.4.cdx.json +++ b/src/test/resources/com/siemens/sbom/standardbom/full-valid-1.4.cdx.json @@ -1,4 +1,5 @@ { + "$schema": "http://cyclonedx.org/schema/bom-1.4.schema.json", "bomFormat" : "CycloneDX", "specVersion" : "1.4", "version" : 1, diff --git a/src/test/resources/com/siemens/sbom/standardbom/full-valid.cdx.json b/src/test/resources/com/siemens/sbom/standardbom/full-valid.cdx.json index aad6263..6d29da5 100644 --- a/src/test/resources/com/siemens/sbom/standardbom/full-valid.cdx.json +++ b/src/test/resources/com/siemens/sbom/standardbom/full-valid.cdx.json @@ -1,4 +1,5 @@ { + "$schema": "http://cyclonedx.org/schema/bom-1.6.schema.json", "bomFormat" : "CycloneDX", "specVersion" : "1.6", "version" : 1, From c962ea880e88a1d6718175e9175543e545cabe6b Mon Sep 17 00:00:00 2001 From: Thomas Jensen Date: Mon, 17 Mar 2025 17:33:33 +0100 Subject: [PATCH 2/2] Fix Windows compatibility and Checkstyle compliance --- .../siemens/sbom/standardbom/StandardBomParser.java | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/siemens/sbom/standardbom/StandardBomParser.java b/src/main/java/com/siemens/sbom/standardbom/StandardBomParser.java index a8662e2..70762a7 100644 --- a/src/main/java/com/siemens/sbom/standardbom/StandardBomParser.java +++ b/src/main/java/com/siemens/sbom/standardbom/StandardBomParser.java @@ -191,21 +191,22 @@ public String stringify(@Nonnull final StandardBom pBom) @Nonnull - private String injectSchemaSpec(@Nonnull String json) + private String injectSchemaSpec(@Nonnull final String pJson) { String schemaAttribute = " \"$schema\": \"http://cyclonedx.org/schema/bom-1.6.schema.json\"," .concat(System.lineSeparator()); // Check if $schema attribute already exists - if (json.contains("\"$schema\"")) { - return json; + if (pJson.contains("\"$schema\"")) { + return pJson; } // Find the position right after the opening curly brace - int insertPosition = json.indexOf("{\n") + 2; + final String insertMarker = '{' + System.lineSeparator(); + int insertPosition = pJson.indexOf(insertMarker) + insertMarker.length(); // Insert the $schema attribute at the found position - StringBuilder sb = new StringBuilder(json); + StringBuilder sb = new StringBuilder(pJson); sb.insert(insertPosition, schemaAttribute); return sb.toString(); }