diff --git a/src/main/java/net/sargue/mailgun/Configuration.java b/src/main/java/net/sargue/mailgun/Configuration.java index 6853df3..1afb5a7 100644 --- a/src/main/java/net/sargue/mailgun/Configuration.java +++ b/src/main/java/net/sargue/mailgun/Configuration.java @@ -22,6 +22,8 @@ public class Configuration { private String apiUrl = "https://api.mailgun.net/v3"; private String domain; private String apiKey; + private int connectTimeout = 0; + private int readTimeout = 0; private MultivaluedMap defaultParameters = new MultivaluedHashMap<>(); private MailRequestCallbackFactory mailRequestCallbackFactory = null; @@ -161,6 +163,40 @@ public Configuration apiUrl(String apiUrl) { return this; } + /** + * Connect timeout interval, in milliseconds. + *

+ * A value of zero (0) is equivalent to an interval of infinity. + *

+ *

+ * The default value is infinity (0). + *

+ * + * @param connectTimeout the connect timeout interval, in milliseconds + * @return this configuration + */ + public Configuration connectTimeout(int connectTimeout) { + this.connectTimeout = connectTimeout; + return this; + } + + /** + * Read timeout interval, in milliseconds. + *

+ * A value of zero (0) is equivalent to an interval of infinity. + *

+ *

+ * The default value is infinity (0). + *

+ * + * @param readTimeout the read timeout interval, in milliseconds + * @return this configuration + */ + public Configuration readTimeout(int readTimeout) { + this.readTimeout = readTimeout; + return this; + } + /** * Adds a new value to the specified default parameter. *

@@ -265,6 +301,24 @@ public String apiUrl() { return apiUrl; } + /** + * Returns the configured connect timeout. + * + * @return the configured connect timeout, in milliseconds + */ + public int connectTimeout() { + return connectTimeout; + } + + /** + * Returns the configured read timeout. + * + * @return the configured read timeout, in milliseconds + */ + public int readTimeout() { + return readTimeout; + } + /** * Returns the internal map of default parameters. * diff --git a/src/main/java/net/sargue/mailgun/Mail.java b/src/main/java/net/sargue/mailgun/Mail.java index 7f58363..7440964 100644 --- a/src/main/java/net/sargue/mailgun/Mail.java +++ b/src/main/java/net/sargue/mailgun/Mail.java @@ -2,9 +2,15 @@ import org.glassfish.jersey.client.JerseyClientBuilder; -import javax.ws.rs.client.*; +import javax.ws.rs.client.Client; +import javax.ws.rs.client.Entity; +import javax.ws.rs.client.Invocation; +import javax.ws.rs.client.InvocationCallback; import java.util.List; +import static org.glassfish.jersey.client.ClientProperties.CONNECT_TIMEOUT; +import static org.glassfish.jersey.client.ClientProperties.READ_TIMEOUT; + /** * Representation of a Mailgun's mail request. *

@@ -136,6 +142,12 @@ void configureClient(Client client) { private Invocation.Builder request() { Client client = JerseyClientBuilder.newClient(); + + if (configuration.connectTimeout() != 0) + client.property(CONNECT_TIMEOUT, configuration.connectTimeout()); + if (configuration.readTimeout() != 0) + client.property(READ_TIMEOUT, configuration.readTimeout()); + configureClient(client); return client .register(configuration.httpAuthenticationFeature()) diff --git a/src/test/java/net/sargue/mailgun/test/ConfigurationTests.java b/src/test/java/net/sargue/mailgun/test/ConfigurationTests.java index d7333e2..760f0b2 100644 --- a/src/test/java/net/sargue/mailgun/test/ConfigurationTests.java +++ b/src/test/java/net/sargue/mailgun/test/ConfigurationTests.java @@ -151,4 +151,34 @@ public boolean filter(Mail mail) { assertSame(filter, configuration.mailSendFilter()); } + + @Test + public void testConnectTimeout() { + Configuration configuration = new Configuration() + .connectTimeout(42); + + assertEquals(42, configuration.connectTimeout()); + } + + @Test + public void testDefaultConnectTimeout() { + Configuration configuration = new Configuration(); + + assertEquals(0, configuration.connectTimeout()); + } + + @Test + public void testReadTimeout() { + Configuration configuration = new Configuration() + .readTimeout(42); + + assertEquals(42, configuration.readTimeout()); + } + + @Test + public void testDefaultReadTimeout() { + Configuration configuration = new Configuration(); + + assertEquals(0, configuration.readTimeout()); + } }