1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.jclouds.http.handlers;
20
21 import javax.inject.Singleton;
22
23 import org.jclouds.http.HttpCommand;
24 import org.jclouds.http.HttpErrorHandler;
25 import org.jclouds.http.HttpResponse;
26 import org.jclouds.http.annotation.ClientError;
27 import org.jclouds.http.annotation.Redirection;
28 import org.jclouds.http.annotation.ServerError;
29
30 import com.google.common.annotations.VisibleForTesting;
31 import com.google.inject.Inject;
32
33
34
35
36
37
38
39 @Singleton
40 public class DelegatingErrorHandler implements HttpErrorHandler {
41
42 @VisibleForTesting
43 @Inject(optional = true)
44 @Redirection
45 HttpErrorHandler redirectionHandler;
46
47 @VisibleForTesting
48 @Inject(optional = true)
49 @ClientError
50 HttpErrorHandler clientErrorHandler;
51
52 @VisibleForTesting
53 @Inject(optional = true)
54 @ServerError
55 HttpErrorHandler serverErrorHandler;
56
57 @Inject
58 DelegatingErrorHandler() {
59 this.redirectionHandler = new CloseContentAndSetExceptionErrorHandler();
60 this.clientErrorHandler = redirectionHandler;
61 this.serverErrorHandler = redirectionHandler;
62 }
63
64 public void handleError(HttpCommand command, HttpResponse response) {
65 int statusCode = response.getStatusCode();
66 if (statusCode >= 300 && statusCode < 400) {
67 getRedirectionHandler().handleError(command, response);
68 } else if (statusCode >= 400 && statusCode < 500) {
69 getClientErrorHandler().handleError(command, response);
70 } else if (statusCode >= 500) {
71 getServerErrorHandler().handleError(command, response);
72 }
73 }
74
75 public HttpErrorHandler getRedirectionHandler() {
76 return redirectionHandler;
77 }
78
79 public HttpErrorHandler getClientErrorHandler() {
80 return clientErrorHandler;
81 }
82
83 public HttpErrorHandler getServerErrorHandler() {
84 return serverErrorHandler;
85 }
86 }