diff --git a/src/main/java/com/siemens/sbom/standardbom/StandardBomParser.java b/src/main/java/com/siemens/sbom/standardbom/StandardBomParser.java index 763d368..70762a7 100644 --- a/src/main/java/com/siemens/sbom/standardbom/StandardBomParser.java +++ b/src/main/java/com/siemens/sbom/standardbom/StandardBomParser.java @@ -184,11 +184,35 @@ 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 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 (pJson.contains("\"$schema\"")) { + return pJson; + } + + // Find the position right after the opening curly brace + final String insertMarker = '{' + System.lineSeparator(); + int insertPosition = pJson.indexOf(insertMarker) + insertMarker.length(); + + // Insert the $schema attribute at the found position + StringBuilder sb = new StringBuilder(pJson); + 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,