Skip to content

Commit b16e82e

Browse files
authored
Merge pull request #213 from warownia1/http-client
Http client updates
2 parents d26bb89 + 9500c37 commit b16e82e

File tree

3 files changed

+136
-1
lines changed

3 files changed

+136
-1
lines changed
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package javajs.http;
2+
3+
import java.io.IOException;
4+
5+
/**
6+
* A generic class for exceptions resulting from the HTTP exchange.
7+
*/
8+
public class ClientProtocolException extends IOException {
9+
10+
private static final long serialVersionUID = 2500725227517025772L;
11+
12+
public ClientProtocolException() {
13+
super();
14+
}
15+
16+
public ClientProtocolException(String message) {
17+
super(message);
18+
}
19+
20+
public ClientProtocolException(Throwable cause) {
21+
super(cause);
22+
}
23+
24+
public ClientProtocolException(String message, Throwable cause) {
25+
super(message, cause);
26+
}
27+
28+
}

sources/net.sf.j2s.java.core/src/javajs/http/HttpClient.java

Lines changed: 63 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package javajs.http;
22

3+
import java.io.ByteArrayInputStream;
34
import java.io.Closeable;
45
import java.io.File;
56
import java.io.IOException;
@@ -88,7 +89,10 @@ public interface HttpRequest {
8889
* @param fileName server-side fileName to associate with this file
8990
* @return
9091
*/
91-
public HttpRequest addFilePart(String name, String data, String contentType, String fileName);
92+
public default HttpRequest addFilePart(String name, String data, String contentType, String fileName) {
93+
var stream = new ByteArrayInputStream(data.getBytes());
94+
return addFilePart(name, stream, contentType, fileName);
95+
}
9296

9397
/**
9498
* Add a file-type multipart/form-data derived from a File object, using
@@ -179,6 +183,64 @@ public interface HttpResponse extends Closeable {
179183
*/
180184
public int getStatusCode();
181185

186+
/**
187+
* Get the reason phrase for the response code.
188+
* Implementations should use the reason returned by the server.
189+
* Default implementation uses phrases defined by RFC 2616 and RFC 4918
190+
*
191+
* @return status line reason phrase
192+
*/
193+
public default String getReasonPhrase() {
194+
switch (getStatusCode()) {
195+
case 100: return "Continue";
196+
case 101: return "Switching Protocols";
197+
case 200: return "OK";
198+
case 201: return "Created";
199+
case 202: return "Accepted";
200+
case 203: return "Non-Authoritative Information";
201+
case 204: return "No Content";
202+
case 205: return "Reset Content";
203+
case 206: return "Partial Content";
204+
case 207: return "Multi-status";
205+
case 300: return "Multiple Choices";
206+
case 301: return "Moved Permanently";
207+
case 302: return "Found";
208+
case 303: return "See Other";
209+
case 304: return "Not Modified";
210+
case 305: return "Use Proxy";
211+
case 307: return "Temporary Redirect";
212+
case 400: return "Bad Request";
213+
case 401: return "Unauthorized";
214+
case 402: return "Payment Required";
215+
case 403: return "Forbidden";
216+
case 404: return "Not Found";
217+
case 405: return "Method Not Allowed";
218+
case 406: return "Not Acceptable";
219+
case 407: return "Proxy Authentication Required";
220+
case 408: return "Request Timeout";
221+
case 409: return "Conflict";
222+
case 410: return "Gone";
223+
case 411: return "Length Required";
224+
case 412: return "Precondition Failed";
225+
case 413: return "Request Entity Too Large";
226+
case 414: return "Request-URI Too Long";
227+
case 415: return "Unsupported Media Type";
228+
case 416: return "Requested Range Not Satisfiable";
229+
case 417: return "Expectation Failed";
230+
case 422: return "Unprocessable Entity";
231+
case 423: return "Locked";
232+
case 424: return "Failed Dependency";
233+
case 500: return "Internal Server Error";
234+
case 501: return "Not Implemented";
235+
case 502: return "Bad Gateway";
236+
case 503: return "Service Unavailable";
237+
case 504: return "Gateway Timeout";
238+
case 505: return "HTTP Version Not Supported";
239+
case 507: return "Insufficient Storage";
240+
default: return "";
241+
}
242+
}
243+
182244
/**
183245
* Get the response headers, combining same-name headers with commas, preserving
184246
* order, as per RFC 2616
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package javajs.http;
2+
3+
/**
4+
* Exception that can be raised by the application to indicate
5+
* a non 2xx server response. The http client will not raise
6+
* this exception implicitly. A typical use case is to throw
7+
* this exception if the response status code indicate failure.
8+
* The status code and the reason phrase should be populated from
9+
* the {@link HttpClient.HttpResponse#getStatusCode()} and
10+
* {@link HttpClient.HttpResponse#getReasonPhrase()} respectively.
11+
*/
12+
public class HttpResponseException extends ClientProtocolException {
13+
14+
private static final long serialVersionUID = -8481868921105838666L;
15+
16+
private final int statusCode;
17+
private final String reasonPhrase;
18+
19+
public HttpResponseException(int statusCode, String reasonPhrase, String message) {
20+
super(message);
21+
this.statusCode = statusCode;
22+
this.reasonPhrase = reasonPhrase;
23+
}
24+
25+
public HttpResponseException(int statusCode, String reasonPhrase) {
26+
this(statusCode, reasonPhrase, String.format("%d %s", statusCode, reasonPhrase));
27+
}
28+
29+
/**
30+
* Get status code of the response which caused this exception.
31+
*
32+
* @return status code
33+
*/
34+
public int getStatusCode() {
35+
return statusCode;
36+
}
37+
38+
/**
39+
* Get reason phrase complementing the error's status code.
40+
*/
41+
public String getReasonPhrase() {
42+
return reasonPhrase;
43+
}
44+
45+
}

0 commit comments

Comments
 (0)