1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.syncope.common.keymaster.client.self;
20
21 import java.security.AccessControlException;
22 import javax.ws.rs.BadRequestException;
23 import javax.ws.rs.ForbiddenException;
24 import javax.ws.rs.NotFoundException;
25 import javax.ws.rs.core.Response;
26 import javax.ws.rs.ext.Provider;
27 import javax.xml.ws.WebServiceException;
28 import org.apache.commons.lang3.StringUtils;
29 import org.apache.cxf.jaxrs.client.ResponseExceptionMapper;
30 import org.apache.syncope.common.keymaster.client.api.KeymasterException;
31 import org.slf4j.Logger;
32 import org.slf4j.LoggerFactory;
33
34 @Provider
35 public class SelfKeymasterClientExceptionMapper implements ResponseExceptionMapper<Exception> {
36
37 private static final Logger LOG = LoggerFactory.getLogger(SelfKeymasterClientExceptionMapper.class);
38
39 @Override
40 public Exception fromResponse(final Response response) {
41 int statusCode = response.getStatus();
42 String message = response.readEntity(String.class);
43
44 Exception ex;
45 if (statusCode == Response.Status.UNAUTHORIZED.getStatusCode()) {
46
47 ex = new AccessControlException(StringUtils.isBlank(message)
48 ? "Remote unauthorized exception"
49 : message);
50 } else if (statusCode == Response.Status.FORBIDDEN.getStatusCode()) {
51
52 ex = new ForbiddenException(StringUtils.isBlank(message)
53 ? "Remote forbidden exception"
54 : message);
55 } else if (statusCode == Response.Status.NOT_FOUND.getStatusCode()) {
56
57 ex = StringUtils.isBlank(message)
58 ? new NotFoundException()
59 : new NotFoundException(message);
60 } else if (statusCode == Response.Status.BAD_REQUEST.getStatusCode()) {
61
62 ex = StringUtils.isBlank(message)
63 ? new BadRequestException()
64 : message.contains(KeymasterException.class.getSimpleName())
65 ? new KeymasterException(message)
66 : new BadRequestException(message);
67 } else {
68
69 ex = new WebServiceException(String.format("Remote exception with status code: %s",
70 Response.Status.fromStatusCode(statusCode).name()));
71 }
72 LOG.error("Exception thrown", ex);
73 return ex;
74 }
75 }