Skip to content

Commit 6f86da3

Browse files
committed
Release 1.0.2
1 parent d96b56f commit 6f86da3

13 files changed

+62
-46
lines changed

CHANGELOG.md

+6
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,11 @@ The format is based on _[Keep a Changelog][keepachangelog]_, and this project
66
adheres to _[Semantic Versioning][semver]_.
77

88

9+
## [1.0.2] (released: 2022-08-28)
10+
### Added
11+
- Non-English locale date support.
12+
- JDK 17 support.
13+
914
## [1.0.1] (released: 2022-06-20)
1015

1116
### Added
@@ -25,6 +30,7 @@ adheres to _[Semantic Versioning][semver]_.
2530
- Add Import a list of bounces from CSV file API
2631

2732

33+
[1.0.2]: https://github.com/mailgun/mailgun-java/compare/release/1.0.1...release/1.0.2
2834
[1.0.1]: https://github.com/mailgun/mailgun-java/compare/release/1.0.0...release/1.0.1
2935

3036

README.md

+3-3
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ Add the following to your `pom.xml`:
7676
<dependency>
7777
<groupId>com.mailgun</groupId>
7878
<artifactId>mailgun-java</artifactId>
79-
<version>1.0.0</version>
79+
<version>1.0.2</version>
8080
</dependency>
8181
...
8282
</dependencies>
@@ -85,14 +85,14 @@ Add the following to your `pom.xml`:
8585
Gradle Groovy DSL .
8686

8787
```xml
88-
implementation 'com.mailgun:mailgun-java:1.0.0'
88+
implementation 'com.mailgun:mailgun-java:1.0.2'
8989
```
9090

9191

9292

9393
### Authentication
9494

