Skip to content

Commit ca4655f

Browse files
committed
Ensure engagement status gets properly parsed if set to an empty string in the DefectDojo API
1 parent fe7a6c5 commit ca4655f

File tree

1 file changed

+23
-2
lines changed

1 file changed

+23
-2
lines changed

src/main/java/io/securecodebox/persistence/defectdojo/service/GenericDefectDojoService.java

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,13 @@
2121
import com.fasterxml.jackson.core.JsonProcessingException;
2222
import com.fasterxml.jackson.databind.DeserializationFeature;
2323
import com.fasterxml.jackson.databind.ObjectMapper;
24+
import com.fasterxml.jackson.databind.cfg.CoercionAction;
25+
import com.fasterxml.jackson.databind.cfg.CoercionInputShape;
2426
import io.securecodebox.persistence.defectdojo.config.DefectDojoConfig;
2527
import io.securecodebox.persistence.defectdojo.exceptions.DefectDojoLoopException;
2628
import io.securecodebox.persistence.defectdojo.models.DefectDojoModel;
2729
import io.securecodebox.persistence.defectdojo.models.DefectDojoResponse;
30+
import io.securecodebox.persistence.defectdojo.models.Engagement;
2831
import org.apache.http.HttpHost;
2932
import org.apache.http.auth.AuthScope;
3033
import org.apache.http.auth.UsernamePasswordCredentials;
@@ -38,6 +41,10 @@
3841
import org.springframework.http.HttpMethod;
3942
import org.springframework.http.ResponseEntity;
4043
import 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;
4148
import org.springframework.util.LinkedMultiValueMap;
4249
import org.springframework.web.client.RestTemplate;
4350
import 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

Comments
 (0)