20
20
21
21
import java .io .IOException ;
22
22
import java .util .function .BiPredicate ;
23
- import javax .xml .stream .XMLStreamException ;
24
- import javax .xml .stream .XMLStreamWriter ;
25
23
26
24
import com .fasterxml .jackson .core .JsonGenerator ;
27
25
import com .fasterxml .jackson .databind .SerializerProvider ;
28
26
import com .fasterxml .jackson .databind .ser .std .StdSerializer ;
29
27
import com .fasterxml .jackson .dataformat .xml .ser .ToXmlGenerator ;
28
+ import org .apache .commons .collections4 .CollectionUtils ;
30
29
import org .cyclonedx .model .ExternalReference ;
31
30
import org .cyclonedx .model .ExternalReference .Type ;
32
31
import org .cyclonedx .model .Hash ;
33
32
import org .cyclonedx .util .BomUtils ;
34
33
35
- public class ExternalReferenceSerializer extends StdSerializer <ExternalReference >
34
+ public class ExternalReferenceSerializer
35
+ extends StdSerializer <ExternalReference >
36
36
{
37
37
public ExternalReferenceSerializer () {
38
38
this (null );
@@ -46,52 +46,72 @@ public ExternalReferenceSerializer(final Class<ExternalReference> t) {
46
46
public void serialize (
47
47
final ExternalReference extRef , final JsonGenerator gen , final SerializerProvider provider ) throws IOException
48
48
{
49
- final BiPredicate <Type , String > validateExternalReference = (type , url ) -> (type != null && url != null && BomUtils .validateUriString (url ));
49
+ final BiPredicate <Type , String > validateExternalReference =
50
+ (type , url ) -> (type != null && url != null && BomUtils .validateUriString (url ));
51
+
52
+ if (!validateExternalReference .test (extRef .getType (), extRef .getUrl ())) {
53
+ return ;
54
+ }
55
+
50
56
if (gen instanceof ToXmlGenerator ) {
51
- final ToXmlGenerator toXmlGenerator = (ToXmlGenerator ) gen ;
52
- final XMLStreamWriter staxWriter = toXmlGenerator .getStaxWriter ();
57
+ serializeXml ((ToXmlGenerator ) gen , extRef );
58
+ }
59
+ else {
60
+ serializeJson (gen , extRef );
61
+ }
62
+ }
53
63
54
- if (validateExternalReference .test (extRef .getType (), extRef .getUrl ())) {
55
- try {
56
- staxWriter .writeStartElement ("reference" );
57
- staxWriter .writeAttribute ("type" , extRef .getType ().getTypeName ());
58
- staxWriter .writeStartElement ("url" );
59
- staxWriter .writeCharacters (extRef .getUrl ());
60
- staxWriter .writeEndElement ();
61
- if (extRef .getComment () != null ) {
62
- staxWriter .writeStartElement ("comment" );
63
- staxWriter .writeCharacters (extRef .getComment ());
64
- staxWriter .writeEndElement ();
65
- }
66
- if (extRef .getHashes () != null && !extRef .getHashes ().isEmpty ()) {
67
- staxWriter .writeStartElement ("hashes" );
68
- for (Hash hash : extRef .getHashes ()) {
69
- if (hash != null ) {
70
- staxWriter .writeStartElement ("hash" );
71
- staxWriter .writeAttribute ("alg" , hash .getAlgorithm ());
72
- staxWriter .writeCharacters (hash .getValue ());
73
- staxWriter .writeEndElement ();
74
- }
75
- }
76
- staxWriter .writeEndElement ();
77
- }
78
- staxWriter .writeEndElement ();
79
- }
80
- catch (XMLStreamException ex ) {
81
- throw new IOException (ex );
82
- }
83
- }
84
- } else if (validateExternalReference .test (extRef .getType (), extRef .getUrl ())) {
85
- gen .writeStartObject ();
86
- gen .writeStringField ("type" , extRef .getType ().getTypeName ());
87
- gen .writeStringField ("url" , extRef .getUrl ());
88
- if (extRef .getComment () != null ) {
89
- gen .writeStringField ("comment" , extRef .getComment ());
64
+ private void serializeXml (final ToXmlGenerator toXmlGenerator , final ExternalReference extRef ) throws IOException {
65
+ toXmlGenerator .writeStartObject ();
66
+
67
+ toXmlGenerator .setNextIsAttribute (true );
68
+ toXmlGenerator .writeFieldName ("type" );
69
+ toXmlGenerator .writeString (extRef .getType ().getTypeName ());
70
+ toXmlGenerator .setNextIsAttribute (false );
71
+
72
+ toXmlGenerator .writeStringField ("url" , extRef .getUrl ());
73
+ if (extRef .getComment () != null ) {
74
+ toXmlGenerator .writeStringField ("comment" , extRef .getComment ());
75
+ }
76
+ if (CollectionUtils .isNotEmpty (extRef .getHashes ())) {
77
+ toXmlGenerator .writeFieldName ("hashes" );
78
+ toXmlGenerator .writeStartObject ();
79
+ for (Hash hash : extRef .getHashes ()) {
80
+ toXmlGenerator .writeFieldName ("hash" );
81
+ toXmlGenerator .writeStartObject ();
82
+ toXmlGenerator .setNextIsAttribute (true );
83
+ toXmlGenerator .writeFieldName ("alg" );
84
+ toXmlGenerator .writeString (hash .getAlgorithm ());
85
+ toXmlGenerator .setNextIsAttribute (false );
86
+
87
+ toXmlGenerator .setNextIsUnwrapped (true );
88
+ toXmlGenerator .writeStringField ("" , hash .getValue ());
89
+
90
+ toXmlGenerator .writeEndObject ();
90
91
}
91
- if (extRef .getHashes () != null && !extRef .getHashes ().isEmpty ()) {
92
- gen .writePOJOField ("hashes" , extRef .getHashes ());
92
+ toXmlGenerator .writeEndObject ();
93
+ }
94
+ toXmlGenerator .writeEndObject ();
95
+ }
96
+
97
+ private void serializeJson (final JsonGenerator gen , final ExternalReference extRef ) throws IOException {
98
+ gen .writeStartObject ();
99
+ gen .writeStringField ("type" , extRef .getType ().getTypeName ());
100
+ gen .writeStringField ("url" , extRef .getUrl ());
101
+ if (extRef .getComment () != null ) {
102
+ gen .writeStringField ("comment" , extRef .getComment ());
103
+ }
104
+ if (CollectionUtils .isNotEmpty (extRef .getHashes ())) {
105
+ gen .writeFieldName ("hashes" );
106
+ gen .writeStartArray ();
107
+ for (Hash hash : extRef .getHashes ()) {
108
+ gen .writeStartObject ();
109
+ gen .writeStringField ("alg" , hash .getAlgorithm ());
110
+ gen .writeStringField ("content" , hash .getValue ());
111
+ gen .writeEndObject ();
93
112
}
94
- gen .writeEndObject ();
113
+ gen .writeEndArray ();
95
114
}
115
+ gen .writeEndObject ();
96
116
}
97
117
}
0 commit comments