Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 16 additions & 10 deletions src/main/java/com/twilio/Twilio.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand All @@ -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.
* <p>
* 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.
* <p>
* Example usage:
* <pre>
* Twilio.init("ACCOUNT_SID", "AUTH_TOKEN");
* // or with a CredentialProvider
* Twilio.init(new MyCredentialProvider());
* </pre>
* <p>
*/
public class Twilio {

Expand All @@ -44,15 +57,14 @@ public class Twilio {

private static CredentialProvider credentialProvider;

private static Map<String, String> regionMap = RegionEndpoints.getRegions();
private static final Logger logger = LoggerFactory.getLogger(Twilio.class);



private Twilio() {
}

/*
/**
* Ensures that the ExecutorService is shutdown when the JVM exits.
*/
static {
Expand Down Expand Up @@ -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.<city>.<region>.twilio.com; otherwise use product.twilio.com."
);
Twilio.edge = regionMap.get(Twilio.region);
}
builder.region(Twilio.region);
builder.edge(Twilio.edge);

Expand Down
12 changes: 1 addition & 11 deletions src/main/java/com/twilio/http/TwilioRestClient.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -72,22 +70,14 @@ public class TwilioRestClient {
@Getter
private final List<String> userAgentExtensions;
private static final Logger logger = LoggerFactory.getLogger(TwilioRestClient.class);
private static Map<String, String> regionMap = RegionEndpoints.getRegions();

protected TwilioRestClient(Builder b) {
this.username = b.username;
this.password = b.password;
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.<city>.<region>.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;
Expand Down
30 changes: 0 additions & 30 deletions src/main/java/com/twilio/type/RegionEndpoints.java

This file was deleted.

25 changes: 0 additions & 25 deletions src/test/java/com/twilio/TwilioTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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<String, String> 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);
}

}
18 changes: 0 additions & 18 deletions src/test/java/com/twilio/http/TwilioRestClientTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -165,19 +162,4 @@ public void testRequestWithNoAuthStrategyWithAuthStrategy() {
// AuthStrategy of Request not changing by TwilioRestClient
assertEquals(NoAuthStrategy.getInstance(), request.getAuthStrategy());
}

@Test
public void testEdgeIsSetFromRegionMap() {
Map<String, String> 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());
}
}