diff --git a/biosdk-services/pom.xml b/biosdk-services/pom.xml index 5e8b66ac..5d4cfcc8 100644 --- a/biosdk-services/pom.xml +++ b/biosdk-services/pom.xml @@ -159,12 +159,6 @@ json-simple 1.1.1 - - com.google.code.gson - gson - 2.8.6 - - diff --git a/biosdk-services/src/main/java/io/mosip/biosdk/services/controller/MainController.java b/biosdk-services/src/main/java/io/mosip/biosdk/services/controller/MainController.java index b1c478ff..1aad0ac0 100644 --- a/biosdk-services/src/main/java/io/mosip/biosdk/services/controller/MainController.java +++ b/biosdk-services/src/main/java/io/mosip/biosdk/services/controller/MainController.java @@ -1,7 +1,6 @@ package io.mosip.biosdk.services.controller; -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; +import com.fasterxml.jackson.core.JsonProcessingException; import io.mosip.biosdk.services.config.LoggerConfig; import io.mosip.biosdk.services.constants.ErrorMessages; import io.mosip.biosdk.services.dto.*; @@ -51,8 +50,6 @@ public class MainController { @Autowired private BioSdkServiceFactory bioSdkServiceFactory; - private Gson gson = new GsonBuilder().serializeNulls().create();; - @GetMapping(path = "/") @ApiOperation(value = "Service status") @ApiResponses(value = { @ApiResponse(code = 200, message = "Service is running...") }) @@ -82,13 +79,26 @@ public ResponseEntity init( BioSdkServiceProvider bioSdkServiceProviderImpl = null; bioSdkServiceProviderImpl = bioSdkServiceFactory.getBioSdkServiceProvider(request.getVersion()); responseDto.setResponse(bioSdkServiceProviderImpl.init(request)); + return ResponseEntity.status(HttpStatus.OK).body(serviceUtil.getObjectMapper().writeValueAsString(responseDto)); } catch (BioSDKException e) { logger.error(LOGGER_SESSIONID, LOGGER_IDTYPE, "BioSDKException: ", e.getMessage()); ErrorDto errorDto = new ErrorDto(e.getErrorCode(), e.getErrorText()); responseDto.getErrors().add(errorDto); - return ResponseEntity.status(HttpStatus.OK).body(gson.toJson(responseDto)); + try { + return ResponseEntity.status(HttpStatus.OK).body(serviceUtil.getObjectMapper().writeValueAsString(responseDto)); + } catch (JsonProcessingException ex) { + throw new RuntimeException(ex); + } + } catch (JsonProcessingException e) { + logger.error(LOGGER_SESSIONID, LOGGER_IDTYPE, "JsonProcessingException: ", e.getMessage()); + ErrorDto errorDto = new ErrorDto(e.getMessage(), e.getMessage()); + responseDto.getErrors().add(errorDto); + try { + return ResponseEntity.status(HttpStatus.OK).body(serviceUtil.getObjectMapper().writeValueAsString(responseDto)); + } catch (JsonProcessingException ex) { + throw new RuntimeException(ex); + } } - return ResponseEntity.status(HttpStatus.OK).body(gson.toJson(responseDto)); } @PostMapping(path = "/match", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) @@ -103,13 +113,26 @@ public ResponseEntity match( BioSdkServiceProvider bioSdkServiceProviderImpl = null; bioSdkServiceProviderImpl = bioSdkServiceFactory.getBioSdkServiceProvider(request.getVersion()); responseDto.setResponse(bioSdkServiceProviderImpl.match(request)); + return ResponseEntity.status(HttpStatus.OK).body(serviceUtil.getObjectMapper().writeValueAsString(responseDto)); } catch (BioSDKException e) { logger.error(LOGGER_SESSIONID, LOGGER_IDTYPE, "BioSDKException: ", e.getMessage()); ErrorDto errorDto = new ErrorDto(e.getErrorCode(), e.getErrorText()); responseDto.getErrors().add(errorDto); - return ResponseEntity.status(HttpStatus.OK).body(gson.toJson(responseDto)); + try { + return ResponseEntity.status(HttpStatus.OK).body(serviceUtil.getObjectMapper().writeValueAsString(responseDto)); + } catch (JsonProcessingException ex) { + throw new RuntimeException(ex); + } + } catch (JsonProcessingException e) { + logger.error(LOGGER_SESSIONID, LOGGER_IDTYPE, "JsonProcessingException: ", e.getMessage()); + ErrorDto errorDto = new ErrorDto(e.getMessage(), e.getMessage()); + responseDto.getErrors().add(errorDto); + try { + return ResponseEntity.status(HttpStatus.OK).body(serviceUtil.getObjectMapper().writeValueAsString(responseDto)); + } catch (JsonProcessingException ex) { + throw new RuntimeException(ex); + } } - return ResponseEntity.status(HttpStatus.OK).body(gson.toJson(responseDto)); } @PostMapping(path = "/check-quality", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) @@ -124,13 +147,26 @@ public ResponseEntity checkQuality( BioSdkServiceProvider bioSdkServiceProviderImpl = null; bioSdkServiceProviderImpl = bioSdkServiceFactory.getBioSdkServiceProvider(request.getVersion()); responseDto.setResponse(bioSdkServiceProviderImpl.checkQuality(request)); + return ResponseEntity.status(HttpStatus.OK).body(serviceUtil.getObjectMapper().writeValueAsString(responseDto)); } catch (BioSDKException e) { logger.error(LOGGER_SESSIONID, LOGGER_IDTYPE, "BioSDKException: ", e.getMessage()); ErrorDto errorDto = new ErrorDto(e.getErrorCode(), e.getErrorText()); responseDto.getErrors().add(errorDto); - return ResponseEntity.status(HttpStatus.OK).body(gson.toJson(responseDto)); + try { + return ResponseEntity.status(HttpStatus.OK).body(serviceUtil.getObjectMapper().writeValueAsString(responseDto)); + } catch (JsonProcessingException ex) { + throw new RuntimeException(ex); + } + } catch (JsonProcessingException e) { + logger.error(LOGGER_SESSIONID, LOGGER_IDTYPE, "JsonProcessingException: ", e.getMessage()); + ErrorDto errorDto = new ErrorDto(e.getMessage(), e.getMessage()); + responseDto.getErrors().add(errorDto); + try { + return ResponseEntity.status(HttpStatus.OK).body(serviceUtil.getObjectMapper().writeValueAsString(responseDto)); + } catch (JsonProcessingException ex) { + throw new RuntimeException(ex); + } } - return ResponseEntity.status(HttpStatus.OK).body(gson.toJson(responseDto)); } @PostMapping(path = "/extract-template", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) @@ -145,13 +181,27 @@ public ResponseEntity extractTemplate( BioSdkServiceProvider bioSdkServiceProviderImpl = null; bioSdkServiceProviderImpl = bioSdkServiceFactory.getBioSdkServiceProvider(request.getVersion()); responseDto.setResponse(bioSdkServiceProviderImpl.extractTemplate(request)); + String response = serviceUtil.getObjectMapper().writeValueAsString(responseDto); + return ResponseEntity.status(HttpStatus.OK).body(response); } catch (BioSDKException e) { logger.error(LOGGER_SESSIONID, LOGGER_IDTYPE, "BioSDKException: ", e.getMessage()); ErrorDto errorDto = new ErrorDto(e.getErrorCode(), e.getErrorText()); responseDto.getErrors().add(errorDto); - return ResponseEntity.status(HttpStatus.OK).body(gson.toJson(responseDto)); + try { + return ResponseEntity.status(HttpStatus.OK).body(serviceUtil.getObjectMapper().writeValueAsString(responseDto)); + } catch (JsonProcessingException ex) { + throw new RuntimeException(ex); + } + } catch (JsonProcessingException e) { + logger.error(LOGGER_SESSIONID, LOGGER_IDTYPE, "JsonProcessingException: ", e.getMessage()); + ErrorDto errorDto = new ErrorDto(e.getMessage(), e.getMessage()); + responseDto.getErrors().add(errorDto); + try { + return ResponseEntity.status(HttpStatus.OK).body(serviceUtil.getObjectMapper().writeValueAsString(responseDto)); + } catch (JsonProcessingException ex) { + throw new RuntimeException(ex); + } } - return ResponseEntity.status(HttpStatus.OK).body(gson.toJson(responseDto)); } @PostMapping(path = "/convert-format", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) @@ -166,13 +216,26 @@ public ResponseEntity convertFormat( BioSdkServiceProvider bioSdkServiceProviderImpl = null; bioSdkServiceProviderImpl = bioSdkServiceFactory.getBioSdkServiceProvider(request.getVersion()); responseDto.setResponse(bioSdkServiceProviderImpl.convertFormat(request)); + return ResponseEntity.status(HttpStatus.OK).body(serviceUtil.getObjectMapper().writeValueAsString(responseDto)); } catch (BioSDKException e) { logger.error(LOGGER_SESSIONID, LOGGER_IDTYPE, "BioSDKException: ", e.getMessage()); ErrorDto errorDto = new ErrorDto(e.getErrorCode(), e.getErrorText()); responseDto.getErrors().add(errorDto); - return ResponseEntity.status(HttpStatus.OK).body(gson.toJson(responseDto)); + try { + return ResponseEntity.status(HttpStatus.OK).body(serviceUtil.getObjectMapper().writeValueAsString(responseDto)); + } catch (JsonProcessingException ex) { + throw new RuntimeException(ex); + } + } catch (JsonProcessingException e) { + logger.error(LOGGER_SESSIONID, LOGGER_IDTYPE, "JsonProcessingException: ", e.getMessage()); + ErrorDto errorDto = new ErrorDto(e.getMessage(), e.getMessage()); + responseDto.getErrors().add(errorDto); + try { + return ResponseEntity.status(HttpStatus.OK).body(serviceUtil.getObjectMapper().writeValueAsString(responseDto)); + } catch (JsonProcessingException ex) { + throw new RuntimeException(ex); + } } - return ResponseEntity.status(HttpStatus.OK).body(gson.toJson(responseDto)); } @PostMapping(path = "/segment", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) @@ -187,13 +250,26 @@ public ResponseEntity segment( BioSdkServiceProvider bioSdkServiceProviderImpl = null; bioSdkServiceProviderImpl = bioSdkServiceFactory.getBioSdkServiceProvider(request.getVersion()); responseDto.setResponse(bioSdkServiceProviderImpl.segment(request)); + return ResponseEntity.status(HttpStatus.OK).body(serviceUtil.getObjectMapper().writeValueAsString(responseDto)); } catch (BioSDKException e) { logger.error(LOGGER_SESSIONID, LOGGER_IDTYPE, "BioSDKException: ", e.getMessage()); ErrorDto errorDto = new ErrorDto(e.getErrorCode(), e.getErrorText()); responseDto.getErrors().add(errorDto); - return ResponseEntity.status(HttpStatus.OK).body(gson.toJson(responseDto)); + try { + return ResponseEntity.status(HttpStatus.OK).body(serviceUtil.getObjectMapper().writeValueAsString(responseDto)); + } catch (JsonProcessingException ex) { + throw new RuntimeException(ex); + } + } catch (JsonProcessingException e) { + logger.error(LOGGER_SESSIONID, LOGGER_IDTYPE, "JsonProcessingException: ", e.getMessage()); + ErrorDto errorDto = new ErrorDto(e.getMessage(), e.getMessage()); + responseDto.getErrors().add(errorDto); + try { + return ResponseEntity.status(HttpStatus.OK).body(serviceUtil.getObjectMapper().writeValueAsString(responseDto)); + } catch (JsonProcessingException ex) { + throw new RuntimeException(ex); + } } - return ResponseEntity.status(HttpStatus.OK).body(gson.toJson(responseDto)); } private ResponseDto generateResponseTemplate(String version){ diff --git a/biosdk-services/src/main/java/io/mosip/biosdk/services/impl/spec_1_0/BioSdkServiceProviderImpl_V_1_0.java b/biosdk-services/src/main/java/io/mosip/biosdk/services/impl/spec_1_0/BioSdkServiceProviderImpl_V_1_0.java index 798920cd..cf00dcdf 100644 --- a/biosdk-services/src/main/java/io/mosip/biosdk/services/impl/spec_1_0/BioSdkServiceProviderImpl_V_1_0.java +++ b/biosdk-services/src/main/java/io/mosip/biosdk/services/impl/spec_1_0/BioSdkServiceProviderImpl_V_1_0.java @@ -3,13 +3,12 @@ import static io.mosip.biosdk.services.constants.AppConstants.LOGGER_IDTYPE; import static io.mosip.biosdk.services.constants.AppConstants.LOGGER_SESSIONID; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.core.type.TypeReference; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; - import io.mosip.biosdk.services.config.LoggerConfig; import io.mosip.biosdk.services.constants.ErrorMessages; import io.mosip.biosdk.services.dto.RequestDto; @@ -44,8 +43,6 @@ public class BioSdkServiceProviderImpl_V_1_0 implements BioSdkServiceProvider { @Autowired private Utils utils; - private Gson gson = new GsonBuilder().serializeNulls().create(); - @Value("${mosip.biosdk.log-request-response-enabled:false}") private boolean isLogRequestResponse; @@ -59,9 +56,9 @@ public Object init(RequestDto request){ SDKInfo sdkInfo = null; String decryptedRequest = decode(request.getRequest()); logger.debug(LOGGER_SESSIONID, LOGGER_IDTYPE,"init: ", "decoding successful"); - InitRequestDto initRequestDto = gson.fromJson(decryptedRequest, InitRequestDto.class); - logger.debug(LOGGER_SESSIONID, LOGGER_IDTYPE,"init: ", "json to dto successful"); try { + InitRequestDto initRequestDto = utils.getObjectMapper().readValue(decryptedRequest, new TypeReference() {}); + logger.debug(LOGGER_SESSIONID, LOGGER_IDTYPE,"init: ", "json to dto successful"); logRequest(initRequestDto); sdkInfo = iBioApi.init(initRequestDto.getInitParams()); logObject(sdkInfo); @@ -78,9 +75,10 @@ public Object checkQuality(RequestDto request) { Response response; String decryptedRequest = decode(request.getRequest()); logger.debug(LOGGER_SESSIONID, LOGGER_IDTYPE,"checkQuality: ", "decoding successful"); - CheckQualityRequestDto checkQualityRequestDto = gson.fromJson(decryptedRequest, CheckQualityRequestDto.class); - logger.debug(LOGGER_SESSIONID, LOGGER_IDTYPE,"checkQuality: ", "json to dto successful"); + try { + CheckQualityRequestDto checkQualityRequestDto = utils.getObjectMapper().readValue(decryptedRequest, new TypeReference() {}); + logger.debug(LOGGER_SESSIONID, LOGGER_IDTYPE,"checkQuality: ", "json to dto successful"); logRequest(checkQualityRequestDto); response = iBioApi.checkQuality( checkQualityRequestDto.getSample(), @@ -101,10 +99,10 @@ public Object match(RequestDto request) { Response response; String decryptedRequest = decode(request.getRequest()); logger.debug(LOGGER_SESSIONID, LOGGER_IDTYPE,"match: ", "decoding successful"); - MatchRequestDto matchRequestDto = gson.fromJson(decryptedRequest, MatchRequestDto.class); - logger.debug(LOGGER_SESSIONID, LOGGER_IDTYPE,"match: ", "json to dto successful"); try { - logRequest(matchRequestDto); + MatchRequestDto matchRequestDto = utils.getObjectMapper().readValue(decryptedRequest, new TypeReference() {}); + logger.debug(LOGGER_SESSIONID, LOGGER_IDTYPE,"match: ", "json to dto successful"); + logRequest(matchRequestDto); response = iBioApi.match( matchRequestDto.getSample(), matchRequestDto.getGallery(), @@ -125,10 +123,10 @@ public Object extractTemplate(RequestDto request) { Response response; String decryptedRequest = decode(request.getRequest()); logger.debug(LOGGER_SESSIONID, LOGGER_IDTYPE,"extractTemplate: ", "decoding successful"); - ExtractTemplateRequestDto extractTemplateRequestDto = gson.fromJson(decryptedRequest, ExtractTemplateRequestDto.class); - logger.debug(LOGGER_SESSIONID, LOGGER_IDTYPE,"extractTemplate: ", "json to dto successful"); try { - logRequest(extractTemplateRequestDto); + ExtractTemplateRequestDto extractTemplateRequestDto = utils.getObjectMapper().readValue(decryptedRequest, new TypeReference() {}); + logger.debug(LOGGER_SESSIONID, LOGGER_IDTYPE,"extractTemplate: ", "json to dto successful"); + logRequest(extractTemplateRequestDto); response = iBioApi.extractTemplate( extractTemplateRequestDto.getSample(), extractTemplateRequestDto.getModalitiesToExtract(), @@ -148,9 +146,10 @@ public Object segment(RequestDto request) { Response response; String decryptedRequest = decode(request.getRequest()); logger.debug(LOGGER_SESSIONID, LOGGER_IDTYPE,"segment: ", "decoding successful"); - SegmentRequestDto segmentRequestDto = gson.fromJson(decryptedRequest, SegmentRequestDto.class); - logger.debug(LOGGER_SESSIONID, LOGGER_IDTYPE,"segment: ", "json to dto successful"); + try { + SegmentRequestDto segmentRequestDto = utils.getObjectMapper().readValue(decryptedRequest, new TypeReference() {}); + logger.debug(LOGGER_SESSIONID, LOGGER_IDTYPE,"segment: ", "json to dto successful"); logRequest(segmentRequestDto); response = iBioApi.segment( segmentRequestDto.getSample(), @@ -171,10 +170,10 @@ public Object convertFormat(RequestDto request) { Response response; String decryptedRequest = decode(request.getRequest()); logger.debug(LOGGER_SESSIONID, LOGGER_IDTYPE,"convertFormat: ", "decoding successful"); - ConvertFormatRequestDto convertFormatRequestDto = gson.fromJson(decryptedRequest, ConvertFormatRequestDto.class); - logger.debug(LOGGER_SESSIONID, LOGGER_IDTYPE,"convertFormat: ", "json to dto successful"); try { - logRequest(convertFormatRequestDto); + ConvertFormatRequestDto convertFormatRequestDto = utils.getObjectMapper().readValue(decryptedRequest, new TypeReference() {}); + logger.debug(LOGGER_SESSIONID, LOGGER_IDTYPE,"convertFormat: ", "json to dto successful"); + logRequest(convertFormatRequestDto); response = iBioApi.convertFormatV2( convertFormatRequestDto.getSample(), convertFormatRequestDto.getSourceFormat(), @@ -228,20 +227,20 @@ private void logRequest(ConvertFormatRequestDto convertFormatRequestDto) { } } - private void logObject(T response) { + private void logObject(T response) throws JsonProcessingException { if(isLogRequestResponse) { - logger.debug(response.getClass() + ": " + gson.toJson(response)); + logger.debug(response.getClass() + ": " + utils.getObjectMapper().writeValueAsString(response)); } } - private void logResponse(Response response) { + private void logResponse(Response response) throws JsonProcessingException { if(isLogRequestResponse) { Object resp = response.getResponse(); if(resp instanceof BiometricRecord) { BiometricRecord biometricRecord = (BiometricRecord) resp; logBiometricRecord("Response BiometricRecord: ", biometricRecord); } else { - logger.debug("Response: " + gson.toJson(resp)); + logger.debug("Response: " + utils.getObjectMapper().writeValueAsString(resp)); } } } diff --git a/biosdk-services/src/main/java/io/mosip/biosdk/services/utils/BytesToStringSerializer.java b/biosdk-services/src/main/java/io/mosip/biosdk/services/utils/BytesToStringSerializer.java new file mode 100644 index 00000000..6b341fcf --- /dev/null +++ b/biosdk-services/src/main/java/io/mosip/biosdk/services/utils/BytesToStringSerializer.java @@ -0,0 +1,28 @@ +package io.mosip.biosdk.services.utils; + +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.SerializerProvider; +import com.fasterxml.jackson.databind.ser.std.StdSerializer; + +import java.io.IOException; + +public class BytesToStringSerializer extends StdSerializer { + + public BytesToStringSerializer() { + super(byte[].class); + } + + protected BytesToStringSerializer(Class t) { + super(t); + } + + @Override + public void serialize(byte[] value, JsonGenerator gen, SerializerProvider provider) throws IOException { + int[] builder = new int[value.length]; + for(int i = 0; i < value.length; i++) { + builder[i] = Integer.parseInt(Byte.toString(value[i])); + } + + gen.writeArray(builder, 0, value.length);; + } +} \ No newline at end of file diff --git a/biosdk-services/src/main/java/io/mosip/biosdk/services/utils/CustomLocalDateTimeDeSerializer.java b/biosdk-services/src/main/java/io/mosip/biosdk/services/utils/CustomLocalDateTimeDeSerializer.java new file mode 100644 index 00000000..a3e5fd3c --- /dev/null +++ b/biosdk-services/src/main/java/io/mosip/biosdk/services/utils/CustomLocalDateTimeDeSerializer.java @@ -0,0 +1,21 @@ +package io.mosip.biosdk.services.utils; + +import com.fasterxml.jackson.core.JsonParser; +import com.fasterxml.jackson.databind.DeserializationContext; +import com.fasterxml.jackson.databind.JsonDeserializer; +import com.fasterxml.jackson.databind.JsonNode; + +import java.io.IOException; +import java.time.LocalDateTime; + +public class CustomLocalDateTimeDeSerializer extends JsonDeserializer { + @Override + public LocalDateTime deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException { + JsonNode node = jsonParser.getCodec().readTree(jsonParser); + JsonNode date = node.get("date"); + JsonNode time = node.get("time"); + + LocalDateTime localDateTime = LocalDateTime.of(date.get("year").intValue(), date.get("month").intValue(), date.get("day").intValue(), time.get("hour").intValue(), time.get("minute").intValue(), time.get("second").intValue(), time.get("nano").intValue()); + return localDateTime; + } +} diff --git a/biosdk-services/src/main/java/io/mosip/biosdk/services/utils/CustomLocalDateTimeSerializer.java b/biosdk-services/src/main/java/io/mosip/biosdk/services/utils/CustomLocalDateTimeSerializer.java new file mode 100644 index 00000000..67c049ca --- /dev/null +++ b/biosdk-services/src/main/java/io/mosip/biosdk/services/utils/CustomLocalDateTimeSerializer.java @@ -0,0 +1,30 @@ +package io.mosip.biosdk.services.utils; + +import com.fasterxml.jackson.core.JsonGenerator; +import com.fasterxml.jackson.databind.JsonSerializer; +import com.fasterxml.jackson.databind.SerializerProvider; + +import java.io.IOException; +import java.time.LocalDateTime; + +public class CustomLocalDateTimeSerializer extends JsonSerializer { + @Override + public void serialize(LocalDateTime value, JsonGenerator gen, SerializerProvider serializers) throws IOException { + gen.writeStartObject(); + + gen.writeObjectFieldStart("date"); + gen.writeNumberField("year", value.getYear()); + gen.writeNumberField("month", value.getMonthValue()); + gen.writeNumberField("day", value.getDayOfMonth()); + gen.writeEndObject(); + + gen.writeObjectFieldStart("time"); + gen.writeNumberField("hour", value.getHour()); + gen.writeNumberField("minute", value.getMinute()); + gen.writeNumberField("second", value.getSecond()); + gen.writeNumberField("nano", value.getNano()); + gen.writeEndObject(); + + gen.writeEndObject(); + } +} \ No newline at end of file diff --git a/biosdk-services/src/main/java/io/mosip/biosdk/services/utils/Utils.java b/biosdk-services/src/main/java/io/mosip/biosdk/services/utils/Utils.java index 9a29bb5d..ac0e46a9 100644 --- a/biosdk-services/src/main/java/io/mosip/biosdk/services/utils/Utils.java +++ b/biosdk-services/src/main/java/io/mosip/biosdk/services/utils/Utils.java @@ -9,13 +9,18 @@ import java.util.List; import java.util.function.BiConsumer; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.fasterxml.jackson.databind.module.SimpleModule; +import com.fasterxml.jackson.module.afterburner.AfterburnerModule; import org.apache.commons.codec.digest.DigestUtils; import org.json.simple.parser.ParseException; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; -import com.google.gson.Gson; - import io.mosip.biosdk.services.dto.RequestDto; import io.mosip.biosdk.services.impl.spec_1_0.dto.request.CheckQualityRequestDto; import io.mosip.biosdk.services.impl.spec_1_0.dto.request.ConvertFormatRequestDto; @@ -31,8 +36,7 @@ @Component public class Utils { - @Autowired - private Gson gson; + private ObjectMapper mapper; private String utcDateTimePattern = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"; @@ -40,8 +44,8 @@ public String getCurrentResponseTime() { return DateUtils.formatDate(new Date(System.currentTimeMillis()), utcDateTimePattern); } - public RequestDto getRequestInfo(String request) throws ParseException { - return gson.fromJson(request, RequestDto.class); + public RequestDto getRequestInfo(String request) throws ParseException, JsonProcessingException { + return getObjectMapper().readValue(request, new TypeReference() {}); } public static String base64Decode(String data){ @@ -80,9 +84,13 @@ private void appendString(BiometricRecord biometricRecord, StringBuilder stringB stringBuilder.append(" }"); } } - + private String stringOf(Object obj) { - return obj == null ? "null" : gson.toJson(obj); + try { + return obj == null ? "null" : getObjectMapper().writeValueAsString(obj); + } catch (JsonProcessingException e) { + return null; + } } private void appendString(Iterator iterator, StringBuilder stringBuilder, BiConsumer appendBiConsumer) { @@ -311,4 +319,22 @@ private String dateAsString(LocalDateTime localDateTime) { private static String booleanAsString(Boolean bool) { return bool == null ? "null" : Boolean.toString(bool); } + + public ObjectMapper getObjectMapper() { + if(mapper == null) { + mapper = new ObjectMapper().registerModule(new AfterburnerModule()); + SimpleModule module = new SimpleModule(); + module.addDeserializer(LocalDateTime.class, new CustomLocalDateTimeDeSerializer()); + module.addSerializer(LocalDateTime.class, new CustomLocalDateTimeSerializer()); + module.addSerializer(byte[].class, new BytesToStringSerializer()); + mapper.registerModule(module); + mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES); + mapper.enable(SerializationFeature.INDENT_OUTPUT); + mapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS); + mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); + mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); + } + return mapper; + } + }