Skip to content

Commit a53eabb

Browse files
committed
updated error handling to provide http status on exception
1 parent 65acbc9 commit a53eabb

File tree

8 files changed

+123
-21
lines changed

8 files changed

+123
-21
lines changed

src/main/java/com/postmarkapp/postmark/client/HttpClientErrorHandler.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,22 +25,22 @@ public HttpClientErrorHandler(DataHandler dataHandler) {
2525
*
2626
* @throws java.io.IOException in case invalid HTTP response is returned.
2727
*/
28-
public PostmarkException throwErrorBasedOnStatusCode(Integer statusCode, String message) throws IOException {
28+
public PostmarkHttpException throwErrorBasedOnStatusCode(Integer statusCode, String message) throws IOException {
2929
switch (statusCode) {
3030
case 401:
31-
return new InvalidAPIKeyException(postmarkErrorFromResponse(message));
31+
return new InvalidAPIKeyException(postmarkErrorFromResponse(message), statusCode);
3232

3333
case 408:
34-
return new TimeoutException(message);
34+
return new TimeoutException(message, statusCode);
3535

3636
case 422:
37-
return new InvalidMessageException(postmarkErrorFromResponse(message));
37+
return new InvalidMessageException(postmarkErrorFromResponse(message), statusCode);
3838

3939
case 500:
40-
return new InternalServerException(message);
40+
return new InternalServerException(message, statusCode);
4141

4242
default:
43-
return new UnknownException(message);
43+
return new UnknownException(message, statusCode);
4444

4545
}
4646
}

src/main/java/com/postmarkapp/postmark/client/exception/InternalServerException.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
* Group of classes that identifies main Postmark API exceptions.
55
*/
66

7-
public class InternalServerException extends PostmarkException {
8-
public InternalServerException(String message) {
9-
super(message);
7+
public class InternalServerException extends PostmarkHttpException {
8+
public InternalServerException(String message, Integer statusCode) {
9+
super(message, statusCode);
1010
}
1111
}

src/main/java/com/postmarkapp/postmark/client/exception/InvalidAPIKeyException.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@
55
/**
66
* Group of classes that identifies main Postmark API exceptions.
77
*/
8-
public class InvalidAPIKeyException extends PostmarkException {
9-
public InvalidAPIKeyException(PostmarkError error) {
10-
super(error.getMessage(), error.getErrorCode());
8+
public class InvalidAPIKeyException extends PostmarkHttpException {
9+
public InvalidAPIKeyException(PostmarkError error, Integer statusCode) {
10+
super(error.getMessage(), error.getErrorCode(), statusCode);
1111
}
1212
}

src/main/java/com/postmarkapp/postmark/client/exception/InvalidMessageException.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@
66
* Group of classes that identifies main Postmark API exceptions.
77
*/
88

9-
public class InvalidMessageException extends PostmarkException {
10-
public InvalidMessageException(PostmarkError error) {
11-
super(error.getMessage(), error.getErrorCode());
9+
public class InvalidMessageException extends PostmarkHttpException {
10+
public InvalidMessageException(PostmarkError error, Integer statusCode) {
11+
super(error.getMessage(), error.getErrorCode(), statusCode);
1212
}
1313
}
1414

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package com.postmarkapp.postmark.client.exception;
2+
3+
import com.postmarkapp.postmark.client.data.model.PostmarkError;
4+
5+
/**
6+
* Group of classes that identifies main Postmark API exceptions.
7+
*/
8+
9+
public class PostmarkHttpException extends PostmarkException {
10+
private Integer statusCode;
11+
public Integer getStatusCode() {
12+
return statusCode;
13+
}
14+
public PostmarkHttpException(String message, Integer statusCode) {
15+
super(message);
16+
this.statusCode = statusCode;
17+
}
18+
public PostmarkHttpException(String message, Integer errorCode, Integer statusCode) {
19+
super(message, errorCode);
20+
this.statusCode = statusCode;
21+
}
22+
}

src/main/java/com/postmarkapp/postmark/client/exception/TimeoutException.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
* Group of classes that identifies main Postmark API exceptions.
55
*/
66

7-
public class TimeoutException extends PostmarkException {
8-
public TimeoutException(String message) {
9-
super(message);
7+
public class TimeoutException extends PostmarkHttpException {
8+
public TimeoutException(String message, Integer statusCode) {
9+
super(message, statusCode);
1010
}
1111
}

src/main/java/com/postmarkapp/postmark/client/exception/UnknownException.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@
44
* Group of classes that identifies main Postmark API exceptions.
55
*/
66

7-
public class UnknownException extends PostmarkException {
8-
public UnknownException(String message) {
9-
super(message);
7+
public class UnknownException extends PostmarkHttpException {
8+
public UnknownException(String message, Integer statusCode) {
9+
super(message, statusCode);
1010
}
1111

1212
}
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
package unit.client;
2+
3+
import com.postmarkapp.postmark.client.HttpClientErrorHandler;
4+
import com.postmarkapp.postmark.client.data.parser.DataHandler;
5+
import com.postmarkapp.postmark.client.exception.*;
6+
import org.junit.jupiter.api.Test;
7+
8+
import java.io.IOException;
9+
import java.util.HashMap;
10+
11+
import static org.junit.jupiter.api.Assertions.assertEquals;
12+
import static org.junit.jupiter.api.Assertions.assertNotNull;
13+
14+
15+
public class HttpClientErrorHandlerTest {
16+
17+
String getStringHashMap() {
18+
19+
return "{\n" +
20+
" \"ErrorCode\" : \"10\",\n" +
21+
" \"Message\" : \"ErrorMessage\"\n" +
22+
"}";
23+
}
24+
25+
@Test
26+
void throw401error() throws IOException, PostmarkException {
27+
int statusCode = 401;
28+
HttpClientErrorHandler errorHandler = new HttpClientErrorHandler(new DataHandler(false));
29+
InvalidAPIKeyException exception = (InvalidAPIKeyException) errorHandler.throwErrorBasedOnStatusCode(statusCode, getStringHashMap());
30+
31+
assertEquals(exception.getErrorCode(),10);
32+
assertEquals(exception.getMessage(),"ErrorMessage");
33+
assertEquals(exception.getStatusCode(), statusCode);
34+
}
35+
36+
@Test
37+
void throw408error() throws IOException, PostmarkException {
38+
int statusCode = 408;
39+
HttpClientErrorHandler errorHandler = new HttpClientErrorHandler(new DataHandler(false));
40+
TimeoutException exception = (TimeoutException) errorHandler.throwErrorBasedOnStatusCode(statusCode, "message");
41+
42+
assertEquals(exception.getErrorCode(),null);
43+
assertEquals(exception.getMessage(),"message");
44+
assertEquals(exception.getStatusCode(), statusCode);
45+
}
46+
47+
@Test
48+
void throw422error() throws IOException, PostmarkException {
49+
int statusCode = 422;
50+
HttpClientErrorHandler errorHandler = new HttpClientErrorHandler(new DataHandler(false));
51+
InvalidMessageException exception = (InvalidMessageException) errorHandler.throwErrorBasedOnStatusCode(statusCode, getStringHashMap());
52+
53+
assertEquals(exception.getErrorCode(),10);
54+
assertEquals(exception.getMessage(),"ErrorMessage");
55+
assertEquals(exception.getStatusCode(), statusCode);
56+
}
57+
58+
@Test
59+
void throw500error() throws IOException, PostmarkException {
60+
int statusCode = 500;
61+
HttpClientErrorHandler errorHandler = new HttpClientErrorHandler(new DataHandler(false));
62+
InternalServerException exception = (InternalServerException) errorHandler.throwErrorBasedOnStatusCode(statusCode, "message");
63+
64+
assertEquals(exception.getErrorCode(),null);
65+
assertEquals(exception.getMessage(),"message");
66+
assertEquals(exception.getStatusCode(), statusCode);
67+
}
68+
69+
@Test
70+
void throw501error() throws IOException, PostmarkException {
71+
int statusCode = 501;
72+
HttpClientErrorHandler errorHandler = new HttpClientErrorHandler(new DataHandler(false));
73+
UnknownException exception = (UnknownException) errorHandler.throwErrorBasedOnStatusCode(statusCode, "message");
74+
75+
assertEquals(exception.getErrorCode(),null);
76+
assertEquals(exception.getMessage(),"message");
77+
assertEquals(exception.getStatusCode(), statusCode);
78+
}
79+
80+
}

0 commit comments

Comments
 (0)