From b8c82fe5e843f34ecd10392a5f296468f696ff60 Mon Sep 17 00:00:00 2001 From: Wleeaf <179125857+wleeaf@users.noreply.github.com> Date: Sun, 25 Oct 2026 10:29:33 +0000 Subject: [PATCH] Omit unset fields of release note resolves ReleaseNotes.Resolves had no @JsonInclude, unlike its enclosing class, so a resolved issue without a name or references was written as "name": null and "references": null. The JSON schema does not allow null there, so parsing and re-generating the spec test file valid-release-notes-1.6.json gave an invalid BOM. Use NON_EMPTY for Resolves, like ReleaseNotes and Issue. Signed-off-by: Wleeaf <179125857+wleeaf@users.noreply.github.com> --- src/main/java/org/cyclonedx/model/ReleaseNotes.java | 1 + .../java/org/cyclonedx/BomJsonGeneratorTest.java | 12 ++++++++++++ 2 files changed, 13 insertions(+) diff --git a/src/main/java/org/cyclonedx/model/ReleaseNotes.java b/src/main/java/org/cyclonedx/model/ReleaseNotes.java index 00e72969e..c8bb6d9ef 100644 --- a/src/main/java/org/cyclonedx/model/ReleaseNotes.java +++ b/src/main/java/org/cyclonedx/model/ReleaseNotes.java @@ -178,6 +178,7 @@ public void setProperties(final List properties) { } @JsonIgnoreProperties(ignoreUnknown = true) + @JsonInclude(JsonInclude.Include.NON_EMPTY) public static class Resolves { public enum Type { diff --git a/src/test/java/org/cyclonedx/BomJsonGeneratorTest.java b/src/test/java/org/cyclonedx/BomJsonGeneratorTest.java index 6ce4755aa..207ad43fa 100644 --- a/src/test/java/org/cyclonedx/BomJsonGeneratorTest.java +++ b/src/test/java/org/cyclonedx/BomJsonGeneratorTest.java @@ -120,6 +120,18 @@ public void schema12MultipleDependenciesJsonTest() throws Exception { assertTrue(jsonParser.isValid(file, Version.VERSION_12)); } + @Test + public void schema16ReleaseNotesResolvesWithoutNameJsonTest() throws Exception { + final byte[] bomBytes = Objects.requireNonNull(this.getClass().getResourceAsStream("/1.6/valid-release-notes-1.6.json")).readAllBytes(); + final Bom bom = new JsonParser().parse(bomBytes); + + BomJsonGenerator generator = BomGeneratorFactory.createJson(Version.VERSION_16, bom); + String json = generator.toJsonString(); + assertFalse(json.contains("null"), json); + File file = writeToFile(json); + assertTrue(new JsonParser().isValid(file, Version.VERSION_16)); + } + @Test public void schema13EmptyComponentsJsonTest() throws Exception { final Bom bom = new Bom();