95-
When you [Sing up](https://signup.mailgun.com/new/signup), Mailgun generates a primary account API key.
95+
When you [Sign up](https://signup.mailgun.com/new/signup), Mailgun generates a primary account API key.
9696

9797
To view your primary account API key in the Mailgun dashboard, click on Settings on the left-hand nav in the Mailgun dashboard and then API Keys and click on the eye icon next to [API_KEYS][api_keys].
9898

pom.xml

+3-3
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
<groupId>com.mailgun</groupId>
88
<artifactId>mailgun-java</artifactId>
9-
<version>1.0.1</version>
9+
<version>1.0.2</version>
1010
<packaging>jar</packaging>
1111

1212
<name>${project.groupId}:${project.artifactId}</name>
@@ -20,14 +20,14 @@
2020
<maven.compiler.target>1.8</maven.compiler.target>
2121
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
2222

23-
<feign-version>11.8</feign-version>
23+
<feign-version>11.9.1</feign-version>
2424
<feign-form-version>3.8.0</feign-form-version>
2525
<slf4j.version>1.7.36</slf4j.version>
2626
<jackson.version>2.13.3</jackson.version>
2727
<commons-lang3.version>3.12.0</commons-lang3.version>
2828
<commons-collections4.version>4.4</commons-collections4.version>
2929
<lombok.version>1.18.24</lombok.version>
30-
<junit-jupiter.version>5.8.2</junit-jupiter.version>
30+
<junit-jupiter.version>5.9.0</junit-jupiter.version>
3131
<wiremock.version>2.27.2</wiremock.version>
3232
<maven.compiler.plugin.version>3.8.1</maven.compiler.plugin.version>
3333
</properties>

src/main/java/com/mailgun/api/MailgunApi.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
public interface MailgunApi {
66

7-
default ApiVersion getApiVersion() {
7+
static ApiVersion getApiVersion() {
88
return ApiVersion.V_3;
99
}
1010

src/main/java/com/mailgun/api/v3/MailgunStoreMessagesApi.java

+1-2
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,7 @@
2121
@Headers("Accept: application/json")
2222
public interface MailgunStoreMessagesApi extends MailgunApi {
2323

24-
@Override
25-
default ApiVersion getApiVersion() {
24+
static ApiVersion getApiVersion() {
2625
throw new UnsupportedOperationException("Please use 'MailgunClient.config(storedMessageUrl, PRIVATE_API_KEY)"
2726
+ ".createApiWithAbsoluteUrl(MailgunStoreMessagesApi.class)' configuration for this method");
2827
}

src/main/java/com/mailgun/api/v4/MailgunEmailVerificationApi.java

+1-2
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,7 @@
3333
*/
3434
public interface MailgunEmailVerificationApi extends MailgunApi {
3535

36-
@Override
37-
default ApiVersion getApiVersion() {
36+
static ApiVersion getApiVersion() {
3837
return ApiVersion.V_4;
3938
}
4039

src/main/java/com/mailgun/api/v4/MailgunSeedListApi.java

+1-2
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,7 @@
2929
*/
3030
public interface MailgunSeedListApi extends MailgunApi {
3131

32-
@Override
33-
default ApiVersion getApiVersion() {
32+
static ApiVersion getApiVersion() {
3433
return ApiVersion.V_4;
3534
}
3635

src/main/java/com/mailgun/util/DateTimeUtil.java

+5-2
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
import java.time.ZonedDateTime;
77
import java.time.format.DateTimeFormatter;
8+
import java.util.Locale;
89

910
import static com.mailgun.util.Constants.RFC_2822_DATE_TIME_PATTERN_TIME_ZONE_NAME_DAY_OCTAL_LITERAL;
1011
import static com.mailgun.util.Constants.RFC_2822_DATE_TIME_PATTERN_TIME_ZONE_NUMERIC;
@@ -15,8 +16,10 @@ public class DateTimeUtil {
1516

1617
private static final String UNABLE_TO_FORMAT_PROVIDED_ZONED_DATE_TIME = "Unable to format provided ZonedDateTime";
1718

18-
private static final DateTimeFormatter FORMATTER_DATE_TIME_PATTERN_TIME_ZONE = DateTimeFormatter.ofPattern(RFC_2822_DATE_TIME_PATTERN_TIME_ZONE_NUMERIC);
19-
private static final DateTimeFormatter FORMATTER_DATE_TIME_TIME_ZONE_NAME_DAY = DateTimeFormatter.ofPattern(RFC_2822_DATE_TIME_PATTERN_TIME_ZONE_NAME_DAY_OCTAL_LITERAL);
19+
private static final DateTimeFormatter FORMATTER_DATE_TIME_PATTERN_TIME_ZONE = DateTimeFormatter
20+
.ofPattern(RFC_2822_DATE_TIME_PATTERN_TIME_ZONE_NUMERIC, Locale.ENGLISH);
21+
private static final DateTimeFormatter FORMATTER_DATE_TIME_TIME_ZONE_NAME_DAY = DateTimeFormatter
22+
.ofPattern(RFC_2822_DATE_TIME_PATTERN_TIME_ZONE_NAME_DAY_OCTAL_LITERAL, Locale.ENGLISH);
2023

2124
public static String toString(ZonedDateTime zonedDateTime) {
2225
try {

src/main/java/com/mailgun/util/MailgunApiUtil.java

+13-22
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,26 @@
11
package com.mailgun.util;
22

3+
import java.lang.reflect.Method;
4+
5+
import org.apache.commons.lang3.StringUtils;
6+
37
import com.mailgun.api.MailgunApi;
48
import com.mailgun.enums.ApiVersion;
9+
import lombok.SneakyThrows;
510
import lombok.experimental.UtilityClass;
6-
import org.apache.commons.lang3.StringUtils;
7-
8-
import java.lang.invoke.MethodHandles;
9-
import java.lang.reflect.Constructor;
10-
import java.lang.reflect.Proxy;
1111

1212
@UtilityClass
1313
public class MailgunApiUtil {
1414

15+
@SneakyThrows
1516
public String getFullUrl(Class<? extends MailgunApi> apiType, String baseUrl) {
16-
MailgunApi mailgunApi = (MailgunApi) Proxy.newProxyInstance(
17-
Thread.currentThread().getContextClassLoader(),
18-
new Class[]{apiType},
19-
(proxy, method, args) -> {
20-
Constructor<MethodHandles.Lookup> constructor = MethodHandles.Lookup.class
21-
.getDeclaredConstructor(Class.class);
22-
constructor.setAccessible(true);
23-
24-
return constructor.newInstance(apiType)
25-
.in(apiType)
26-
.unreflectSpecial(method, apiType)
27-
.bindTo(proxy)
28-
.invokeWithArguments(args);
29-
}
30-
);
31-
32-
ApiVersion apiVersion = mailgunApi.getApiVersion();
17+
ApiVersion apiVersion;
18+
try {
19+
Method declaredMethod = apiType.getDeclaredMethod("getApiVersion");
20+
apiVersion = (ApiVersion) declaredMethod.invoke(null);
21+
} catch (Exception e) {
22+
apiVersion = MailgunApi.getApiVersion();
23+
}
3324

3425
return getFullUrl(baseUrl, apiVersion.getValue());
3526
}

src/test/java/com/mailgun/api/MailgunApiMessagesTest.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ void setUp() {
3737

3838
@Test
3939
void sendMessageWithDomainSuccessTest() {
40-
stubFor(post(urlEqualTo("/" + mailgunMessagesApi.getApiVersion().getValue() + "/" + TEST_DOMAIN + "/messages"))
40+
stubFor(post(urlEqualTo("/" + MailgunApi.getApiVersion().getValue() + "/" + TEST_DOMAIN + "/messages"))
4141
.withHeader("Authorization", equalTo(TestHeadersUtils.getExpectedAuthHeader()))
4242
.withHeader("Content-Type",
4343
containing("multipart/form-data"))

src/test/java/com/mailgun/api/MailgunStatisticsApiTest.java

+7-7
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
package com.mailgun.api;
22

3+
import java.util.Arrays;
4+
import java.util.Collections;
5+
6+
import org.junit.jupiter.api.BeforeEach;
7+
import org.junit.jupiter.api.Test;
8+
39
import com.github.tomakehurst.wiremock.client.WireMock;
410
import com.mailgun.api.v3.MailgunStatisticsApi;
511
import com.mailgun.client.MailgunClient;
@@ -12,11 +18,6 @@
1218
import com.mailgun.model.stats.StatsTotalValueObject;
1319
import com.mailgun.util.StringUtil;
1420
import com.mailgun.utils.TestHeadersUtils;
15-
import org.junit.jupiter.api.BeforeEach;
16-
import org.junit.jupiter.api.Test;
17-
18-
import java.util.Arrays;
19-
import java.util.Collections;
2021

2122
import static com.github.tomakehurst.wiremock.client.WireMock.aResponse;
2223
import static com.github.tomakehurst.wiremock.client.WireMock.equalTo;
@@ -54,8 +55,7 @@ void getStatisticsTotalSuccessTest() {
5455
.stats(Collections.singletonList(stats))
5556
.build();
5657

57-
58-
stubFor(get(urlPathEqualTo("/" + mailgunStatisticsApi.getApiVersion().getValue() + "/" + TEST_DOMAIN + "/stats/total"))
58+
stubFor(get(urlPathEqualTo("/" + MailgunApi.getApiVersion().getValue() + "/" + TEST_DOMAIN + "/stats/total"))
5959
.withHeader("Authorization", equalTo(TestHeadersUtils.getExpectedAuthHeader()))
6060
.withQueryParam("resolution", WireMock.equalTo("day"))
6161
.withQueryParam("duration", WireMock.equalTo("3d"))

src/test/java/com/mailgun/integration/MailgunDomainsIntegrationTest.java

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.mailgun.integration;
22

3+
import com.mailgun.api.MailgunApi;
34
import com.mailgun.api.v3.MailgunDomainsApi;
45
import com.mailgun.client.MailgunClient;
56
import com.mailgun.enums.DomainState;
@@ -114,7 +115,7 @@ void getAllDomainsResponseSuccessTest() throws IOException {
114115
assertEquals("OK", feignResponse.reason());
115116
Request request = feignResponse.request();
116117
assertEquals(Request.HttpMethod.GET, request.httpMethod());
117-
assertEquals(DEFAULT_BASE_URL_US_REGION + mailgunDomainsApi.getApiVersion().getValue() + "/domains", request.url());
118+
assertEquals(DEFAULT_BASE_URL_US_REGION + MailgunApi.getApiVersion().getValue() + "/domains", request.url());
118119
assertNotNull(feignResponse.body());
119120
DomainListResponse domainListResponse = ObjectMapperUtil.decode(feignResponse, DomainListResponse.class);
120121
assertTrue(CollectionUtils.isNotEmpty(domainListResponse.getItems()));

src/test/java/com/mailgun/model/stats/StatisticsOptionsTest.java

+18
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88

99
import java.util.Arrays;
1010
import java.util.LinkedHashSet;
11+
import java.util.Locale;
1112

1213
import static com.mailgun.constants.TestConstants.ZONED_DATE_TIME_2018_2_3_GMT;
1314
import static com.mailgun.constants.TestConstants.ZONED_DATE_TIME_2018_2_3_STRING;
@@ -55,6 +56,23 @@ void createStatsOptionsTimeRangeSuccessTest() {
5556
assertEquals(ZONED_DATE_TIME_2020_4_5_STRING, result.getEnd());
5657
}
5758

59+
@Test
60+
void createStatsOptionsTimeRange_GermanyLocale_SuccessTest() {
61+
Locale.setDefault(Locale.GERMANY);
62+
63+
StatisticsOptions result = StatisticsOptions.builder()
64+
.event(StatsEventType.OPENED)
65+
.event(Arrays.asList(StatsEventType.ACCEPTED, StatsEventType.DELIVERED))
66+
.start(ZONED_DATE_TIME_2018_2_3_GMT)
67+
.end(ZONED_DATE_TIME_2020_4_5_GMT)
68+
.build();
69+
70+
assertNotNull(result);
71+
assertEquals(new LinkedHashSet<>(Arrays.asList(StatsEventType.OPENED.getValue(), StatsEventType.ACCEPTED.getValue(), StatsEventType.DELIVERED.getValue())), result.getEvent());
72+
assertEquals(ZONED_DATE_TIME_2018_2_3_STRING, result.getStart());
73+
assertEquals(ZONED_DATE_TIME_2020_4_5_STRING, result.getEnd());
74+
}
75+
5876
@Test
5977
void createStatsOptionsDurationSuccessTest() {
6078
StatisticsOptions result = StatisticsOptions.builder()

0 commit comments

Comments
 (0)