diff --git a/src/main/java/com/twilio/Twilio.java b/src/main/java/com/twilio/Twilio.java index 0b1df61c94..dd1db6fe72 100644 --- a/src/main/java/com/twilio/Twilio.java +++ b/src/main/java/com/twilio/Twilio.java @@ -11,7 +11,6 @@ import com.twilio.http.Request; import com.twilio.http.Response; import com.twilio.http.TwilioRestClient; -import com.twilio.type.RegionEndpoints; import java.util.Map; import lombok.Getter; @@ -24,7 +23,21 @@ import org.slf4j.LoggerFactory; /** - * Singleton class to initialize Twilio environment. + * The {@code Twilio} class is a thread-safe singleton that manages the global configuration and initialization + * of the Twilio Java SDK environment. It provides static methods to set credentials, region, edge, and other + * runtime options, as well as to initialize and retrieve the shared {@link TwilioRestClient} instance. + *

+ * Usage of this class is required before making API requests. Credentials can be set via environment variables, + * system properties, or explicitly using the {@code init} methods. The class also manages a shared + * {@link ExecutorService} for asynchronous operations and provides utility methods for SSL certificate validation. + *

+ * Example usage: + *

+ *     Twilio.init("ACCOUNT_SID", "AUTH_TOKEN");
+ *     // or with a CredentialProvider
+ *     Twilio.init(new MyCredentialProvider());
+ * 
+ *

*/ public class Twilio { @@ -44,7 +57,6 @@ public class Twilio { private static CredentialProvider credentialProvider; - private static Map regionMap = RegionEndpoints.getRegions(); private static final Logger logger = LoggerFactory.getLogger(Twilio.class); @@ -52,7 +64,7 @@ public class Twilio { private Twilio() { } - /* + /** * Ensures that the ExecutorService is shutdown when the JVM exits. */ static { @@ -243,12 +255,6 @@ private static TwilioRestClient buildRestClient() { if (userAgentExtensions != null) { builder.userAgentExtensions(Twilio.userAgentExtensions); } - if (Twilio.edge == null && Twilio.region != null) { - logger.warn( - "Setting default `Edge` for the provided `region`. For regional processing, DNS is of format product...twilio.com; otherwise use product.twilio.com." - ); - Twilio.edge = regionMap.get(Twilio.region); - } builder.region(Twilio.region); builder.edge(Twilio.edge); diff --git a/src/main/java/com/twilio/http/TwilioRestClient.java b/src/main/java/com/twilio/http/TwilioRestClient.java index 0d708cf8e8..2dafce8fad 100644 --- a/src/main/java/com/twilio/http/TwilioRestClient.java +++ b/src/main/java/com/twilio/http/TwilioRestClient.java @@ -2,11 +2,9 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; -import com.twilio.Twilio; import com.twilio.auth_strategy.AuthStrategy; import com.twilio.auth_strategy.NoAuthStrategy; import com.twilio.constant.EnumConstants; -import com.twilio.type.RegionEndpoints; import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -72,7 +70,6 @@ public class TwilioRestClient { @Getter private final List userAgentExtensions; private static final Logger logger = LoggerFactory.getLogger(TwilioRestClient.class); - private static Map regionMap = RegionEndpoints.getRegions(); protected TwilioRestClient(Builder b) { this.username = b.username; @@ -80,14 +77,7 @@ protected TwilioRestClient(Builder b) { this.authStrategy = b.authStrategy; this.accountSid = b.accountSid; this.region = b.region; - if(b.edge == null && b.region != null) { - logger.warn( - "Setting default `Edge` for the provided `region`. For regional processing, DNS is of format product...twilio.com; otherwise use product.twilio.com." - ); - this.edge = regionMap.get(this.region); - } - else - this.edge = b.edge; + this.edge = b.edge; this.httpClient = b.httpClient; this.objectMapper = b.objectMapper; this.userAgentExtensions = b.userAgentExtensions; diff --git a/src/main/java/com/twilio/type/RegionEndpoints.java b/src/main/java/com/twilio/type/RegionEndpoints.java deleted file mode 100644 index 0edda18a13..0000000000 --- a/src/main/java/com/twilio/type/RegionEndpoints.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.twilio.type; - -import java.util.Collections; -import java.util.HashMap; -import java.util.Map; - -/** - * Provides region-to-edge mappings for Twilio's regional processing. - *

- * This class is part of the transition away from direct edge configuration, - * allowing clients to use region identifiers that are mapped to the appropriate edge endpoints. - * It is intended to centralize and simplify region-to-edge lookups for Twilio services. - */ -public class RegionEndpoints { - private static Map regionMap = new HashMap<>(); - static { - regionMap.put("au1", "sydney"); - regionMap.put("br1", "sao-paulo"); - regionMap.put("ie1", "dublin"); - regionMap.put("de1", "frankfurt"); - regionMap.put("jp1", "tokyo"); - regionMap.put("jp2", "osaka"); - regionMap.put("sg1", "singapore"); - regionMap.put("us1", "ashburn"); - regionMap.put("us2", "umatilla"); - } - public static Map getRegions() { - return Collections.unmodifiableMap(regionMap); - } -} diff --git a/src/test/java/com/twilio/TwilioTest.java b/src/test/java/com/twilio/TwilioTest.java index e52c08e643..7c3451f5ed 100644 --- a/src/test/java/com/twilio/TwilioTest.java +++ b/src/test/java/com/twilio/TwilioTest.java @@ -9,10 +9,8 @@ import com.twilio.http.Response; import com.twilio.http.TwilioRestClient; -import com.twilio.type.RegionEndpoints; import java.util.Arrays; import java.util.Collections; -import java.util.HashMap; import java.util.Map; import org.junit.Before; import org.junit.Test; @@ -162,27 +160,4 @@ public void testValidateSslCertificateSuccess() { Twilio.validateSslCertificate(networkHttpClient); } - @Test - public void testEdge() { - Twilio.setUsername("testUser"); - Twilio.setPassword("testToken"); - Twilio.setRegion("br1"); - Twilio.setEdge("someEdge"); - TwilioRestClient client = Twilio.getRestClient(); - assertEquals("someEdge", client.getEdge()); - Twilio.setEdge(null); - Twilio.setRegion(null); - } - - @Test - public void testEdgeIsSetFromRegionMap() { - Map regionMap = RegionEndpoints.getRegions(); - Twilio.setUsername("testUser"); - Twilio.setPassword("testToken"); - Twilio.setRegion("br1"); - TwilioRestClient client = Twilio.getRestClient(); - assertEquals(regionMap.get("br1"), client.getEdge()); - Twilio.setRegion(null); - } - } diff --git a/src/test/java/com/twilio/http/TwilioRestClientTest.java b/src/test/java/com/twilio/http/TwilioRestClientTest.java index f7c53ea5c5..9c4a758160 100644 --- a/src/test/java/com/twilio/http/TwilioRestClientTest.java +++ b/src/test/java/com/twilio/http/TwilioRestClientTest.java @@ -8,14 +8,11 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; -import com.twilio.Twilio; import com.twilio.auth_strategy.BasicAuthStrategy; import com.twilio.auth_strategy.NoAuthStrategy; import com.twilio.rest.Domains; -import com.twilio.type.RegionEndpoints; import java.util.Arrays; import java.util.Collections; -import java.util.HashMap; import java.util.List; import java.util.Map; import org.junit.Before; @@ -165,19 +162,4 @@ public void testRequestWithNoAuthStrategyWithAuthStrategy() { // AuthStrategy of Request not changing by TwilioRestClient assertEquals(NoAuthStrategy.getInstance(), request.getAuthStrategy()); } - - @Test - public void testEdgeIsSetFromRegionMap() { - Map regionMap = RegionEndpoints.getRegions(); - for( String key: regionMap.keySet() ) { - TwilioRestClient client = new TwilioRestClient.Builder(USER_NAME, TOKEN).region(key).build(); - assertEquals(regionMap.get(key), client.getEdge()); - } - } - - @Test - public void testEdge() { - TwilioRestClient client = new TwilioRestClient.Builder(USER_NAME, TOKEN).region("us1").edge("someEdge").build(); - assertEquals("someEdge", client.getEdge()); - } }