1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package eu.ehri.extension.errors;
21
22 import com.fasterxml.jackson.core.JsonProcessingException;
23 import com.fasterxml.jackson.databind.ObjectMapper;
24 import com.google.common.base.Charsets;
25 import com.google.common.collect.ImmutableList;
26 import com.google.common.collect.ImmutableMap;
27
28 import javax.ws.rs.WebApplicationException;
29 import javax.ws.rs.core.Response;
30 import java.util.Map;
31
32 public class InvalidJsonError extends WebApplicationException {
33 private static final ObjectMapper mapper = new ObjectMapper();
34
35 public InvalidJsonError(JsonProcessingException cause) {
36 super(Response.status(Response.Status.BAD_REQUEST)
37 .entity(errorToJson(cause).getBytes(Charsets.UTF_8)).build());
38 }
39
40 private static String errorToJson(JsonProcessingException cause) {
41 try {
42 Map<String, Object> error = ImmutableMap.of(
43 "message", cause.getOriginalMessage(),
44 "location", ImmutableList.of(ImmutableMap.of(
45 "line", cause.getLocation().getLineNr(),
46 "column", cause.getLocation().getColumnNr()
47 )),
48 "type", "JsonError"
49 );
50 return mapper.writeValueAsString(
51 ImmutableMap.of("errors", ImmutableList.of(error))
52 );
53 } catch (JsonProcessingException err) {
54 throw new RuntimeException(err);
55 }
56 }
57 }