1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.codelibs.fess.mylasta.direction.sponsor;
17
18 import java.util.stream.Collectors;
19
20 import org.codelibs.fess.app.web.api.ApiResult;
21 import org.codelibs.fess.app.web.api.ApiResult.ApiErrorResponse;
22 import org.codelibs.fess.app.web.api.ApiResult.Status;
23 import org.dbflute.optional.OptionalThing;
24 import org.lastaflute.web.api.ApiFailureHook;
25 import org.lastaflute.web.api.ApiFailureResource;
26 import org.lastaflute.web.login.exception.LoginUnauthorizedException;
27 import org.lastaflute.web.response.ApiResponse;
28 import org.lastaflute.web.response.JsonResponse;
29
30
31
32
33 public class FessApiFailureHook implements ApiFailureHook {
34
35
36
37
38 protected static final int HTTP_BAD_REQUEST = 400;
39 protected static final int HTTP_UNAUTHORIZED = 401;
40
41
42
43
44 @Override
45 public ApiResponse handleValidationError(final ApiFailureResource resource) {
46 return asJson(createFailureBean(Status.BAD_REQUEST, createMessage(resource, null))).httpStatus(HTTP_BAD_REQUEST);
47 }
48
49 @Override
50 public ApiResponse handleApplicationException(final ApiFailureResource resource, final RuntimeException cause) {
51 if (cause instanceof LoginUnauthorizedException) {
52 return asJson(createFailureBean(Status.UNAUTHORIZED, "Unauthorized request.")).httpStatus(HTTP_UNAUTHORIZED);
53 }
54 return asJson(createFailureBean(Status.BAD_REQUEST, createMessage(resource, cause))).httpStatus(HTTP_BAD_REQUEST);
55 }
56
57
58
59
60 @Override
61 public OptionalThing<ApiResponse> handleClientException(final ApiFailureResource resource, final RuntimeException cause) {
62 return OptionalThing.empty();
63 }
64
65 @Override
66 public OptionalThing<ApiResponse> handleServerException(final ApiFailureResource resource, final Throwable cause) {
67 return OptionalThing.empty();
68 }
69
70
71
72
73 protected JsonResponse<ApiResult> asJson(final ApiResult bean) {
74 return new JsonResponse<>(bean);
75 }
76
77 protected ApiResult createFailureBean(final Status status, final String message) {
78 return new ApiErrorResponse().message(message).status(status).result();
79 }
80
81 protected String createMessage(final ApiFailureResource resource, final RuntimeException cause) {
82 if (!resource.getMessageList().isEmpty()) {
83 return resource.getMessageList().stream().collect(Collectors.joining(" "));
84 }
85 if (cause != null) {
86 return cause.getMessage();
87 }
88 return "Unknown error";
89 }
90
91 }