1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 package org.apache.hc.core5.http.impl;
28
29 import org.apache.hc.core5.annotation.Internal;
30 import org.apache.hc.core5.http.EntityDetails;
31 import org.apache.hc.core5.http.HttpException;
32 import org.apache.hc.core5.http.HttpResponse;
33 import org.apache.hc.core5.http.HttpStatus;
34 import org.apache.hc.core5.http.MethodNotSupportedException;
35 import org.apache.hc.core5.http.NotImplementedException;
36 import org.apache.hc.core5.http.ProtocolException;
37 import org.apache.hc.core5.http.RequestHeaderFieldsTooLargeException;
38 import org.apache.hc.core5.http.UnsupportedHttpVersionException;
39
40
41
42
43
44
45 @Internal
46 public class ServerSupport {
47
48 public static void validateResponse(
49 final HttpResponse response,
50 final EntityDetails responseEntityDetails) throws HttpException {
51 final int status = response.getCode();
52 switch (status) {
53 case HttpStatus.SC_NO_CONTENT:
54 case HttpStatus.SC_NOT_MODIFIED:
55 if (responseEntityDetails != null) {
56 throw new HttpException("Response " + status + " must not enclose an entity");
57 }
58 }
59 }
60
61 public static String toErrorMessage(final Exception ex) {
62 final String message = ex.getMessage();
63 return message != null ? message : ex.toString();
64 }
65
66 public static int toStatusCode(final Exception ex) {
67 final int code;
68 if (ex instanceof MethodNotSupportedException) {
69 code = HttpStatus.SC_NOT_IMPLEMENTED;
70 } else if (ex instanceof UnsupportedHttpVersionException) {
71 code = HttpStatus.SC_HTTP_VERSION_NOT_SUPPORTED;
72 } else if (ex instanceof NotImplementedException) {
73 code = HttpStatus.SC_NOT_IMPLEMENTED;
74 } else if (ex instanceof RequestHeaderFieldsTooLargeException) {
75 code = HttpStatus.SC_REQUEST_HEADER_FIELDS_TOO_LARGE;
76 } else if (ex instanceof ProtocolException) {
77 code = HttpStatus.SC_BAD_REQUEST;
78 } else {
79 code = HttpStatus.SC_INTERNAL_SERVER_ERROR;
80 }
81 return code;
82 }
83
84 }
85