diff --git a/pom.xml b/pom.xml
index 2cc42f53..ca77a116 100644
--- a/pom.xml
+++ b/pom.xml
@@ -13,7 +13,7 @@
com.powsybl
powsybl-parent-ws
- 12
+ 13
@@ -145,16 +145,6 @@
powsybl-config-test
test
-
- junit
- junit
- test
-
-
- org.junit.vintage
- junit-vintage-engine
- test
-
org.springframework.boot
spring-boot-starter-test
diff --git a/src/main/java/org/gridsuite/explore/server/RestTemplateConfig.java b/src/main/java/org/gridsuite/explore/server/RestTemplateConfig.java
index 9d6d0940..4409ac0e 100644
--- a/src/main/java/org/gridsuite/explore/server/RestTemplateConfig.java
+++ b/src/main/java/org/gridsuite/explore/server/RestTemplateConfig.java
@@ -8,50 +8,28 @@
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
+import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer;
import org.springframework.boot.jackson.JsonComponentModule;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
-import org.springframework.http.converter.HttpMessageConverter;
-import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;
-import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
-import org.springframework.web.client.RestTemplate;
/**
* @author Etienne Homer
*/
@Configuration
public class RestTemplateConfig {
-
- @Bean
- public RestTemplate restTemplate() {
- final RestTemplate restTemplate = new RestTemplate();
-
- //find and replace Jackson message converter with our own
- for (int i = 0; i < restTemplate.getMessageConverters().size(); i++) {
- final HttpMessageConverter> httpMessageConverter = restTemplate.getMessageConverters().get(i);
- if (httpMessageConverter instanceof MappingJackson2HttpMessageConverter) {
- restTemplate.getMessageConverters().set(i, mappingJackson2HttpMessageConverter());
- }
- }
-
- return restTemplate;
- }
-
- public MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter() {
- MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
- converter.setObjectMapper(objectMapper());
- return converter;
- }
-
- private ObjectMapper createObjectMapper() {
- var objectMapper = Jackson2ObjectMapperBuilder.json().build();
- objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
- objectMapper.registerModule(new JsonComponentModule());
- return objectMapper;
- }
-
+ /**
+ * we alter the {@link ObjectMapper} generated by Spring using SpringBoot system
+ * @return json customizer
+ * @see org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration JacksonAutoConfiguration
+ * @see org.springframework.boot.autoconfigure.http.HttpMessageConvertersAutoConfiguration HttpMessageConvertersAutoConfiguration
+ * @see org.springframework.boot.autoconfigure.web.client.RestTemplateAutoConfiguration RestTemplateAutoConfiguration
+ */
@Bean
- public ObjectMapper objectMapper() {
- return createObjectMapper();
+ public Jackson2ObjectMapperBuilderCustomizer jsonCustomizer() {
+ //also from .config: spring.jackson.serialization.write-dates-as-timestamps=false
+ return builder -> builder.featuresToDisable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS)
+ //.findModulesViaServiceLoader(true)
+ .modulesToInstall(new JsonComponentModule());
}
}
diff --git a/src/main/java/org/gridsuite/explore/server/services/CaseService.java b/src/main/java/org/gridsuite/explore/server/services/CaseService.java
index ab0a2963..0b04cafa 100644
--- a/src/main/java/org/gridsuite/explore/server/services/CaseService.java
+++ b/src/main/java/org/gridsuite/explore/server/services/CaseService.java
@@ -10,6 +10,7 @@
import org.gridsuite.explore.server.ExploreException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.web.client.RestTemplateBuilder;
import org.springframework.core.ParameterizedTypeReference;
import org.springframework.http.*;
import org.springframework.stereotype.Service;
@@ -26,21 +27,16 @@
import java.util.UUID;
import java.util.stream.Collectors;
-import static org.gridsuite.explore.server.ExploreException.Type.*;
+import static org.gridsuite.explore.server.ExploreException.Type.INCORRECT_CASE_FILE;
@Service
public class CaseService implements IDirectoryElementsService {
- private static final String CASE_SERVER_API_VERSION = "v1";
-
- private static final String DELIMITER = "/";
private final RestTemplate restTemplate;
- private String caseServerBaseUri;
@Autowired
public CaseService(@Value("${powsybl.services.case-server.base-uri:http://case-server/}") String studyServerBaseUri,
- RestTemplate restTemplate) {
- this.caseServerBaseUri = studyServerBaseUri;
- this.restTemplate = restTemplate;
+ RestTemplateBuilder restTemplateBuilder) {
+ this.restTemplate = restTemplateBuilder.rootUri(studyServerBaseUri + "/v1").build();
}
private static ExploreException wrapRemoteError(String response, HttpStatus statusCode) {
@@ -51,11 +47,7 @@ private static ExploreException wrapRemoteError(String response, HttpStatus stat
}
}
- public void setBaseUri(String actionsServerBaseUri) {
- this.caseServerBaseUri = actionsServerBaseUri;
- }
-
- UUID importCase(MultipartFile multipartFile) {
+ public UUID importCase(MultipartFile multipartFile) {
MultiValueMap body = new LinkedMultiValueMap<>();
UUID caseUuid;
HttpHeaders headers = new HttpHeaders();
@@ -64,11 +56,9 @@ UUID importCase(MultipartFile multipartFile) {
Objects.requireNonNull(multipartFile.getOriginalFilename());
body.add("file", multipartFile.getResource());
}
- HttpEntity> request = new HttpEntity<>(
- body, headers);
+ HttpEntity> request = new HttpEntity<>(body, headers);
try {
- caseUuid = restTemplate.postForObject(caseServerBaseUri + "/" + CASE_SERVER_API_VERSION + "/cases", request,
- UUID.class);
+ caseUuid = restTemplate.postForObject("/cases", request, UUID.class);
} catch (HttpStatusCodeException e) {
if (e.getStatusCode().equals(HttpStatus.UNPROCESSABLE_ENTITY)) {
throw new ExploreException(INCORRECT_CASE_FILE, e.getMessage());
@@ -78,35 +68,33 @@ UUID importCase(MultipartFile multipartFile) {
return caseUuid;
}
- UUID duplicateCase(UUID sourceCaseUuid) {
- String path = UriComponentsBuilder.fromPath(DELIMITER + CASE_SERVER_API_VERSION + "/cases")
+ public UUID duplicateCase(UUID sourceCaseUuid) {
+ String path = UriComponentsBuilder.fromPath("/cases")
.queryParam("duplicateFrom", sourceCaseUuid)
.toUriString();
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_JSON);
- return restTemplate.exchange(caseServerBaseUri + path, HttpMethod.POST, new HttpEntity<>(headers), UUID.class)
+ return restTemplate.exchange(path, HttpMethod.POST, new HttpEntity<>(headers), UUID.class)
.getBody();
}
@Override
public void delete(UUID id, String userId) {
- String path = UriComponentsBuilder.fromPath(DELIMITER + CASE_SERVER_API_VERSION + "/cases/{id}")
+ String path = UriComponentsBuilder.fromPath("/cases/{id}")
.buildAndExpand(id)
.toUriString();
HttpHeaders headers = new HttpHeaders();
headers.add(HEADER_USER_ID, userId);
- restTemplate.exchange(caseServerBaseUri + path, HttpMethod.DELETE, new HttpEntity<>(headers), Void.class);
+ restTemplate.exchange(path, HttpMethod.DELETE, new HttpEntity<>(headers), Void.class);
}
@Override
public List