Skip to content

Commit a4a8706

Browse files
committed
refactor: Add all http errors to resources
1 parent 3a025fe commit a4a8706

File tree

7 files changed

+120
-32
lines changed

7 files changed

+120
-32
lines changed

hivemq-edge/src/main/java/com/hivemq/api/errors/HttpErrorFactory.java

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,10 @@ private HttpErrorFactory() {
4141
public static @NotNull InsufficientStorageError insufficientStorageError(final @Nullable String reason) {
4242
return InsufficientStorageError.builder()
4343
.type(type(InsufficientStorageError.class))
44-
.title("Insufficient Storage")
45-
.detail(reason == null ? "Insufficient Storage." : "Insufficient Storage: " + reason)
44+
.title(OpenAPIHttpError.HTTP_ERROR_507_TITLE.get())
45+
.detail(reason == null ?
46+
OpenAPIHttpError.HTTP_ERROR_507_DETAIL_DEFAULT.get() :
47+
OpenAPIHttpError.HTTP_ERROR_507_DETAIL_WITH_REASON.get(Map.of("reason", reason)))
4648
.status(HttpStatus.INSUFFICIENT_STORAGE_507)
4749
.build();
4850
}
@@ -67,8 +69,10 @@ private HttpErrorFactory() {
6769
final @NotNull String reason) {
6870
return InvalidQueryParameterError.builder()
6971
.type(type(InvalidQueryParameterError.class))
70-
.title("Query Parameter is Invalid")
71-
.detail("Query parameter '" + parameter + "' is invalid: " + reason)
72+
.title(OpenAPIHttpError.HTTP_ERROR_400_INVALID_QUERY_PARAMETER_TITLE.get())
73+
.detail(OpenAPIHttpError.HTTP_ERROR_400_INVALID_QUERY_PARAMETER_DETAIL.get(Map.of(
74+
"parameter", parameter,
75+
"reason", reason)))
7276
.parameter(parameter)
7377
.status(HttpStatus.BAD_REQUEST_400)
7478
.build();
@@ -78,26 +82,26 @@ private HttpErrorFactory() {
7882
final @NotNull String reason) {
7983
return PreconditionFailedError.builder()
8084
.type(type(PreconditionFailedError.class))
81-
.title("Precondition Failed")
82-
.detail("A precondition required for fulfilling the request was not fulfilled: " + reason)
85+
.title(OpenAPIHttpError.HTTP_ERROR_412_TITLE.get())
86+
.detail(OpenAPIHttpError.HTTP_ERROR_412_DETAIL.get(Map.of("reason", reason)))
8387
.status(HttpStatus.PRECONDITION_FAILED_412)
8488
.build();
8589
}
8690

8791
public static @NotNull RequestBodyMissingError requestBodyMissingError() {
8892
return RequestBodyMissingError.builder()
8993
.type(type(RequestBodyMissingError.class))
90-
.title("Required Request Body Missing")
91-
.detail("Required request body is missing.")
94+
.title(OpenAPIHttpError.HTTP_ERROR_400_REQUEST_BODY_MISSING_TITLE.get())
95+
.detail(OpenAPIHttpError.HTTP_ERROR_400_REQUEST_BODY_MISSING_DETAIL.get())
9296
.status(HttpStatus.BAD_REQUEST_400)
9397
.build();
9498
}
9599

96100
public static @NotNull RequestBodyParameterMissingError requestBodyParameterMissingError(final @NotNull String parameter) {
97101
return RequestBodyParameterMissingError.builder()
98102
.type(type(RequestBodyParameterMissingError.class))
99-
.title("Required Request Body Parameter Missing")
100-
.detail("Required request body parameter '" + parameter + "' is missing.")
103+
.title(OpenAPIHttpError.HTTP_ERROR_400_REQUEST_BODY_PARAMETER_MISSING_TITLE.getKey())
104+
.detail(OpenAPIHttpError.HTTP_ERROR_400_REQUEST_BODY_PARAMETER_MISSING_DETAIL.get(Map.of("parameter", parameter)))
101105
.parameter(parameter)
102106
.status(HttpStatus.BAD_REQUEST_400)
103107
.build();
@@ -106,17 +110,17 @@ private HttpErrorFactory() {
106110
public static @NotNull TemporaryNotAvailableError temporaryNotAvailableError() {
107111
return TemporaryNotAvailableError.builder()
108112
.type(type(TemporaryNotAvailableError.class))
109-
.title("Endpoint Temporarily not Available")
110-
.detail("The endpoint is temporarily not available, please try again later.")
113+
.title(OpenAPIHttpError.HTTP_ERROR_503_TITLE.get())
114+
.detail(OpenAPIHttpError.HTTP_ERROR_503_DETAIL.get())
111115
.status(HttpStatus.SERVICE_UNAVAILABLE_503)
112116
.build();
113117
}
114118

115119
public static @NotNull UrlParameterMissingError urlParameterMissingError(final @NotNull String parameter) {
116120
return UrlParameterMissingError.builder()
117121
.type(type(UrlParameterMissingError.class))
118-
.title("Required URL Parameter Missing")
119-
.detail("Required URL parameter '" + parameter + "' is missing.")
122+
.title(OpenAPIHttpError.HTTP_ERROR_400_URL_PARAMETER_MISSING_TITLE.get())
123+
.detail(OpenAPIHttpError.HTTP_ERROR_400_URL_PARAMETER_MISSING_DETAIL.get(Map.of("parameter", parameter)))
120124
.parameter(parameter)
121125
.status(HttpStatus.BAD_REQUEST_400)
122126
.build();

hivemq-edge/src/main/java/com/hivemq/common/i18n/LocaleContext.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,11 @@ public final class LocaleContext {
2626

2727
private static final ThreadLocal<Locale> THREAD_LOCAL_LOCALE = ThreadLocal.withInitial(() -> DEFAULT_LOCALE);
2828

29-
public static @NotNull Locale getCurrentLocale() {
29+
public static @NotNull Locale getLocale() {
3030
return THREAD_LOCAL_LOCALE.get();
3131
}
3232

33-
public static void setCurrentLocale(final @Nullable Locale locale) {
33+
public static void setLocale(final @Nullable Locale locale) {
3434
THREAD_LOCAL_LOCALE.set(locale == null ? DEFAULT_LOCALE : locale);
3535
}
3636
}

hivemq-edge/src/main/java/com/hivemq/common/i18n/OpenAPIErrorTemplate.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ private Configuration createConfiguration(final @NotNull Locale locale) {
7070
}
7171

7272
public @NotNull String get(final @NotNull I18nTemplate i18nTemplate, final @NotNull Map<String, Object> map) {
73-
final Locale locale = LocaleContext.getCurrentLocale();
73+
final Locale locale = LocaleContext.getLocale();
7474
Configuration configuration = configurationMap.get(locale.toString());
7575
if (configuration == null) {
7676
configuration = createConfiguration(locale);

hivemq-edge/src/main/java/com/hivemq/common/i18n/OpenAPIHttpError.java

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -21,17 +21,30 @@
2121
import java.util.Map;
2222

2323
public enum OpenAPIHttpError implements I18nTemplate {
24-
HTTP_ERROR_500_TITLE("http.error.500.title"),
25-
HTTP_ERROR_500_DETAIL_DEFAULT("http.error.500.detail.default"),
26-
HTTP_ERROR_500_DETAIL_WITH_REASON("http.error.500.detail.with.reason"),
24+
HTTP_ERROR_400_INVALID_QUERY_PARAMETER_DETAIL,
25+
HTTP_ERROR_400_INVALID_QUERY_PARAMETER_TITLE,
26+
HTTP_ERROR_400_REQUEST_BODY_MISSING_DETAIL,
27+
HTTP_ERROR_400_REQUEST_BODY_MISSING_TITLE,
28+
HTTP_ERROR_400_REQUEST_BODY_PARAMETER_MISSING_DETAIL,
29+
HTTP_ERROR_400_REQUEST_BODY_PARAMETER_MISSING_TITLE,
30+
HTTP_ERROR_400_URL_PARAMETER_MISSING_DETAIL,
31+
HTTP_ERROR_400_URL_PARAMETER_MISSING_TITLE,
32+
HTTP_ERROR_412_DETAIL,
33+
HTTP_ERROR_412_TITLE,
34+
HTTP_ERROR_500_DETAIL_DEFAULT,
35+
HTTP_ERROR_500_DETAIL_WITH_REASON,
36+
HTTP_ERROR_500_TITLE,
37+
HTTP_ERROR_503_DETAIL,
38+
HTTP_ERROR_503_TITLE,
39+
HTTP_ERROR_507_DETAIL_DEFAULT,
40+
HTTP_ERROR_507_DETAIL_WITH_REASON,
41+
HTTP_ERROR_507_TITLE,
2742
;
2843

2944
private static final String RESOURCE_NAME_PREFIX = "/templates/openapi-errors-";
3045
private static final String RESOURCE_NAME_SUFFIX = ".properties";
31-
private final @NotNull String key;
3246

33-
OpenAPIHttpError(final @NotNull String key) {
34-
this.key = key;
47+
OpenAPIHttpError() {
3548
}
3649

3750
public @NotNull String get() {
@@ -44,7 +57,7 @@ public enum OpenAPIHttpError implements I18nTemplate {
4457

4558
@Override
4659
public @NotNull String getKey() {
47-
return key;
60+
return name().toLowerCase().replace("_", ".");
4861
}
4962

5063
@Override
@@ -54,6 +67,6 @@ public enum OpenAPIHttpError implements I18nTemplate {
5467

5568
@Override
5669
public @NotNull String getResourceName() {
57-
return RESOURCE_NAME_PREFIX + LocaleContext.getCurrentLocale() + RESOURCE_NAME_SUFFIX;
70+
return RESOURCE_NAME_PREFIX + LocaleContext.getLocale() + RESOURCE_NAME_SUFFIX;
5871
}
5972
}
Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,18 @@
1-
http.error.500.title=Internal Server Error
1+
http.error.400.invalid.query.parameter.detail=Query parameter '${parameter}' is invalid: ${reason}
2+
http.error.400.invalid.query.parameter.title=Query Parameter is Invalid
3+
http.error.400.request.body.missing.detail=Required request body is missing.
4+
http.error.400.request.body.missing.title=Required Request Body Missing
5+
http.error.400.request.body.parameter.missing.detail=Required request body parameter '${parameter}' is missing.
6+
http.error.400.request.body.parameter.missing.title=Required Request Body Parameter Missing
7+
http.error.400.url.parameter.missing.detail=Required URL parameter '${parameter}' is missing.
8+
http.error.400.url.parameter.missing.title=Required URL Parameter Missing
9+
http.error.412.detail=A precondition required for fulfilling the request was not fulfilled: ${reason}
10+
http.error.412.title=Precondition Failed
211
http.error.500.detail.default=An unexpected error occurred, check the logs.
312
http.error.500.detail.with.reason=An unexpected error occurred: ${reason}
13+
http.error.500.title=Internal Server Error
14+
http.error.503.detail=The endpoint is temporarily not available, please try again later.
15+
http.error.503.title=Endpoint Temporarily not Available
16+
http.error.507.detail.default=Insufficient Storage.
17+
http.error.507.detail.with.reason=Insufficient Storage: ${reason}
18+
http.error.507.title=Insufficient Storage

hivemq-edge/src/test/java/com/hivemq/common/i18n/OpenAPIErrorTemplateTest.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,15 @@
1616

1717
package com.hivemq.common.i18n;
1818

19-
import org.junit.Test;
19+
20+
import org.junit.jupiter.api.Test;
2021

2122
import static org.assertj.core.api.Assertions.assertThat;
2223

2324
public class OpenAPIErrorTemplateTest {
2425
@Test
2526
public void whenLocaleIsNull_thenUseDefaultLocale() {
26-
LocaleContext.setCurrentLocale(null);
27-
assertThat(LocaleContext.getCurrentLocale()).isEqualTo(LocaleContext.DEFAULT_LOCALE);
27+
LocaleContext.setLocale(null);
28+
assertThat(LocaleContext.getLocale()).isEqualTo(LocaleContext.DEFAULT_LOCALE);
2829
}
2930
}

hivemq-edge/src/test/java/com/hivemq/common/i18n/OpenAPIHttpErrorTest.java

Lines changed: 58 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,27 +16,82 @@
1616

1717
package com.hivemq.common.i18n;
1818

19-
import org.junit.Test;
19+
import org.junit.jupiter.api.AfterEach;
20+
import org.junit.jupiter.api.BeforeEach;
21+
import org.junit.jupiter.api.Test;
2022

2123
import java.util.Locale;
2224
import java.util.Map;
2325

2426
import static org.assertj.core.api.Assertions.assertThat;
2527

2628
public class OpenAPIHttpErrorTest {
29+
@BeforeEach
30+
public void setUp() {
31+
LocaleContext.setLocale(Locale.US);
32+
}
33+
34+
@AfterEach
35+
public void tearDown() {
36+
LocaleContext.setLocale(LocaleContext.DEFAULT_LOCALE);
37+
}
38+
39+
@Test
40+
public void whenLocaleIsEnUS_thenHttpError400ShouldWork() {
41+
assertThat(OpenAPIHttpError.HTTP_ERROR_400_INVALID_QUERY_PARAMETER_TITLE.get()).isEqualTo(
42+
"Query Parameter is Invalid");
43+
assertThat(OpenAPIHttpError.HTTP_ERROR_400_INVALID_QUERY_PARAMETER_DETAIL.get(Map.of("parameter",
44+
"p1",
45+
"reason",
46+
"test."))).isEqualTo("Query parameter 'p1' is invalid: test.");
47+
assertThat(OpenAPIHttpError.HTTP_ERROR_400_REQUEST_BODY_MISSING_TITLE.get()).isEqualTo(
48+
"Required Request Body Missing");
49+
assertThat(OpenAPIHttpError.HTTP_ERROR_400_REQUEST_BODY_MISSING_DETAIL.get()).isEqualTo(
50+
"Required request body is missing.");
51+
assertThat(OpenAPIHttpError.HTTP_ERROR_400_REQUEST_BODY_PARAMETER_MISSING_TITLE.get()).isEqualTo(
52+
"Required Request Body Parameter Missing");
53+
assertThat(OpenAPIHttpError.HTTP_ERROR_400_REQUEST_BODY_PARAMETER_MISSING_DETAIL.get(Map.of("parameter",
54+
"p1"))).isEqualTo("Required request body parameter 'p1' is missing.");
55+
assertThat(OpenAPIHttpError.HTTP_ERROR_400_URL_PARAMETER_MISSING_TITLE.get()).isEqualTo(
56+
"Required URL Parameter Missing");
57+
assertThat(OpenAPIHttpError.HTTP_ERROR_400_URL_PARAMETER_MISSING_DETAIL.get(Map.of("parameter",
58+
"p1"))).isEqualTo("Required URL parameter 'p1' is missing.");
59+
}
60+
61+
@Test
62+
public void whenLocaleIsEnUS_thenHttpError412ShouldWork() {
63+
assertThat(OpenAPIHttpError.HTTP_ERROR_412_TITLE.get()).isEqualTo("Precondition Failed");
64+
assertThat(OpenAPIHttpError.HTTP_ERROR_412_DETAIL.get(Map.of("reason", "test."))).isEqualTo(
65+
"A precondition required for fulfilling the request was not fulfilled: test.");
66+
}
67+
2768
@Test
2869
public void whenLocaleIsEnUS_thenHttpError500ShouldWork() {
29-
LocaleContext.setCurrentLocale(Locale.US);
3070
assertThat(OpenAPIHttpError.HTTP_ERROR_500_TITLE.get()).isEqualTo("Internal Server Error");
3171
assertThat(OpenAPIHttpError.HTTP_ERROR_500_DETAIL_DEFAULT.get()).isEqualTo(
3272
"An unexpected error occurred, check the logs.");
3373
assertThat(OpenAPIHttpError.HTTP_ERROR_500_DETAIL_WITH_REASON.get(Map.of("reason", "test."))).isEqualTo(
3474
"An unexpected error occurred: test.");
3575
}
3676

77+
@Test
78+
public void whenLocaleIsEnUS_thenHttpError503ShouldWork() {
79+
assertThat(OpenAPIHttpError.HTTP_ERROR_503_TITLE.get()).isEqualTo("Endpoint Temporarily not Available");
80+
assertThat(OpenAPIHttpError.HTTP_ERROR_503_DETAIL.get()).isEqualTo(
81+
"The endpoint is temporarily not available, please try again later.");
82+
}
83+
84+
@Test
85+
public void whenLocaleIsEnUS_thenHttpError507ShouldWork() {
86+
assertThat(OpenAPIHttpError.HTTP_ERROR_507_TITLE.get()).isEqualTo("Insufficient Storage");
87+
assertThat(OpenAPIHttpError.HTTP_ERROR_507_DETAIL_DEFAULT.get()).isEqualTo("Insufficient Storage.");
88+
assertThat(OpenAPIHttpError.HTTP_ERROR_507_DETAIL_WITH_REASON.get(Map.of("reason", "test."))).isEqualTo(
89+
"Insufficient Storage: test.");
90+
}
91+
3792
@Test
3893
public void whenLocaleIsEnGB_thenHttpError500ShouldFail() {
39-
LocaleContext.setCurrentLocale(Locale.UK);
94+
LocaleContext.setLocale(Locale.UK);
4095
assertThat(OpenAPIHttpError.HTTP_ERROR_500_TITLE.get()).isEqualTo(
4196
"Error: Template http.error.500.title for en_GB could not be loaded.");
4297
assertThat(OpenAPIHttpError.HTTP_ERROR_500_DETAIL_DEFAULT.get()).isEqualTo(

0 commit comments

Comments
 (0)