diff --git a/application-engine/src/main/java/com/netgrif/application/engine/workflow/web/RestResponseExceptionHandler.java b/application-engine/src/main/java/com/netgrif/application/engine/workflow/web/RestResponseExceptionHandler.java index 21b0154c6a..344c46ece8 100644 --- a/application-engine/src/main/java/com/netgrif/application/engine/workflow/web/RestResponseExceptionHandler.java +++ b/application-engine/src/main/java/com/netgrif/application/engine/workflow/web/RestResponseExceptionHandler.java @@ -21,18 +21,37 @@ public class RestResponseExceptionHandler extends ResponseEntityExceptionHandler private static final Logger log = LoggerFactory.getLogger(RestResponseExceptionHandler.class); @Override - protected ResponseEntity handleHttpMessageNotWritable(HttpMessageNotWritableException exception, HttpHeaders headers, HttpStatusCode status, WebRequest request) { + protected ResponseEntity handleHttpMessageNotWritable(HttpMessageNotWritableException exception, + HttpHeaders headers, + HttpStatusCode status, + WebRequest request) { try { - List path = ((JsonMappingException) exception.getCause()).getPath(); - JsonMappingException.Reference fieldReference = path.get(path.size() - 1); - JsonMappingException.Reference caseReference = path.get(path.size() - 3); - Field from = (Field) fieldReference.getFrom(); - Case useCase = (Case) caseReference.getFrom(); + Throwable cause = exception.getCause(); + if (!(cause instanceof JsonMappingException jme)) { + log.error("Received HttpMessageNotWritableException: {}", exception.getMessage(), exception); + return super.handleHttpMessageNotWritable(exception, headers, status, request); + } + + List path = jme.getPath(); + if (path.size() > 3) { + Object fieldFrom = path.getLast().getFrom(); + Object caseFrom = path.get(path.size() - 3).getFrom(); + + if (fieldFrom instanceof Field field && caseFrom instanceof Case useCase) { + log.debug("[{}] Could not parse value of field [{}], value [{}] | path={}", + useCase.getStringId(), field.getStringId(), field.getValue(), jme.getPathReference()); + } else { + log.error("JSON write failed: {} | path={}", + jme.getOriginalMessage(), jme.getPathReference(), jme); + } + } else { + log.error("JSON write failed: {} | path={}", + jme.getOriginalMessage(), jme.getPathReference(), jme); + } - log.error("[{}] Could not parse value of field [{}], value [{}]", useCase.getStringId(), from.getStringId(), from.getValue()); } catch (Exception e) { - log.warn("Unrecognized exception: ", e); + log.error("Unrecognized exception: ", e); } return super.handleHttpMessageNotWritable(exception, headers, status, request); } -} +} \ No newline at end of file