2121import com .fasterxml .jackson .core .JsonProcessingException ;
2222import com .fasterxml .jackson .databind .DeserializationFeature ;
2323import com .fasterxml .jackson .databind .ObjectMapper ;
24+ import com .fasterxml .jackson .databind .cfg .CoercionAction ;
25+ import com .fasterxml .jackson .databind .cfg .CoercionInputShape ;
2426import io .securecodebox .persistence .defectdojo .config .DefectDojoConfig ;
2527import io .securecodebox .persistence .defectdojo .exceptions .DefectDojoLoopException ;
2628import io .securecodebox .persistence .defectdojo .models .DefectDojoModel ;
2729import io .securecodebox .persistence .defectdojo .models .DefectDojoResponse ;
30+ import io .securecodebox .persistence .defectdojo .models .Engagement ;
2831import org .apache .http .HttpHost ;
2932import org .apache .http .auth .AuthScope ;
3033import org .apache .http .auth .UsernamePasswordCredentials ;
3841import org .springframework .http .HttpMethod ;
3942import org .springframework .http .ResponseEntity ;
4043import org .springframework .http .client .HttpComponentsClientHttpRequestFactory ;
44+ import org .springframework .http .converter .FormHttpMessageConverter ;
45+ import org .springframework .http .converter .ResourceHttpMessageConverter ;
46+ import org .springframework .http .converter .StringHttpMessageConverter ;
47+ import org .springframework .http .converter .json .MappingJackson2HttpMessageConverter ;
4148import org .springframework .util .LinkedMultiValueMap ;
4249import org .springframework .web .client .RestTemplate ;
4350import org .springframework .web .util .UriComponentsBuilder ;
@@ -58,10 +65,12 @@ public GenericDefectDojoService(DefectDojoConfig config) {
5865
5966 this .objectMapper = new ObjectMapper ();
6067 this .objectMapper .configure (DeserializationFeature .FAIL_ON_UNKNOWN_PROPERTIES , false );
68+ this .objectMapper .coercionConfigFor (Engagement .Status .class ).setCoercion (CoercionInputShape .EmptyString , CoercionAction .AsNull );
6169 this .objectMapper .findAndRegisterModules ();
6270
6371 this .searchStringMapper = new ObjectMapper ();
6472 this .searchStringMapper .configure (DeserializationFeature .FAIL_ON_UNKNOWN_PROPERTIES , false );
73+ this .searchStringMapper .coercionConfigFor (Engagement .Status .class ).setCoercion (CoercionInputShape .EmptyString , CoercionAction .AsNull );
6574 this .searchStringMapper .setSerializationInclusion (JsonInclude .Include .NON_DEFAULT );
6675 }
6776
@@ -87,6 +96,8 @@ private HttpHeaders getDefectDojoAuthorizationHeaders() {
8796 }
8897
8998 protected RestTemplate getRestTemplate () {
99+ RestTemplate restTemplate ;
100+
90101 if (System .getProperty ("http.proxyUser" ) != null && System .getProperty ("http.proxyPassword" ) != null ) {
91102 // Configuring Proxy Authentication explicitly as it isn't done by default for spring rest templates :(
92103 CredentialsProvider credsProvider = new BasicCredentialsProvider ();
@@ -105,10 +116,20 @@ protected RestTemplate getRestTemplate() {
105116
106117 HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory ();
107118 factory .setHttpClient (client );
108- return new RestTemplate (factory );
119+ restTemplate = new RestTemplate (factory );
109120 } else {
110- return new RestTemplate ();
121+ restTemplate = new RestTemplate ();
111122 }
123+
124+ MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter ();
125+ converter .setObjectMapper (this .objectMapper );
126+ restTemplate .setMessageConverters (List .of (
127+ new FormHttpMessageConverter (),
128+ new ResourceHttpMessageConverter (),
129+ new StringHttpMessageConverter (),
130+ converter
131+ ));
132+ return restTemplate ;
112133 }
113134
114135 protected abstract String getUrlPath ();
0 commit comments