Added validation for required types
This commit is contained in:
parent
2b5bd8c120
commit
18809d24d2
2 changed files with 60 additions and 27 deletions
|
|
@ -14,7 +14,8 @@ public enum SignalError {
|
|||
ERROR_008("008", "PackageName не соответствует допустимому формату"),
|
||||
ERROR_009("009", "Превышен допустимый размер пакета"),
|
||||
ERROR_010("010", "Идентификатор субъекта (Id) не соответствует допустимому формату"),
|
||||
ERROR_011("011", "Получен невалидный XML");
|
||||
ERROR_011("011", "Получен невалидный XML"),
|
||||
ERROR_100("100", "Непредвиденная ошибка");
|
||||
|
||||
private final String code;
|
||||
private final String message;
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ import org.springframework.web.multipart.MultipartFile;
|
|||
import ru.nbch.credit_tracker.config.settings.CreditTrackerSettings;
|
||||
import ru.nbch.credit_tracker.entities.monitoring_request.MonitoringRequest;
|
||||
import ru.nbch.credit_tracker.enums.SignalError;
|
||||
import ru.nbch.credit_tracker.exceptions.ValidationException;
|
||||
import ru.nbch.credit_tracker.enums.Status;
|
||||
import ru.nbch.credit_tracker.service.FailureAnswerGenerator;
|
||||
import ru.nbch.credit_tracker.service.SignalService;
|
||||
import ru.nbch.credit_tracker.service.scoring.AuthorizationService;
|
||||
|
|
@ -87,60 +87,92 @@ public class SignalFacade {
|
|||
|
||||
} catch (Exception e) {
|
||||
log.error(e.getMessage(), e);
|
||||
String errorPath = failureAnswerGenerator.generateFailureAnswer(SignalError.ERROR_001);
|
||||
String errorPath = failureAnswerGenerator.generateFailureAnswer(SignalError.ERROR_100);
|
||||
return ResponseEntity.internalServerError().body(new PathResource(errorPath));
|
||||
}
|
||||
|
||||
// Теперь знаем, что в архиве лежит ровно один файл с раширением xml и он весит меньше 2гб. Можно валидировать сам xml
|
||||
try (ZipInputStream zipInputStream = new ZipInputStream(file.getInputStream())) {
|
||||
zipInputStream.getNextEntry();
|
||||
validateRequestByXsd(zipInputStream);
|
||||
|
||||
} catch (ValidationException e) {
|
||||
// записать REJECTED
|
||||
return getBadResponse(SignalError.ERROR_011); // TODO вычленять конкретный элемент
|
||||
} catch (Exception e) {
|
||||
log.error(e.getMessage(), e);
|
||||
String errorPath = failureAnswerGenerator.generateFailureAnswer(SignalError.ERROR_001);
|
||||
return ResponseEntity.internalServerError().body(new PathResource(errorPath));
|
||||
}
|
||||
|
||||
// Пробуем распарсить xml
|
||||
MonitoringRequest monitoringRequest;
|
||||
// Xml валиден. Производим анмаршаллинг
|
||||
try (ZipInputStream zipInputStream = new ZipInputStream(file.getInputStream())) {
|
||||
zipInputStream.getNextEntry();
|
||||
|
||||
IXmlProcessor processor = xmlUtilService.createJaxbProcessor();
|
||||
monitoringRequest = processor.read(zipInputStream, MonitoringRequest.class);
|
||||
|
||||
} catch (Exception e) {
|
||||
log.error(e.getMessage(), e);
|
||||
String errorPath = failureAnswerGenerator.generateFailureAnswer(SignalError.ERROR_100);
|
||||
return ResponseEntity.internalServerError().body(new PathResource(errorPath));
|
||||
}
|
||||
|
||||
// валидация xml
|
||||
ResponseEntity<Resource> errorResponse = validateMonitoringRequest(monitoringRequest);
|
||||
if (errorResponse != null) {
|
||||
return errorResponse;
|
||||
}
|
||||
|
||||
try {
|
||||
if (!authorizationService.hasAuthorization(monitoringRequest.getUserId(), monitoringRequest.getPassword())) {
|
||||
// записать REJECTED
|
||||
signalService.insertPackage(monitoringRequest, Status.REJECTED);
|
||||
return getBadResponse(SignalError.ERROR_005);
|
||||
}
|
||||
|
||||
if (signalService.isPackageNotUnique(monitoringRequest)) {
|
||||
// записать REJECTED
|
||||
// signalService.insertPackage(monitoringRequest, Status.REJECTED);
|
||||
signalService.insertPackage(monitoringRequest, Status.REJECTED);
|
||||
return getBadResponse(SignalError.ERROR_007);
|
||||
}
|
||||
|
||||
signalService.registerPackage(monitoringRequest);
|
||||
|
||||
} catch (Exception e) {
|
||||
log.error(e.getMessage(), e);
|
||||
String errorPath = failureAnswerGenerator.generateFailureAnswer(SignalError.ERROR_001);
|
||||
String errorPath = failureAnswerGenerator.generateFailureAnswer(SignalError.ERROR_100);
|
||||
return ResponseEntity.internalServerError().body(new PathResource(errorPath));
|
||||
}
|
||||
|
||||
return ResponseEntity.ok().body(new PathResource("D:\\folder_name\\legal.xml")); // TODO generate success response
|
||||
}
|
||||
|
||||
private void validateRequestByXsd(ZipInputStream inputStream) throws ValidationException {
|
||||
try {
|
||||
xmlUtilService.validateXMLByXSD(inputStream, config.getXsdValidation().monitoringRequestPath());
|
||||
} catch (Exception e) {
|
||||
throw new ValidationException();
|
||||
private ResponseEntity<Resource> validateMonitoringRequest(MonitoringRequest request) {
|
||||
if (request == null) {
|
||||
return getBadResponse(SignalError.ERROR_011);
|
||||
}
|
||||
|
||||
ResponseEntity<Resource> errorResponse = validateReruqredTags(request);
|
||||
if (errorResponse != null) {
|
||||
return errorResponse;
|
||||
}
|
||||
|
||||
return validateTagsTypes(request);
|
||||
}
|
||||
|
||||
ResponseEntity<Resource> validateReruqredTags(MonitoringRequest request) {
|
||||
if (request.getUserId() == null) {
|
||||
return getBadResponse(SignalError.ERROR_002); // + userId
|
||||
}
|
||||
|
||||
if (request.getPackageName() == null) {
|
||||
return getBadResponse(SignalError.ERROR_002); // + packageName
|
||||
}
|
||||
|
||||
if (request.getPassword() == null) {
|
||||
return getBadResponse(SignalError.ERROR_002); // + password
|
||||
}
|
||||
|
||||
if (request.getSubjects() == null) {
|
||||
return getBadResponse(SignalError.ERROR_002); // + subjects
|
||||
}
|
||||
|
||||
if (request.getSubjects().getSubject().isEmpty()) {
|
||||
return getBadResponse(SignalError.ERROR_002); // subject
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
private ResponseEntity<Resource> validateTagsTypes(MonitoringRequest request) {
|
||||
// TODO проверка на типы тут уже можно регистрировать в бд REGECTED реквесты
|
||||
return null;
|
||||
}
|
||||
|
||||
private boolean isZipFile(MultipartFile file) {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue