From daa4ae49fe3915538288de24e1c8ae3a8f069fb5 Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Sun, 17 Sep 2017 09:17:24 -0700 Subject: [PATCH 001/345] Mail Helper Refactor Proposal --- proposals/mail-helper-refactor.md | 466 ++++++++++++++++++++++++++++++ 1 file changed, 466 insertions(+) create mode 100644 proposals/mail-helper-refactor.md diff --git a/proposals/mail-helper-refactor.md b/proposals/mail-helper-refactor.md new file mode 100644 index 00000000..7e152bf5 --- /dev/null +++ b/proposals/mail-helper-refactor.md @@ -0,0 +1,466 @@ +# Send a Single Email to a Single Recipient + +The following code assumes you are storing the API key in an [environment variable (recommended)](https://github.com/sendgrid/sendgrid-python/blob/master/TROUBLESHOOTING.md#environment). If you don't have your key stored in an environment variable, you can assign it directly to `apikey` for testing purposes. + +This is the minimum code needed to send an email. + +```java +import com.sendgrid.*; +import com.sendgrid.helpers.mail.*; + +public class SendGridExample { + public static void main(String[] args) throws SendGridException { + From from = new From("test@example.com", "Example User"); + To to = new To("test@example.com", "Example User"); + Subject subject = Subject("Sending with SendGrid is Fun"); + PlainTextContent plainTextContent = new PlainTextContent("and easy to do anywhere, even with Java"); + HtmlContent htmlContent = new HtmlContent("and easy to do anywhere, even with Java"); + SendGridMessage email = new SendGridMessage(from, + to, + subject, + plainTextContent, + htmlContent); + + SendGrid sendgrid = new SendGrid(System.getenv("SENDGRID_API_KEY")); + try { + SendGridResponse response = sendgrid.send(email); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (SendGridException ex) { + System.err.println(ex); + throw ex; + } + } +} +``` + +# Send a Single Email to Multiple Recipients + +The following code assumes you are storing the API key in an [environment variable (recommended)](https://github.com/sendgrid/sendgrid-python/blob/master/TROUBLESHOOTING.md#environment). If you don't have your key stored in an environment variable, you can assign it directly to `apikey` for testing purposes. + +```java +import com.sendgrid.*; +import com.sendgrid.helpers.mail.*; +import java.util.ArrayList; + +public class SendGridExample { + public static void main(String[] args) throws SendGridException { + From from = new From("test@example.com", "Example User"); + ArrayList tos = new ArrayList(); + tos.add(new To("test1@example.com", "Example User1")); + tos.add(new To("test2@example.com", "Example User2")); + tos.add(new To("test3@example.com", "Example User3")); + Subject subject = Subject("Sending with SendGrid is Fun"); + PlainTextContent plainTextContent = new PlainTextContent("and easy to do anywhere, even with Java"); + HtmlContent htmlContent = new HtmlContent("and easy to do anywhere, even with Java"); + SendGridMessage email = new SendGridMessage(from, + tos, + subject, + plainTextContent, + htmlContent); + + SendGrid sendgrid = new SendGrid(System.getenv("SENDGRID_API_KEY")); + try { + SendGridResponse response = sendgrid.send(email); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (SendGridException ex) { + System.err.println(ex); + throw ex; + } + } +} +``` + +# Send Multiple Emails to Multiple Recipients + +The following code assumes you are storing the API key in an [environment variable (recommended)](https://github.com/sendgrid/sendgrid-python/blob/master/TROUBLESHOOTING.md#environment). If you don't have your key stored in an environment variable, you can assign it directly to `apikey` for testing purposes. + + +```java +import com.sendgrid.*; +import com.sendgrid.helpers.mail.*; +import java.util.ArrayList; + +public class SendGridExample { + public static void main(String[] args) throws SendGridException { + From from = new From("test@example.com", "Example User"); + ArrayList tos = new ArrayList(); + ArrayList sub = new ArrayList(); + sub.add("-name-", "Alain"); + sub.add("-github-", "http://github.com/ninsuo"); + tos.add(new To("test1@example.com", "Example User1"), sub); + sub.clear(); + sub.add("-name-", "Elmer"); + sub.add("-github-", "http://github.com/thinkingserious"); + tos.add(new To("test2@example.com", "Example User2"), sub); + sub.clear(); + sub.add("-name-", "Casey"); + sub.add("-github-", "http://github.com/caseyw"); + tos.add(new To("test3@example.com", "Example User3"), sub); + // Alternatively, you can pass in a collection of subjects OR add a subject to the `To` object + Subject subject = Subject("Hi -name-!"); + Substitution globalSubstitution = new Substitution("-time-", ""); + PlainTextContent plainTextContent = new PlainTextContent("Hello -name-, your github is -github-, email sent at -time-"); + HtmlContent htmlContent = new HtmlContent("Hello -name-, your github is here email sent at -time-"); + SendGridMessage email = new SendGridMessage(from, + subject, // or subjects, + tos, + plainTextContent, + htmlContent, + globalSubstition); // or globalSubstitutions + + SendGrid sendgrid = new SendGrid(System.getenv("SENDGRID_API_KEY")); + try { + SendGridResponse response = sendgrid.send(email); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (SendGridException ex) { + System.err.println(ex); + throw ex; + } + } +} +``` + +# Kitchen Sink - an example with all settings used + +The following code assumes you are storing the API key in an [environment variable (recommended)](https://github.com/sendgrid/sendgrid-python/blob/master/TROUBLESHOOTING.md#environment). If you don't have your key stored in an environment variable, you can assign it directly to `apikey` for testing purposes. + + +```java +import com.sendgrid.*; +import com.sendgrid.helpers.mail.*; +import java.util.ArrayList; + +public class SendGridExample { + public static void main(String[] args) throws SendGridException { + From from = new From("test@example.com", "Example User"); + To to = new To("test@example.com", "Example User"); + Subject subject = Subject("Sending with SendGrid is Fun"); + PlainTextContent plainTextContent = new PlainTextContent("and easy to do anywhere, even with Java"); + HtmlContent htmlContent = new HtmlContent("and easy to do anywhere, even with Java"); + SendGridMessage email = new SendGridMessage(from, + to, // or tos + subject, // or subjects + plainTextContent, + htmlContent); + + // For a detailed description of each of these settings, please see the [documentation](https://sendgrid.com/docs/API_Reference/api_v3.html). + email.addTo("test1@example.com", "Example User1") + ArrayList tos = new ArrayList(); + tos.add("test2@example.com", "Example User2"); + tos.add("test3@example.com", "Example User3"); + email.addTos(tos); + + email.addCc("test4@example.com", "Example User4") + ArrayList ccs = new ArrayList(); + ccs.add("test5@example.com", "Example User5"); + ccs.add("test6@example.com", "Example User6"); + email.addCcs(ccs); + + email.addBcc("test7@example.com", "Example User7") + ArrayList bccs = new ArrayList(); + bccs.add("test8@example.com", "Example User8"); + bccs.add("test9@example.com", "Example User9"); + email.addBccs(bccs); + + email.addHeader("X-Test1", "Test1"); + email.addHeader("X-Test2", "Test2"); + ArrayList
headers = new ArrayList
(); + headers.add("X-Test3", "Test3"); + headers.add("X-Test4", "Test4"); + email.addHeaders(headers) + + email.addSubstitution("%name1%", "Example Name 1"); + email.addSubstitution("%city1%", "Denver"); + ArrayList substitutions = new ArrayList(); + substitutions.add("%name2%", "Example Name 2"); + substitutions.add("%city2%", "Orange" ); + email.addSubstitutions(substitutions); + + email.addCustomArg("marketing1", "false"); + email.addCustomArg("transactional1", "true"); + ArrayList customArgs = new ArrayList(); + customArgs.add("marketing2", "true"); + customArgs.add("transactional2", "false"); + email.addCustomArgs(customArgs); + + email.setSendAt(1461775051); + + // If you need to add more [Personalizations](https://sendgrid.com/docs/Classroom/Send/v3_Mail_Send/personalizations.html), here is an example of adding another Personalization by passing in a personalization index + + + email.addTo("test10@example.com", "Example User 10", 1); + ArrayList tos1 = new ArrayList(); + tos1.add("test11@example.com", "Example User11"); + tos1.add("test12@example.com", "Example User12"); + email.addTos(tos1, 1); + + email.addCc("test13@example.com", "Example User 13", 1); + ArrayList ccs1 = new ArrayList(); + ccs1.add("test14@example.com", "Example User14"); + ccs1.add("test15@example.com", "Example User15"); + email.addCcs(ccs1, 1); + + email.addBcc("test16@example.com", "Example User 16", 1); + ArrayList bccs1 = new ArrayList(); + bccs1.add("test17@example.com", "Example User17"); + bccs1.add("test18@example.com", "Example User18"); + email.addBccs(bccs1, 1); + + email.addHeader("X-Test5", "Test5", 1); + email.addHeader("X-Test6", "Test6", 1); + ArrayList
headers1 = new ArrayList
(); + headers1.add("X-Test7", "Test7"); + headers1.add("X-Test8", "Test8"); + email.addHeaders(headers1, 1); + + email.addSubstitution("%name3%", "Example Name 3", 1); + email.addSubstitution("%city3%", "Redwood City", 1); + ArrayList substitutions1 = new ArrayList(); + substitutions1.add("%name4%", "Example Name 4"); + substitutions1.add("%city4%", "London"); + var substitutions1 = new Dictionary() + email.addSubstitutions(substitutions1, 1); + + email.addCustomArg("marketing3", "true", 1); + email.addCustomArg("transactional3", "false", 1); + ArrayList customArgs1 = new ArrayList(); + customArgs1.add("marketing4", "false"); + customArgs1.add("transactional4", "true"); + email.addCustomArgs(customArgs1, 1); + + email.setSendAt(1461775052, 1); + + // The values below this comment are global to entire message + + email.setFrom("test@example.com", "Example User 0"); + + email.setSubject("this subject overrides the Global Subject"); + + email.setGlobalSubject("Sending with SendGrid is Fun"); + + email.addContent(MimeType.TEXT, "and easy to do anywhere, even with C#"); + email.addContent(MimeType.HTML, "and easy to do anywhere, even with C#"); + ArrayList contents = new ArrayList(); + contents.add("text/calendar", "Party Time!!"); + contents.add("text/calendar2", "Party Time2!!"); + email.addContents(contents); + + email.addAttachment("balance_001.pdf", + "base64 encoded string", + "application/pdf", + "attachment", + "Balance Sheet"); + ArrayList attachments = new ArrayList(); + attachments.add("banner.png", + "base64 encoded string", + "image/png", + "inline", + "Banner"); + attachments.add("banner2.png", + "base64 encoded string", + "image/png", + "inline", + "Banner2"); + email.addAttachments(attachments); + + email.setTemplateId("13b8f94f-bcae-4ec6-b752-70d6cb59f932"); + + email.addGlobalHeader("X-Day", "Monday"); + ArrayList
globalHeaders = new ArrayList
(); + globalHeaders.add("X-Month", "January" ); + globalHeaders.add("X-Year", "2017"); + email.addGlobalHeaders(globalHeaders); + + email.addSection("%section1", "Substitution for Section 1 Tag"); + ArrayList
sections = new ArrayList
(); + sections.add("%section2%", "Substitution for Section 2 Tag"); + sections.add("%section3%", "Substitution for Section 3 Tag"); + email.addSections(sections); + + email.addCategory("customer"); + ArrayList categories = new ArrayList(); + categories.add("vip"); + categories.add("new_account"); + email.addCategories(categories); + + email.addGlobalCustomArg("campaign", "welcome"); + ArrayList globalCustomArgs = new ArrayList(); + globalCustomArgs.add("sequence2", "2"); + globalCustomArgs.add("sequence3", "3"); + email.addGlobalCustomArgs(globalCustomArgs); + + ArrayList asmGroups = new ArrayList(); + asmGroups.add(1); + asmGroups.add(4); + asmGroups.add(5); + email.setAsm(3, asmGroups); + + email.setGlobalSendAt(1461775051); + + email.setIpPoolName("23"); + + // This must be a valid [batch ID](https://sendgrid.com/docs/API_Reference/SMTP_API/scheduling_parameters.html) + //email.setBatchId("some_batch_id"); + + email.setBccSetting(true, "test@example.com"); + + email.setBypassListManagement(true); + + email.setFooterSetting(true, "Some Footer HTML", "Some Footer Text"); + + email.setSandBoxMode(true); + + email.setSpamCheck(true, 1, "https://gotchya.example.com"); + + email.setClickTracking(true, false); + + email.setOpenTracking(true, "Optional tag to replace with the open image in the body of the message"); + + email.setSubscriptionTracking(true, + "HTML to insert into the text / html portion of the message", + "text to insert into the text/plain portion of the message", + "substitution tag"); + + email.setGoogleAnalytics(true, + "some campaign", + "some content", + "some medium", + "some source", + "some term"); + + email.setReplyTo("test+reply@example.com", "Reply To Me"); + + SendGrid sendgrid = new SendGrid(System.getenv("SENDGRID_API_KEY")); + try { + SendGridResponse response = sendgrid.send(email); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (SendGridException ex) { + System.err.println(ex); + throw ex; + } + } +} +``` + +# Attachments + +The following code assumes you are storing the API key in an [environment variable (recommended)](https://github.com/sendgrid/sendgrid-python/blob/master/TROUBLESHOOTING.md#environment). If you don't have your key stored in an environment variable, you can assign it directly to `apikey` for testing purposes. + + +```java +import com.sendgrid.*; +import com.sendgrid.helpers.mail.*; + +public class SendGridExample { + public static void main(String[] args) throws SendGridException { + From from = new From("test@example.com", "Example User"); + To to = new To("test@example.com", "Example User"); + Subject subject = Subject("Sending with SendGrid is Fun"); + PlainTextContent plainTextContent = new PlainTextContent("and easy to do anywhere, even with Java"); + HtmlContent htmlContent = new HtmlContent("and easy to do anywhere, even with Java"); + SendGridMessage email = new SendGridMessage(from, + to, + subject, + plainTextContent, + htmlContent); + email.addAttachment("balance_001.pdf", + "base64 encoded string", + "application/pdf", + "attachment", + "Balance Sheet"); + + SendGrid sendgrid = new SendGrid(System.getenv("SENDGRID_API_KEY")); + try { + SendGridResponse response = sendgrid.send(email); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (SendGridException ex) { + System.err.println(ex); + throw ex; + } + } +} +``` + +# Transactional Templates + +The following code assumes you are storing the API key in an [environment variable (recommended)](https://github.com/sendgrid/sendgrid-python/blob/master/TROUBLESHOOTING.md#environment). If you don't have your key stored in an environment variable, you can assign it directly to `apikey` for testing purposes. + +For this example, we assume you have created a [transactional template](https://sendgrid.com/docs/User_Guide/Transactional_Templates/index.html). Following is the template content we used for testing. + +Template ID (replace with your own): + +```text +13b8f94f-bcae-4ec6-b752-70d6cb59f932 +``` + +Email Subject: + +```text +<%subject%> +``` + +Template Body: + +```html + + + + + +Hello -name-, +

+I'm glad you are trying out the template feature! +

+<%body%> +

+I hope you are having a great day in -city- :) +

+ + +``` + + +```java +import com.sendgrid.*; +import com.sendgrid.helpers.mail.*; + +public class SendGridExample { + public static void main(String[] args) throws SendGridException { + From from = new From("test@example.com", "Example User"); + To to = new To("test@example.com", "Example User"); + Subject subject = Subject("Sending with SendGrid is Fun"); + PlainTextContent plainTextContent = new PlainTextContent("and easy to do anywhere, even with Java"); + HtmlContent htmlContent = new HtmlContent("and easy to do anywhere, even with Java"); + SendGridMessage email = new SendGridMessage(from, + to, + subject, + plainTextContent, + htmlContent); + // See `Send Multiple Emails to Multiple Recipients` for additional methods for adding substitutions + email.addSubstitution("-name-", "Example User"); + email.addSubstitution("-city-", "Denver"); + email.setTemplateId("13b8f94f-bcae-4ec6-b752-70d6cb59f932"); + + SendGrid sendgrid = new SendGrid(System.getenv("SENDGRID_API_KEY")); + try { + SendGridResponse response = sendgrid.send(email); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (SendGridException ex) { + System.err.println(ex); + throw ex; + } + } +} +``` From f5e32f67132c939384781735877dbf2f741e288f Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Sun, 17 Sep 2017 09:18:55 -0700 Subject: [PATCH 002/345] Update mail-helper-refactor.md --- proposals/mail-helper-refactor.md | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/proposals/mail-helper-refactor.md b/proposals/mail-helper-refactor.md index 7e152bf5..2b35f142 100644 --- a/proposals/mail-helper-refactor.md +++ b/proposals/mail-helper-refactor.md @@ -1,6 +1,6 @@ # Send a Single Email to a Single Recipient -The following code assumes you are storing the API key in an [environment variable (recommended)](https://github.com/sendgrid/sendgrid-python/blob/master/TROUBLESHOOTING.md#environment). If you don't have your key stored in an environment variable, you can assign it directly to `apikey` for testing purposes. +The following code assumes you are storing the API key in an environment variable (recommended). This is the minimum code needed to send an email. @@ -37,7 +37,7 @@ public class SendGridExample { # Send a Single Email to Multiple Recipients -The following code assumes you are storing the API key in an [environment variable (recommended)](https://github.com/sendgrid/sendgrid-python/blob/master/TROUBLESHOOTING.md#environment). If you don't have your key stored in an environment variable, you can assign it directly to `apikey` for testing purposes. +The following code assumes you are storing the API key in an environment variable (recommended). ```java import com.sendgrid.*; @@ -76,7 +76,7 @@ public class SendGridExample { # Send Multiple Emails to Multiple Recipients -The following code assumes you are storing the API key in an [environment variable (recommended)](https://github.com/sendgrid/sendgrid-python/blob/master/TROUBLESHOOTING.md#environment). If you don't have your key stored in an environment variable, you can assign it directly to `apikey` for testing purposes. +The following code assumes you are storing the API key in an environment variable (recommended). ```java @@ -128,7 +128,7 @@ public class SendGridExample { # Kitchen Sink - an example with all settings used -The following code assumes you are storing the API key in an [environment variable (recommended)](https://github.com/sendgrid/sendgrid-python/blob/master/TROUBLESHOOTING.md#environment). If you don't have your key stored in an environment variable, you can assign it directly to `apikey` for testing purposes. +The following code assumes you are storing the API key in an environment variable (recommended). ```java @@ -352,8 +352,7 @@ public class SendGridExample { # Attachments -The following code assumes you are storing the API key in an [environment variable (recommended)](https://github.com/sendgrid/sendgrid-python/blob/master/TROUBLESHOOTING.md#environment). If you don't have your key stored in an environment variable, you can assign it directly to `apikey` for testing purposes. - +The following code assumes you are storing the API key in an environment variable (recommended). ```java import com.sendgrid.*; @@ -393,7 +392,7 @@ public class SendGridExample { # Transactional Templates -The following code assumes you are storing the API key in an [environment variable (recommended)](https://github.com/sendgrid/sendgrid-python/blob/master/TROUBLESHOOTING.md#environment). If you don't have your key stored in an environment variable, you can assign it directly to `apikey` for testing purposes. +The following code assumes you are storing the API key in an environment variable (recommended). For this example, we assume you have created a [transactional template](https://sendgrid.com/docs/User_Guide/Transactional_Templates/index.html). Following is the template content we used for testing. From 338cb04c4099bcbe8a8f5b55e106b06f699c332d Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Sun, 17 Sep 2017 09:19:50 -0700 Subject: [PATCH 003/345] Update mail-helper-refactor.md --- proposals/mail-helper-refactor.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/proposals/mail-helper-refactor.md b/proposals/mail-helper-refactor.md index 2b35f142..b050491a 100644 --- a/proposals/mail-helper-refactor.md +++ b/proposals/mail-helper-refactor.md @@ -12,7 +12,7 @@ public class SendGridExample { public static void main(String[] args) throws SendGridException { From from = new From("test@example.com", "Example User"); To to = new To("test@example.com", "Example User"); - Subject subject = Subject("Sending with SendGrid is Fun"); + Subject subject = new Subject("Sending with SendGrid is Fun"); PlainTextContent plainTextContent = new PlainTextContent("and easy to do anywhere, even with Java"); HtmlContent htmlContent = new HtmlContent("and easy to do anywhere, even with Java"); SendGridMessage email = new SendGridMessage(from, @@ -51,7 +51,7 @@ public class SendGridExample { tos.add(new To("test1@example.com", "Example User1")); tos.add(new To("test2@example.com", "Example User2")); tos.add(new To("test3@example.com", "Example User3")); - Subject subject = Subject("Sending with SendGrid is Fun"); + Subject subject = new Subject("Sending with SendGrid is Fun"); PlainTextContent plainTextContent = new PlainTextContent("and easy to do anywhere, even with Java"); HtmlContent htmlContent = new HtmlContent("and easy to do anywhere, even with Java"); SendGridMessage email = new SendGridMessage(from, @@ -101,7 +101,7 @@ public class SendGridExample { sub.add("-github-", "http://github.com/caseyw"); tos.add(new To("test3@example.com", "Example User3"), sub); // Alternatively, you can pass in a collection of subjects OR add a subject to the `To` object - Subject subject = Subject("Hi -name-!"); + Subject subject = new Subject("Hi -name-!"); Substitution globalSubstitution = new Substitution("-time-", ""); PlainTextContent plainTextContent = new PlainTextContent("Hello -name-, your github is -github-, email sent at -time-"); HtmlContent htmlContent = new HtmlContent("Hello -name-, your github is here email sent at -time-"); @@ -140,7 +140,7 @@ public class SendGridExample { public static void main(String[] args) throws SendGridException { From from = new From("test@example.com", "Example User"); To to = new To("test@example.com", "Example User"); - Subject subject = Subject("Sending with SendGrid is Fun"); + Subject subject = new Subject("Sending with SendGrid is Fun"); PlainTextContent plainTextContent = new PlainTextContent("and easy to do anywhere, even with Java"); HtmlContent htmlContent = new HtmlContent("and easy to do anywhere, even with Java"); SendGridMessage email = new SendGridMessage(from, @@ -362,7 +362,7 @@ public class SendGridExample { public static void main(String[] args) throws SendGridException { From from = new From("test@example.com", "Example User"); To to = new To("test@example.com", "Example User"); - Subject subject = Subject("Sending with SendGrid is Fun"); + Subject subject = new Subject("Sending with SendGrid is Fun"); PlainTextContent plainTextContent = new PlainTextContent("and easy to do anywhere, even with Java"); HtmlContent htmlContent = new HtmlContent("and easy to do anywhere, even with Java"); SendGridMessage email = new SendGridMessage(from, @@ -437,7 +437,7 @@ public class SendGridExample { public static void main(String[] args) throws SendGridException { From from = new From("test@example.com", "Example User"); To to = new To("test@example.com", "Example User"); - Subject subject = Subject("Sending with SendGrid is Fun"); + Subject subject = new Subject("Sending with SendGrid is Fun"); PlainTextContent plainTextContent = new PlainTextContent("and easy to do anywhere, even with Java"); HtmlContent htmlContent = new HtmlContent("and easy to do anywhere, even with Java"); SendGridMessage email = new SendGridMessage(from, From 6d5b12654724323a91d53b2e758987a607d2e224 Mon Sep 17 00:00:00 2001 From: Mattia Barbon Date: Tue, 19 Sep 2017 13:18:05 +0200 Subject: [PATCH 004/345] Alway serialize click-tracking parameters Othwerwise setting them to a false value produces an invalid request, because the fields are required. Fixes #181 --- .../sendgrid/helpers/mail/objects/ClickTrackingSetting.java | 1 - src/test/java/com/sendgrid/helpers/MailTest.java | 4 ++-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/ClickTrackingSetting.java b/src/main/java/com/sendgrid/helpers/mail/objects/ClickTrackingSetting.java index 839c8fbf..9214eb45 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/ClickTrackingSetting.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/ClickTrackingSetting.java @@ -4,7 +4,6 @@ import com.fasterxml.jackson.annotation.JsonInclude.Include; import com.fasterxml.jackson.annotation.JsonProperty; -@JsonInclude(Include.NON_DEFAULT) public class ClickTrackingSetting { @JsonProperty("enable") private boolean enable; @JsonProperty("enable_text") private boolean enableText; diff --git a/src/test/java/com/sendgrid/helpers/MailTest.java b/src/test/java/com/sendgrid/helpers/MailTest.java index e4eedd58..7ad8bfe5 100644 --- a/src/test/java/com/sendgrid/helpers/MailTest.java +++ b/src/test/java/com/sendgrid/helpers/MailTest.java @@ -170,7 +170,7 @@ public void testKitchenSink() throws IOException { TrackingSettings trackingSettings = new TrackingSettings(); ClickTrackingSetting clickTrackingSetting = new ClickTrackingSetting(); clickTrackingSetting.setEnable(true); - clickTrackingSetting.setEnableText(true); + clickTrackingSetting.setEnableText(false); trackingSettings.setClickTrackingSetting(clickTrackingSetting); OpenTrackingSetting openTrackingSetting = new OpenTrackingSetting(); openTrackingSetting.setEnable(true); @@ -197,7 +197,7 @@ public void testKitchenSink() throws IOException { replyTo.setEmail("test@example.com"); mail.setReplyTo(replyTo); - Assert.assertEquals(mail.build(), "{\"from\":{\"name\":\"Example User\",\"email\":\"test@example.com\"},\"subject\":\"Hello World from the SendGrid Java Library\",\"personalizations\":[{\"to\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"cc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"bcc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"subject\":\"Hello World from the Personalized SendGrid Java Library\",\"headers\":{\"X-Mock\":\"true\",\"X-Test\":\"test\"},\"substitutions\":{\"%city%\":\"Denver\",\"%name%\":\"Example User\"},\"custom_args\":{\"type\":\"marketing\",\"user_id\":\"343\"},\"send_at\":1443636843},{\"to\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"cc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"bcc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"subject\":\"Hello World from the Personalized SendGrid Java Library\",\"headers\":{\"X-Mock\":\"true\",\"X-Test\":\"test\"},\"substitutions\":{\"%city%\":\"Denver\",\"%name%\":\"Example User\"},\"custom_args\":{\"type\":\"marketing\",\"user_id\":\"343\"},\"send_at\":1443636843}],\"content\":[{\"type\":\"text/plain\",\"value\":\"some text here\"},{\"type\":\"text/html\",\"value\":\"some text here\"}],\"attachments\":[{\"content\":\"TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdC4gQ3JhcyBwdW12\",\"type\":\"application/pdf\",\"filename\":\"balance_001.pdf\",\"disposition\":\"attachment\",\"content_id\":\"Balance Sheet\"},{\"content\":\"BwdW\",\"type\":\"image/png\",\"filename\":\"banner.png\",\"disposition\":\"inline\",\"content_id\":\"Banner\"}],\"template_id\":\"13b8f94f-bcae-4ec6-b752-70d6cb59f932\",\"sections\":{\"%section1%\":\"Substitution Text for Section 1\",\"%section2%\":\"Substitution Text for Section 2\"},\"headers\":{\"X-Test1\":\"1\",\"X-Test2\":\"2\"},\"categories\":[\"May\",\"2016\"],\"custom_args\":{\"campaign\":\"welcome\",\"weekday\":\"morning\"},\"send_at\":1443636842,\"asm\":{\"group_id\":99,\"groups_to_display\":[4,5,6,7,8]},\"ip_pool_name\":\"23\",\"mail_settings\":{\"bcc\":{\"enable\":true,\"email\":\"test@example.com\"},\"bypass_list_management\":{\"enable\":true},\"footer\":{\"enable\":true,\"text\":\"Footer Text\",\"html\":\"Footer Text\"},\"sandbox_mode\":{\"enable\":true},\"spam_check\":{\"enable\":true,\"threshold\":1,\"post_to_url\":\"https://spamcatcher.sendgrid.com\"}},\"tracking_settings\":{\"click_tracking\":{\"enable\":true,\"enable_text\":true},\"open_tracking\":{\"enable\":true,\"substitution_tag\":\"Optional tag to replace with the open image in the body of the message\"},\"subscription_tracking\":{\"enable\":true,\"text\":\"text to insert into the text/plain portion of the message\",\"html\":\"html to insert into the text/html portion of the message\",\"substitution_tag\":\"Optional tag to replace with the open image in the body of the message\"},\"ganalytics\":{\"enable\":true,\"utm_source\":\"some source\",\"utm_term\":\"some term\",\"utm_content\":\"some content\",\"utm_campaign\":\"some name\",\"utm_medium\":\"some medium\"}},\"reply_to\":{\"name\":\"Example User\",\"email\":\"test@example.com\"}}"); + Assert.assertEquals(mail.build(), "{\"from\":{\"name\":\"Example User\",\"email\":\"test@example.com\"},\"subject\":\"Hello World from the SendGrid Java Library\",\"personalizations\":[{\"to\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"cc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"bcc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"subject\":\"Hello World from the Personalized SendGrid Java Library\",\"headers\":{\"X-Mock\":\"true\",\"X-Test\":\"test\"},\"substitutions\":{\"%city%\":\"Denver\",\"%name%\":\"Example User\"},\"custom_args\":{\"type\":\"marketing\",\"user_id\":\"343\"},\"send_at\":1443636843},{\"to\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"cc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"bcc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"subject\":\"Hello World from the Personalized SendGrid Java Library\",\"headers\":{\"X-Mock\":\"true\",\"X-Test\":\"test\"},\"substitutions\":{\"%city%\":\"Denver\",\"%name%\":\"Example User\"},\"custom_args\":{\"type\":\"marketing\",\"user_id\":\"343\"},\"send_at\":1443636843}],\"content\":[{\"type\":\"text/plain\",\"value\":\"some text here\"},{\"type\":\"text/html\",\"value\":\"some text here\"}],\"attachments\":[{\"content\":\"TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdC4gQ3JhcyBwdW12\",\"type\":\"application/pdf\",\"filename\":\"balance_001.pdf\",\"disposition\":\"attachment\",\"content_id\":\"Balance Sheet\"},{\"content\":\"BwdW\",\"type\":\"image/png\",\"filename\":\"banner.png\",\"disposition\":\"inline\",\"content_id\":\"Banner\"}],\"template_id\":\"13b8f94f-bcae-4ec6-b752-70d6cb59f932\",\"sections\":{\"%section1%\":\"Substitution Text for Section 1\",\"%section2%\":\"Substitution Text for Section 2\"},\"headers\":{\"X-Test1\":\"1\",\"X-Test2\":\"2\"},\"categories\":[\"May\",\"2016\"],\"custom_args\":{\"campaign\":\"welcome\",\"weekday\":\"morning\"},\"send_at\":1443636842,\"asm\":{\"group_id\":99,\"groups_to_display\":[4,5,6,7,8]},\"ip_pool_name\":\"23\",\"mail_settings\":{\"bcc\":{\"enable\":true,\"email\":\"test@example.com\"},\"bypass_list_management\":{\"enable\":true},\"footer\":{\"enable\":true,\"text\":\"Footer Text\",\"html\":\"Footer Text\"},\"sandbox_mode\":{\"enable\":true},\"spam_check\":{\"enable\":true,\"threshold\":1,\"post_to_url\":\"https://spamcatcher.sendgrid.com\"}},\"tracking_settings\":{\"click_tracking\":{\"enable\":true,\"enable_text\":false},\"open_tracking\":{\"enable\":true,\"substitution_tag\":\"Optional tag to replace with the open image in the body of the message\"},\"subscription_tracking\":{\"enable\":true,\"text\":\"text to insert into the text/plain portion of the message\",\"html\":\"html to insert into the text/html portion of the message\",\"substitution_tag\":\"Optional tag to replace with the open image in the body of the message\"},\"ganalytics\":{\"enable\":true,\"utm_source\":\"some source\",\"utm_term\":\"some term\",\"utm_content\":\"some content\",\"utm_campaign\":\"some name\",\"utm_medium\":\"some medium\"}},\"reply_to\":{\"name\":\"Example User\",\"email\":\"test@example.com\"}}"); } @Test From 3acee9fa3c25b784ad2f3380ea951fa0bc505bc1 Mon Sep 17 00:00:00 2001 From: Stephen Calabrese Date: Sun, 1 Oct 2017 15:08:23 -0500 Subject: [PATCH 005/345] The license file is put into the release jar. --- pom.xml | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 07545420..86ef37d8 100644 --- a/pom.xml +++ b/pom.xml @@ -25,7 +25,15 @@ scm:git:git@github.com:sendgrid/sendgrid-java.git HEAD - + + + + ${basedir} + + LICENSE.txt + + + org.apache.maven.plugins @@ -119,4 +127,4 @@ test - + \ No newline at end of file From e61af6c70ac0663dfa4c09cb73c48607d5dbc433 Mon Sep 17 00:00:00 2001 From: Stephen Calabrese Date: Sun, 1 Oct 2017 15:37:56 -0500 Subject: [PATCH 006/345] Adding SendGridApi interface. --- src/main/java/com/sendgrid/SendGrid.java | 2 +- src/main/java/com/sendgrid/SendGridApi.java | 34 +++++++++++++++++++++ 2 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/sendgrid/SendGridApi.java diff --git a/src/main/java/com/sendgrid/SendGrid.java b/src/main/java/com/sendgrid/SendGrid.java index 421b11a9..061316b8 100644 --- a/src/main/java/com/sendgrid/SendGrid.java +++ b/src/main/java/com/sendgrid/SendGrid.java @@ -7,7 +7,7 @@ /** * Class SendGrid allows for quick and easy access to the SendGrid API. */ -public class SendGrid { +public class SendGrid implements SendGridApi{ private static final String VERSION = "3.0.0"; private static final String USER_AGENT = "sendgrid/" + VERSION + ";java"; diff --git a/src/main/java/com/sendgrid/SendGridApi.java b/src/main/java/com/sendgrid/SendGridApi.java new file mode 100644 index 00000000..d6273b36 --- /dev/null +++ b/src/main/java/com/sendgrid/SendGridApi.java @@ -0,0 +1,34 @@ +package com.sendgrid; + +import java.io.IOException; +import java.util.Map; + +public interface SendGridApi { + + public void initializeSendGrid(String apiKey); + + public String getLibraryVersion(); + + public String getVersion(); + + public void setVersion(String version); + + public Map getRequestHeaders(); + + public Map addRequestHeader(String key, String value); + + public Map removeRequestHeader(String key); + public String getHost(); + + public void setHost(String host); + + /** + * Class makeCall makes the call to the SendGrid API, override this method for testing. + */ + public Response makeCall(Request request) throws IOException; + + /** + * Class api sets up the request to the SendGrid API, this is main interface. + */ + public Response api(Request request) throws IOException; +} From b8af1fc0f7dfdf494d99b7fc1cd5ffb2bcd61a72 Mon Sep 17 00:00:00 2001 From: Stephen Calabrese Date: Sun, 1 Oct 2017 17:22:10 -0500 Subject: [PATCH 007/345] Fixing Mail deserialization issue. --- .../java/com/sendgrid/helpers/mail/Mail.java | 70 +++++++++++++++++++ .../sendgrid/helpers/mail/objects/ASM.java | 25 +++++++ .../helpers/mail/objects/Attachments.java | 49 +++++++++++++ .../helpers/mail/objects/BccSettings.java | 28 ++++++++ .../mail/objects/ClickTrackingSetting.java | 25 +++++++ .../helpers/mail/objects/Content.java | 31 ++++++++ .../sendgrid/helpers/mail/objects/Email.java | 31 ++++++++ .../helpers/mail/objects/FooterSetting.java | 34 +++++++++ .../mail/objects/GoogleAnalyticsSetting.java | 52 ++++++++++++++ .../helpers/mail/objects/MailSettings.java | 49 +++++++++++++ .../mail/objects/OpenTrackingSetting.java | 29 ++++++++ .../helpers/mail/objects/Personalization.java | 65 ++++++++++++++++- .../helpers/mail/objects/Setting.java | 22 ++++++ .../mail/objects/SpamCheckSetting.java | 31 ++++++++ .../objects/SubscriptionTrackingSetting.java | 40 +++++++++++ .../mail/objects/TrackingSettings.java | 43 ++++++++++++ .../java/com/sendgrid/helpers/MailTest.java | 14 ++++ 17 files changed, 637 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/sendgrid/helpers/mail/Mail.java b/src/main/java/com/sendgrid/helpers/mail/Mail.java index beba5a53..99f08556 100644 --- a/src/main/java/com/sendgrid/helpers/mail/Mail.java +++ b/src/main/java/com/sendgrid/helpers/mail/Mail.java @@ -281,4 +281,74 @@ public String buildPretty() throws IOException { throw ex; } } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((batchId == null) ? 0 : batchId.hashCode()); + result = prime * result + ((categories == null) ? 0 : categories.hashCode()); + result = prime * result + ((customArgs == null) ? 0 : customArgs.hashCode()); + result = prime * result + ((headers == null) ? 0 : headers.hashCode()); + result = prime * result + ((ipPoolId == null) ? 0 : ipPoolId.hashCode()); + result = prime * result + ((sections == null) ? 0 : sections.hashCode()); + result = prime * result + (int) (sendAt ^ (sendAt >>> 32)); + result = prime * result + ((subject == null) ? 0 : subject.hashCode()); + result = prime * result + ((templateId == null) ? 0 : templateId.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + Mail other = (Mail) obj; + if (batchId == null) { + if (other.batchId != null) + return false; + } else if (!batchId.equals(other.batchId)) + return false; + if (categories == null) { + if (other.categories != null) + return false; + } else if (!categories.equals(other.categories)) + return false; + if (customArgs == null) { + if (other.customArgs != null) + return false; + } else if (!customArgs.equals(other.customArgs)) + return false; + if (headers == null) { + if (other.headers != null) + return false; + } else if (!headers.equals(other.headers)) + return false; + if (ipPoolId == null) { + if (other.ipPoolId != null) + return false; + } else if (!ipPoolId.equals(other.ipPoolId)) + return false; + if (sections == null) { + if (other.sections != null) + return false; + } else if (!sections.equals(other.sections)) + return false; + if (sendAt != other.sendAt) + return false; + if (subject == null) { + if (other.subject != null) + return false; + } else if (!subject.equals(other.subject)) + return false; + if (templateId == null) { + if (other.templateId != null) + return false; + } else if (!templateId.equals(other.templateId)) + return false; + return true; + } } diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/ASM.java b/src/main/java/com/sendgrid/helpers/mail/objects/ASM.java index 1a65a65d..29952ae1 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/ASM.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/ASM.java @@ -28,4 +28,29 @@ public int[] getGroupsToDisplay() { public void setGroupsToDisplay(int[] groupsToDisplay) { this.groupsToDisplay = Arrays.copyOf(groupsToDisplay, groupsToDisplay.length); } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + groupId; + result = prime * result + Arrays.hashCode(groupsToDisplay); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + ASM other = (ASM) obj; + if (groupId != other.groupId) + return false; + if (!Arrays.equals(groupsToDisplay, other.groupsToDisplay)) + return false; + return true; + } } \ No newline at end of file diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/Attachments.java b/src/main/java/com/sendgrid/helpers/mail/objects/Attachments.java index 9323b837..6bec689f 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/Attachments.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/Attachments.java @@ -137,4 +137,53 @@ public Attachments build() { return attachments; } } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((content == null) ? 0 : content.hashCode()); + result = prime * result + ((contentId == null) ? 0 : contentId.hashCode()); + result = prime * result + ((disposition == null) ? 0 : disposition.hashCode()); + result = prime * result + ((filename == null) ? 0 : filename.hashCode()); + result = prime * result + ((type == null) ? 0 : type.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + Attachments other = (Attachments) obj; + if (content == null) { + if (other.content != null) + return false; + } else if (!content.equals(other.content)) + return false; + if (contentId == null) { + if (other.contentId != null) + return false; + } else if (!contentId.equals(other.contentId)) + return false; + if (disposition == null) { + if (other.disposition != null) + return false; + } else if (!disposition.equals(other.disposition)) + return false; + if (filename == null) { + if (other.filename != null) + return false; + } else if (!filename.equals(other.filename)) + return false; + if (type == null) { + if (other.type != null) + return false; + } else if (!type.equals(other.type)) + return false; + return true; + } } diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/BccSettings.java b/src/main/java/com/sendgrid/helpers/mail/objects/BccSettings.java index 176387fa..fa9758f2 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/BccSettings.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/BccSettings.java @@ -26,4 +26,32 @@ public String getEmail() { public void setEmail(String email) { this.email = email; } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((email == null) ? 0 : email.hashCode()); + result = prime * result + (enable ? 1231 : 1237); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + BccSettings other = (BccSettings) obj; + if (email == null) { + if (other.email != null) + return false; + } else if (!email.equals(other.email)) + return false; + if (enable != other.enable) + return false; + return true; + } } \ No newline at end of file diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/ClickTrackingSetting.java b/src/main/java/com/sendgrid/helpers/mail/objects/ClickTrackingSetting.java index 839c8fbf..2abc58c8 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/ClickTrackingSetting.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/ClickTrackingSetting.java @@ -26,4 +26,29 @@ public boolean getEnableText() { public void setEnableText(boolean enableText) { this.enableText = enableText; } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + (enable ? 1231 : 1237); + result = prime * result + (enableText ? 1231 : 1237); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + ClickTrackingSetting other = (ClickTrackingSetting) obj; + if (enable != other.enable) + return false; + if (enableText != other.enableText) + return false; + return true; + } } \ No newline at end of file diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/Content.java b/src/main/java/com/sendgrid/helpers/mail/objects/Content.java index b00f9566..faa9820b 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/Content.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/Content.java @@ -35,4 +35,35 @@ public String getValue() { public void setValue(String value) { this.value = value; } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((type == null) ? 0 : type.hashCode()); + result = prime * result + ((value == null) ? 0 : value.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + Content other = (Content) obj; + if (type == null) { + if (other.type != null) + return false; + } else if (!type.equals(other.type)) + return false; + if (value == null) { + if (other.value != null) + return false; + } else if (!value.equals(other.value)) + return false; + return true; + } } \ No newline at end of file diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/Email.java b/src/main/java/com/sendgrid/helpers/mail/objects/Email.java index 43396a85..cbfce557 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/Email.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/Email.java @@ -39,4 +39,35 @@ public String getEmail() { public void setEmail(String email) { this.email = email; } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((email == null) ? 0 : email.hashCode()); + result = prime * result + ((name == null) ? 0 : name.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + Email other = (Email) obj; + if (email == null) { + if (other.email != null) + return false; + } else if (!email.equals(other.email)) + return false; + if (name == null) { + if (other.name != null) + return false; + } else if (!name.equals(other.name)) + return false; + return true; + } } \ No newline at end of file diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/FooterSetting.java b/src/main/java/com/sendgrid/helpers/mail/objects/FooterSetting.java index 8e542c7f..1b2ece01 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/FooterSetting.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/FooterSetting.java @@ -36,4 +36,38 @@ public String getHtml() { public void setHtml(String html) { this.html = html; } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + (enable ? 1231 : 1237); + result = prime * result + ((html == null) ? 0 : html.hashCode()); + result = prime * result + ((text == null) ? 0 : text.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + FooterSetting other = (FooterSetting) obj; + if (enable != other.enable) + return false; + if (html == null) { + if (other.html != null) + return false; + } else if (!html.equals(other.html)) + return false; + if (text == null) { + if (other.text != null) + return false; + } else if (!text.equals(other.text)) + return false; + return true; + } } \ No newline at end of file diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/GoogleAnalyticsSetting.java b/src/main/java/com/sendgrid/helpers/mail/objects/GoogleAnalyticsSetting.java index ce30edbc..594743d6 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/GoogleAnalyticsSetting.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/GoogleAnalyticsSetting.java @@ -66,4 +66,56 @@ public String getCampaignMedium() { public void setCampaignMedium(String campaignMedium) { this.campaignMedium = campaignMedium; } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((campaignContent == null) ? 0 : campaignContent.hashCode()); + result = prime * result + ((campaignMedium == null) ? 0 : campaignMedium.hashCode()); + result = prime * result + ((campaignName == null) ? 0 : campaignName.hashCode()); + result = prime * result + ((campaignSource == null) ? 0 : campaignSource.hashCode()); + result = prime * result + ((campaignTerm == null) ? 0 : campaignTerm.hashCode()); + result = prime * result + (enable ? 1231 : 1237); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + GoogleAnalyticsSetting other = (GoogleAnalyticsSetting) obj; + if (campaignContent == null) { + if (other.campaignContent != null) + return false; + } else if (!campaignContent.equals(other.campaignContent)) + return false; + if (campaignMedium == null) { + if (other.campaignMedium != null) + return false; + } else if (!campaignMedium.equals(other.campaignMedium)) + return false; + if (campaignName == null) { + if (other.campaignName != null) + return false; + } else if (!campaignName.equals(other.campaignName)) + return false; + if (campaignSource == null) { + if (other.campaignSource != null) + return false; + } else if (!campaignSource.equals(other.campaignSource)) + return false; + if (campaignTerm == null) { + if (other.campaignTerm != null) + return false; + } else if (!campaignTerm.equals(other.campaignTerm)) + return false; + if (enable != other.enable) + return false; + return true; + } } \ No newline at end of file diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/MailSettings.java b/src/main/java/com/sendgrid/helpers/mail/objects/MailSettings.java index 63580458..0590b224 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/MailSettings.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/MailSettings.java @@ -56,4 +56,53 @@ public SpamCheckSetting getSpamCheck() { public void setSpamCheckSetting(SpamCheckSetting spamCheckSetting) { this.spamCheckSetting = spamCheckSetting; } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((bccSettings == null) ? 0 : bccSettings.hashCode()); + result = prime * result + ((bypassListManagement == null) ? 0 : bypassListManagement.hashCode()); + result = prime * result + ((footerSetting == null) ? 0 : footerSetting.hashCode()); + result = prime * result + ((sandBoxMode == null) ? 0 : sandBoxMode.hashCode()); + result = prime * result + ((spamCheckSetting == null) ? 0 : spamCheckSetting.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + MailSettings other = (MailSettings) obj; + if (bccSettings == null) { + if (other.bccSettings != null) + return false; + } else if (!bccSettings.equals(other.bccSettings)) + return false; + if (bypassListManagement == null) { + if (other.bypassListManagement != null) + return false; + } else if (!bypassListManagement.equals(other.bypassListManagement)) + return false; + if (footerSetting == null) { + if (other.footerSetting != null) + return false; + } else if (!footerSetting.equals(other.footerSetting)) + return false; + if (sandBoxMode == null) { + if (other.sandBoxMode != null) + return false; + } else if (!sandBoxMode.equals(other.sandBoxMode)) + return false; + if (spamCheckSetting == null) { + if (other.spamCheckSetting != null) + return false; + } else if (!spamCheckSetting.equals(other.spamCheckSetting)) + return false; + return true; + } } \ No newline at end of file diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/OpenTrackingSetting.java b/src/main/java/com/sendgrid/helpers/mail/objects/OpenTrackingSetting.java index aeb7ede1..b5508946 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/OpenTrackingSetting.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/OpenTrackingSetting.java @@ -26,4 +26,33 @@ public String getSubstitutionTag() { public void setSubstitutionTag(String substitutionTag) { this.substitutionTag = substitutionTag; } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + (enable ? 1231 : 1237); + result = prime * result + ((substitutionTag == null) ? 0 : substitutionTag.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + OpenTrackingSetting other = (OpenTrackingSetting) obj; + if (enable != other.enable) + return false; + if (substitutionTag == null) { + if (other.substitutionTag != null) + return false; + } else if (!substitutionTag.equals(other.substitutionTag)) + return false; + return true; + } + } \ No newline at end of file diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/Personalization.java b/src/main/java/com/sendgrid/helpers/mail/objects/Personalization.java index 734dc9c0..e3646451 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/Personalization.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/Personalization.java @@ -143,5 +143,68 @@ public long sendAt() { public void setSendAt(long sendAt) { this.sendAt = sendAt; } - + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((bccs == null) ? 0 : bccs.hashCode()); + result = prime * result + ((ccs == null) ? 0 : ccs.hashCode()); + result = prime * result + ((customArgs == null) ? 0 : customArgs.hashCode()); + result = prime * result + ((headers == null) ? 0 : headers.hashCode()); + result = prime * result + (int) (sendAt ^ (sendAt >>> 32)); + result = prime * result + ((subject == null) ? 0 : subject.hashCode()); + result = prime * result + ((substitutions == null) ? 0 : substitutions.hashCode()); + result = prime * result + ((tos == null) ? 0 : tos.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + Personalization other = (Personalization) obj; + if (bccs == null) { + if (other.bccs != null) + return false; + } else if (!bccs.equals(other.bccs)) + return false; + if (ccs == null) { + if (other.ccs != null) + return false; + } else if (!ccs.equals(other.ccs)) + return false; + if (customArgs == null) { + if (other.customArgs != null) + return false; + } else if (!customArgs.equals(other.customArgs)) + return false; + if (headers == null) { + if (other.headers != null) + return false; + } else if (!headers.equals(other.headers)) + return false; + if (sendAt != other.sendAt) + return false; + if (subject == null) { + if (other.subject != null) + return false; + } else if (!subject.equals(other.subject)) + return false; + if (substitutions == null) { + if (other.substitutions != null) + return false; + } else if (!substitutions.equals(other.substitutions)) + return false; + if (tos == null) { + if (other.tos != null) + return false; + } else if (!tos.equals(other.tos)) + return false; + return true; + } } diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/Setting.java b/src/main/java/com/sendgrid/helpers/mail/objects/Setting.java index 5818a145..2fab69e8 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/Setting.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/Setting.java @@ -16,4 +16,26 @@ public boolean getEnable() { public void setEnable(boolean enable) { this.enable = enable; } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + (enable ? 1231 : 1237); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + Setting other = (Setting) obj; + if (enable != other.enable) + return false; + return true; + } } \ No newline at end of file diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/SpamCheckSetting.java b/src/main/java/com/sendgrid/helpers/mail/objects/SpamCheckSetting.java index 85d1dc10..ba5c0105 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/SpamCheckSetting.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/SpamCheckSetting.java @@ -36,4 +36,35 @@ public String getPostToUrl() { public void setPostToUrl(String postToUrl) { this.postToUrl = postToUrl; } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + (enable ? 1231 : 1237); + result = prime * result + ((postToUrl == null) ? 0 : postToUrl.hashCode()); + result = prime * result + spamThreshold; + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + SpamCheckSetting other = (SpamCheckSetting) obj; + if (enable != other.enable) + return false; + if (postToUrl == null) { + if (other.postToUrl != null) + return false; + } else if (!postToUrl.equals(other.postToUrl)) + return false; + if (spamThreshold != other.spamThreshold) + return false; + return true; + } } \ No newline at end of file diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/SubscriptionTrackingSetting.java b/src/main/java/com/sendgrid/helpers/mail/objects/SubscriptionTrackingSetting.java index ad1121c2..da02d8e9 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/SubscriptionTrackingSetting.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/SubscriptionTrackingSetting.java @@ -46,4 +46,44 @@ public String getSubstitutionTag() { public void setSubstitutionTag(String substitutionTag) { this.substitutionTag = substitutionTag; } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + (enable ? 1231 : 1237); + result = prime * result + ((html == null) ? 0 : html.hashCode()); + result = prime * result + ((substitutionTag == null) ? 0 : substitutionTag.hashCode()); + result = prime * result + ((text == null) ? 0 : text.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + SubscriptionTrackingSetting other = (SubscriptionTrackingSetting) obj; + if (enable != other.enable) + return false; + if (html == null) { + if (other.html != null) + return false; + } else if (!html.equals(other.html)) + return false; + if (substitutionTag == null) { + if (other.substitutionTag != null) + return false; + } else if (!substitutionTag.equals(other.substitutionTag)) + return false; + if (text == null) { + if (other.text != null) + return false; + } else if (!text.equals(other.text)) + return false; + return true; + } } \ No newline at end of file diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/TrackingSettings.java b/src/main/java/com/sendgrid/helpers/mail/objects/TrackingSettings.java index 4da565d5..06ff62df 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/TrackingSettings.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/TrackingSettings.java @@ -46,4 +46,47 @@ public GoogleAnalyticsSetting getGoogleAnalyticsSetting() { public void setGoogleAnalyticsSetting(GoogleAnalyticsSetting googleAnalyticsSetting) { this.googleAnalyticsSetting = googleAnalyticsSetting; } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((clickTrackingSetting == null) ? 0 : clickTrackingSetting.hashCode()); + result = prime * result + ((googleAnalyticsSetting == null) ? 0 : googleAnalyticsSetting.hashCode()); + result = prime * result + ((openTrackingSetting == null) ? 0 : openTrackingSetting.hashCode()); + result = prime * result + ((subscriptionTrackingSetting == null) ? 0 : subscriptionTrackingSetting.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + TrackingSettings other = (TrackingSettings) obj; + if (clickTrackingSetting == null) { + if (other.clickTrackingSetting != null) + return false; + } else if (!clickTrackingSetting.equals(other.clickTrackingSetting)) + return false; + if (googleAnalyticsSetting == null) { + if (other.googleAnalyticsSetting != null) + return false; + } else if (!googleAnalyticsSetting.equals(other.googleAnalyticsSetting)) + return false; + if (openTrackingSetting == null) { + if (other.openTrackingSetting != null) + return false; + } else if (!openTrackingSetting.equals(other.openTrackingSetting)) + return false; + if (subscriptionTrackingSetting == null) { + if (other.subscriptionTrackingSetting != null) + return false; + } else if (!subscriptionTrackingSetting.equals(other.subscriptionTrackingSetting)) + return false; + return true; + } } \ No newline at end of file diff --git a/src/test/java/com/sendgrid/helpers/MailTest.java b/src/test/java/com/sendgrid/helpers/MailTest.java index e4eedd58..a8b49fe3 100644 --- a/src/test/java/com/sendgrid/helpers/MailTest.java +++ b/src/test/java/com/sendgrid/helpers/MailTest.java @@ -208,4 +208,18 @@ public void fromShouldReturnCorrectFrom() { Assert.assertSame(from, mail.getFrom()); } + + @Test + public void mailDeserialization() throws IOException { + Email to = new Email("foo@bar.com"); + Content content = new Content("text/plain", "test"); + Email from = new Email("no-reply@bar.com"); + Mail mail = new Mail(from, "subject", to, content); + + ObjectMapper mapper = new ObjectMapper(); + String json = mapper.writeValueAsString(mail); + Mail deserialized = mapper.readValue(json, Mail.class); + + Assert.assertEquals(deserialized, mail); + } } From 4d0394e4cb7c73f3e9b225e35634a24743baff30 Mon Sep 17 00:00:00 2001 From: Peter Pan Date: Mon, 2 Oct 2017 17:11:17 +0200 Subject: [PATCH 008/345] CONTIBUTING.md broken link fixed. --- CONTRIBUTING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index e627ccc1..c310931b 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -51,7 +51,7 @@ Before you decide to create a new issue, please try the following: ### Please use our Bug Report Template -In order to make the process easier, we've included a [sample bug report template](https://github.com/sendgrid/sendgrid-java/.github/ISSUE_TEMPLATE) (borrowed from [Ghost](https://github.com/TryGhost/Ghost/)). The template uses [GitHub flavored markdown](https://help.github.com/articles/github-flavored-markdown/) for formatting. +In order to make the process easier, we've included a [sample bug report template](https://github.com/P3trur0/sendgrid-java/blob/master/.github/ISSUE_TEMPLATE) (borrowed from [Ghost](https://github.com/TryGhost/Ghost/)). The template uses [GitHub flavored markdown](https://help.github.com/articles/github-flavored-markdown/) for formatting. ## Improvements to the Codebase From 473fb56b13191f6215a6f45b9f6be855bc5b43b1 Mon Sep 17 00:00:00 2001 From: Peter Pan Date: Mon, 2 Oct 2017 17:14:34 +0200 Subject: [PATCH 009/345] contributing.md broken link fixed --- CONTRIBUTING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index c310931b..990b2fdf 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -51,7 +51,7 @@ Before you decide to create a new issue, please try the following: ### Please use our Bug Report Template -In order to make the process easier, we've included a [sample bug report template](https://github.com/P3trur0/sendgrid-java/blob/master/.github/ISSUE_TEMPLATE) (borrowed from [Ghost](https://github.com/TryGhost/Ghost/)). The template uses [GitHub flavored markdown](https://help.github.com/articles/github-flavored-markdown/) for formatting. +In order to make the process easier, we've included a [sample bug report template](https://github.com/sendgrid/sendgrid-java/blob/master/.github/ISSUE_TEMPLATE) (borrowed from [Ghost](https://github.com/TryGhost/Ghost/)). The template uses [GitHub flavored markdown](https://help.github.com/articles/github-flavored-markdown/) for formatting. ## Improvements to the Codebase From 2c0183d7770a841ce417897d5a8241b85af4a7a2 Mon Sep 17 00:00:00 2001 From: Dmitry Avershin Date: Tue, 3 Oct 2017 09:28:28 +0200 Subject: [PATCH 010/345] Changes serialization type for settings to serialize values only if they are non-empty instead of defaults. --- .../helpers/mail/objects/BccSettings.java | 2 +- .../mail/objects/ClickTrackingSetting.java | 2 +- .../helpers/mail/objects/FooterSetting.java | 2 +- .../mail/objects/GoogleAnalyticsSetting.java | 2 +- .../mail/objects/OpenTrackingSetting.java | 2 +- .../mail/objects/SpamCheckSetting.java | 2 +- .../objects/SubscriptionTrackingSetting.java | 2 +- .../objects/SettingsSerializationTest.java | 86 +++++++++++++++++++ 8 files changed, 93 insertions(+), 7 deletions(-) create mode 100644 src/test/java/com/sendgrid/helpers/mail/objects/SettingsSerializationTest.java diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/BccSettings.java b/src/main/java/com/sendgrid/helpers/mail/objects/BccSettings.java index 176387fa..79f6cc5c 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/BccSettings.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/BccSettings.java @@ -4,7 +4,7 @@ import com.fasterxml.jackson.annotation.JsonInclude.Include; import com.fasterxml.jackson.annotation.JsonProperty; -@JsonInclude(Include.NON_DEFAULT) +@JsonInclude(Include.NON_EMPTY) public class BccSettings { @JsonProperty("enable") private boolean enable; @JsonProperty("email") private String email; diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/ClickTrackingSetting.java b/src/main/java/com/sendgrid/helpers/mail/objects/ClickTrackingSetting.java index 839c8fbf..5c014d3f 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/ClickTrackingSetting.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/ClickTrackingSetting.java @@ -4,7 +4,7 @@ import com.fasterxml.jackson.annotation.JsonInclude.Include; import com.fasterxml.jackson.annotation.JsonProperty; -@JsonInclude(Include.NON_DEFAULT) +@JsonInclude(Include.NON_EMPTY) public class ClickTrackingSetting { @JsonProperty("enable") private boolean enable; @JsonProperty("enable_text") private boolean enableText; diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/FooterSetting.java b/src/main/java/com/sendgrid/helpers/mail/objects/FooterSetting.java index 8e542c7f..c179a606 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/FooterSetting.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/FooterSetting.java @@ -4,7 +4,7 @@ import com.fasterxml.jackson.annotation.JsonInclude.Include; import com.fasterxml.jackson.annotation.JsonProperty; -@JsonInclude(Include.NON_DEFAULT) +@JsonInclude(Include.NON_EMPTY) public class FooterSetting { @JsonProperty("enable") private boolean enable; @JsonProperty("text") private String text; diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/GoogleAnalyticsSetting.java b/src/main/java/com/sendgrid/helpers/mail/objects/GoogleAnalyticsSetting.java index ce30edbc..45485234 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/GoogleAnalyticsSetting.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/GoogleAnalyticsSetting.java @@ -4,7 +4,7 @@ import com.fasterxml.jackson.annotation.JsonInclude.Include; import com.fasterxml.jackson.annotation.JsonProperty; -@JsonInclude(Include.NON_DEFAULT) +@JsonInclude(Include.NON_EMPTY) public class GoogleAnalyticsSetting { @JsonProperty("enable") private boolean enable; @JsonProperty("utm_source") private String campaignSource; diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/OpenTrackingSetting.java b/src/main/java/com/sendgrid/helpers/mail/objects/OpenTrackingSetting.java index aeb7ede1..ac87f74d 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/OpenTrackingSetting.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/OpenTrackingSetting.java @@ -4,7 +4,7 @@ import com.fasterxml.jackson.annotation.JsonInclude.Include; import com.fasterxml.jackson.annotation.JsonProperty; -@JsonInclude(Include.NON_DEFAULT) +@JsonInclude(Include.NON_EMPTY) public class OpenTrackingSetting { @JsonProperty("enable") private boolean enable; @JsonProperty("substitution_tag") private String substitutionTag; diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/SpamCheckSetting.java b/src/main/java/com/sendgrid/helpers/mail/objects/SpamCheckSetting.java index 85d1dc10..a0ae0269 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/SpamCheckSetting.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/SpamCheckSetting.java @@ -4,7 +4,7 @@ import com.fasterxml.jackson.annotation.JsonInclude.Include; import com.fasterxml.jackson.annotation.JsonProperty; -@JsonInclude(Include.NON_DEFAULT) +@JsonInclude(Include.NON_EMPTY) public class SpamCheckSetting { @JsonProperty("enable") private boolean enable; @JsonProperty("threshold") private int spamThreshold; diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/SubscriptionTrackingSetting.java b/src/main/java/com/sendgrid/helpers/mail/objects/SubscriptionTrackingSetting.java index ad1121c2..839609bc 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/SubscriptionTrackingSetting.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/SubscriptionTrackingSetting.java @@ -4,7 +4,7 @@ import com.fasterxml.jackson.annotation.JsonInclude.Include; import com.fasterxml.jackson.annotation.JsonProperty; -@JsonInclude(Include.NON_DEFAULT) +@JsonInclude(Include.NON_EMPTY) public class SubscriptionTrackingSetting { @JsonProperty("enable") private boolean enable; @JsonProperty("text") private String text; diff --git a/src/test/java/com/sendgrid/helpers/mail/objects/SettingsSerializationTest.java b/src/test/java/com/sendgrid/helpers/mail/objects/SettingsSerializationTest.java new file mode 100644 index 00000000..48fbfcc6 --- /dev/null +++ b/src/test/java/com/sendgrid/helpers/mail/objects/SettingsSerializationTest.java @@ -0,0 +1,86 @@ +package com.sendgrid.helpers.mail.objects; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.sendgrid.BccSettings; +import com.sendgrid.ClickTrackingSetting; +import com.sendgrid.FooterSetting; +import com.sendgrid.GoogleAnalyticsSetting; +import com.sendgrid.OpenTrackingSetting; +import com.sendgrid.SpamCheckSetting; +import com.sendgrid.SubscriptionTrackingSetting; +import org.junit.Assert; +import org.junit.Test; + +public class SettingsSerializationTest { + + private ObjectMapper mapper = new ObjectMapper(); + + @Test + public void testOpenTrackingSettingSerialization() throws Exception { + OpenTrackingSetting setting = new OpenTrackingSetting(); + setting.setEnable(false); + + String jsonOne = mapper.writeValueAsString(setting); + Assert.assertEquals(jsonOne, "{\"enable\":false}"); + } + + @Test + public void testClickTrackingSettingSerialization() throws Exception { + ClickTrackingSetting setting = new ClickTrackingSetting(); + setting.setEnable(false); + + String jsonTwo = mapper.writeValueAsString(setting); + System.out.println(jsonTwo); + Assert.assertEquals(jsonTwo, "{\"enable\":false,\"enable_text\":false}"); + } + + @Test + public void testSubscriptionTrackingSettingSerialization() throws Exception { + SubscriptionTrackingSetting setting = new SubscriptionTrackingSetting(); + setting.setEnable(false); + + String jsonTwo = mapper.writeValueAsString(setting); + System.out.println(jsonTwo); + Assert.assertEquals(jsonTwo, "{\"enable\":false}"); + } + + @Test + public void testGoogleAnalyticsTrackingSettingSerialization() throws Exception { + GoogleAnalyticsSetting setting = new GoogleAnalyticsSetting(); + setting.setEnable(false); + + String jsonTwo = mapper.writeValueAsString(setting); + System.out.println(jsonTwo); + Assert.assertEquals(jsonTwo, "{\"enable\":false}"); + } + + @Test + public void testSpamCheckSettingSerialization() throws Exception { + SpamCheckSetting setting = new SpamCheckSetting(); + setting.setEnable(false); + + String jsonTwo = mapper.writeValueAsString(setting); + System.out.println(jsonTwo); + Assert.assertEquals(jsonTwo, "{\"enable\":false,\"threshold\":0}"); + } + + @Test + public void testFooterSettingSerialization() throws Exception { + FooterSetting setting = new FooterSetting(); + setting.setEnable(false); + + String jsonTwo = mapper.writeValueAsString(setting); + System.out.println(jsonTwo); + Assert.assertEquals(jsonTwo, "{\"enable\":false}"); + } + + @Test + public void testBccSettingsSerialization() throws Exception { + BccSettings settings = new BccSettings(); + settings.setEnable(false); + + String jsonTwo = mapper.writeValueAsString(settings); + System.out.println(jsonTwo); + Assert.assertEquals(jsonTwo, "{\"enable\":false}"); + } +} From 2199f1225806f29aae4c09fec8bd4cf32fe68964 Mon Sep 17 00:00:00 2001 From: Dmitry Avershin Date: Tue, 3 Oct 2017 21:11:07 +0200 Subject: [PATCH 011/345] Adds prism installation script to travis. --- .travis.yml | 5 +++++ test/prism.sh | 42 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+) create mode 100644 test/prism.sh diff --git a/.travis.yml b/.travis.yml index 48807070..a07cec04 100644 --- a/.travis.yml +++ b/.travis.yml @@ -10,6 +10,11 @@ matrix: jdk: oraclejdk7 - os: linux jdk: oraclejdk8 +before_script: +- mkdir -p prism/bin +- export PATH=$PATH:$PWD/prism/bin/ +- ./test/prism.sh + after_script: - "./gradlew build" - "./scripts/upload.sh" diff --git a/test/prism.sh b/test/prism.sh new file mode 100644 index 00000000..5d9d3002 --- /dev/null +++ b/test/prism.sh @@ -0,0 +1,42 @@ +#!/bin/bash + +install () { + +set -eu + +UNAME=$(uname) +ARCH=$(uname -m) +if [ "$UNAME" != "Linux" ] && [ "$UNAME" != "Darwin" ] && [ "$ARCH" != "x86_64" ] && [ "$ARCH" != "i686" ]; then + echo "Sorry, OS/Architecture not supported: ${UNAME}/${ARCH}. Download binary from https://github.com/stoplightio/prism/releases" + exit 1 +fi + +if [ "$UNAME" = "Darwin" ] ; then + OSX_ARCH=$(uname -m) + if [ "${OSX_ARCH}" = "x86_64" ] ; then + PLATFORM="darwin_amd64" + fi +elif [ "$UNAME" = "Linux" ] ; then + LINUX_ARCH=$(uname -m) + if [ "${LINUX_ARCH}" = "i686" ] ; then + PLATFORM="linux_386" + elif [ "${LINUX_ARCH}" = "x86_64" ] ; then + PLATFORM="linux_amd64" + fi +fi + +#LATEST=$(curl -s https://api.github.com/repos/stoplightio/prism/tags | grep -Eo '"name":.*?[^\\]",' | head -n 1 | sed 's/[," ]//g' | cut -d ':' -f 2) +LATEST="v0.1.5" +URL="https://github.com/stoplightio/prism/releases/download/$LATEST/prism_$PLATFORM" +DEST=./prism/bin/prism + +if [ -z $LATEST ] ; then + echo "Error requesting. Download binary from ${URL}" + exit 1 +else + curl -L $URL -o $DEST + chmod +x $DEST +fi +} + +install \ No newline at end of file From 008b04a280d1bc0c2a9ebde1f6eb5cd5d7339344 Mon Sep 17 00:00:00 2001 From: Dmitry Avershin Date: Wed, 4 Oct 2017 07:36:20 +0200 Subject: [PATCH 012/345] Creates gradle task to download and start prism locally. --- build.gradle | 5 ++++ scripts/startPrism.sh | 58 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 63 insertions(+) create mode 100755 scripts/startPrism.sh diff --git a/build.gradle b/build.gradle index 881a496e..1a7feba9 100644 --- a/build.gradle +++ b/build.gradle @@ -94,6 +94,11 @@ task renameSendGridVersionJarToSendGridJar { } } +task startPrism(type: Exec) { + workingDir 'scripts' + commandLine './startPrism.sh' +} + task javadocJar(type: Jar, dependsOn: javadoc) { classifier = 'javadoc' from 'build/docs/javadoc' diff --git a/scripts/startPrism.sh b/scripts/startPrism.sh new file mode 100755 index 00000000..7438aa5d --- /dev/null +++ b/scripts/startPrism.sh @@ -0,0 +1,58 @@ +#!/bin/bash + +set -eu + +install () { + +echo "Installing Prism..." + +UNAME=$(uname) +ARCH=$(uname -m) +if [ "$UNAME" != "Linux" ] && [ "$UNAME" != "Darwin" ] && [ "$ARCH" != "x86_64" ] && [ "$ARCH" != "i686" ]; then + echo "Sorry, OS/Architecture not supported: ${UNAME}/${ARCH}. Download binary from https://github.com/stoplightio/prism/releases" + exit 1 +fi + +if [ "$UNAME" = "Darwin" ] ; then + OSX_ARCH=$(uname -m) + if [ "${OSX_ARCH}" = "x86_64" ] ; then + PLATFORM="darwin_amd64" + fi +elif [ "$UNAME" = "Linux" ] ; then + LINUX_ARCH=$(uname -m) + if [ "${LINUX_ARCH}" = "i686" ] ; then + PLATFORM="linux_386" + elif [ "${LINUX_ARCH}" = "x86_64" ] ; then + PLATFORM="linux_amd64" + fi +fi + +mkdir -p ../prism/bin +#LATEST=$(curl -s https://api.github.com/repos/stoplightio/prism/tags | grep -Eo '"name":.*?[^\\]",' | head -n 1 | sed 's/[," ]//g' | cut -d ':' -f 2) +LATEST="v0.6.21" +URL="https://github.com/stoplightio/prism/releases/download/$LATEST/prism_$PLATFORM" +DEST=../prism/bin/prism + +if [ -z $LATEST ] ; then + echo "Error requesting. Download binary from ${URL}" + exit 1 +else + curl -L $URL -o $DEST + chmod +x $DEST +fi +} + +run () { + echo "Running prism..." + cd ../prism/bin + prism run --mock --spec https://raw.githubusercontent.com/sendgrid/sendgrid-oai/master/oai_stoplight.json +} + +if [ -f ../prism/bin/prism ]; then + echo "Prism is already installed." + run +else + echo "Prism is not installed." + install + run +fi \ No newline at end of file From a6036a1131c1826aa1966c4cc395ba43126cb4b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=ADcero=20Pablo?= Date: Fri, 6 Oct 2017 18:19:32 -0300 Subject: [PATCH 013/345] Update README.md --- README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/README.md b/README.md index 1847b034..99fceeb3 100644 --- a/README.md +++ b/README.md @@ -221,5 +221,4 @@ sendgrid-java is guided and supported by the SendGrid [Developer Experience Team sendgrid-java is maintained and funded by SendGrid, Inc. The names and logos for sendgrid-java are trademarks of SendGrid, Inc. -![SendGrid Logo] -(https://uiux.s3.amazonaws.com/2016-logos/email-logo%402x.png) +![SendGrid Logo](https://uiux.s3.amazonaws.com/2016-logos/email-logo%402x.png) From ad6a5294e6181b39a2dc0a41de503fabf99da93a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=ADcero=20Pablo?= Date: Fri, 6 Oct 2017 18:22:49 -0300 Subject: [PATCH 014/345] Update TROUBLESHOOTING.md --- TROUBLESHOOTING.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/TROUBLESHOOTING.md b/TROUBLESHOOTING.md index 35b2b348..7a4aace1 100644 --- a/TROUBLESHOOTING.md +++ b/TROUBLESHOOTING.md @@ -54,7 +54,7 @@ You can just drop the jar file in. It's a fat jar - it has all the dependencies ## Versions -We follow the MAJOR.MINOR.PATCH versioning scheme as described by [SemVer.org](http://semver.org). Therefore, we recommend that you always pin (or vendor) the particular version you are working with to your code and never auto-update to the latest version. Especially when there is a MAJOR point release, since that is guarenteed to be a breaking change. Changes are documented in the [CHANGELOG](https://github.com/sendgrid/sendgrid-java/blob/master/CHANGELOG.md) and [releases](https://github.com/sendgrid/sendgrid-java/releases) section. +We follow the MAJOR.MINOR.PATCH versioning scheme as described by [SemVer.org](http://semver.org). Therefore, we recommend that you always pin (or vendor) the particular version you are working with to your code and never auto-update to the latest version. Especially when there is a MAJOR point release, since that is guaranteed to be a breaking change. Changes are documented in the [CHANGELOG](https://github.com/sendgrid/sendgrid-java/blob/master/CHANGELOG.md) and [releases](https://github.com/sendgrid/sendgrid-java/releases) section. ## Environment Variables and Your SendGrid API Key @@ -96,4 +96,4 @@ repositories { Since Android SDK 23, HttpClient is no longer supported. Some workarounds can be found [here](http://stackoverflow.com/questions/32153318/httpclient-wont-import-in-android-studio). -We have an issue to remove that dependency [here](https://github.com/sendgrid/java-http-client/issues/2), please upvote to move it up the queue. \ No newline at end of file +We have an issue to remove that dependency [here](https://github.com/sendgrid/java-http-client/issues/2), please upvote to move it up the queue. From 9ed5220f68b39ed4047a862afff6392a993fe8c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=ADcero=20Pablo?= Date: Fri, 6 Oct 2017 18:41:42 -0300 Subject: [PATCH 015/345] Update USAGE.md --- USAGE.md | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/USAGE.md b/USAGE.md index 308ca259..96b63ed8 100644 --- a/USAGE.md +++ b/USAGE.md @@ -246,7 +246,7 @@ For more information about alerts, please see our [User Guide](https://sendgrid. ``` ## Retrieve all alerts -**This endpoint allows you to retieve all of your alerts.** +**This endpoint allows you to retrieve all of your alerts.** Alerts allow you to specify an email address to receive notifications regarding your email usage or statistics. * Usage alerts allow you to set the threshold at which an alert will be sent. @@ -358,7 +358,7 @@ For more information about alerts, please see our [User Guide](https://sendgrid. ## Create API keys -**This enpoint allows you to create a new random API Key for the user.** +**This endpoint allows you to create a new random API Key for the user.** A JSON request body containing a "name" property is required. If number of maximum keys is reached, HTTP 403 will be returned. @@ -2339,7 +2339,7 @@ If an IP pool is NOT specified for an email, it will use any IP available, inclu ``` ## Retrieve all IP pools. -**This endpoint allows you to retreive all of your IP pools.** +**This endpoint allows you to retrieve all of your IP pools.** IP Pools allow you to group your dedicated SendGrid IP addresses together. For example, you could create separate pools for your transactional and marketing email. When sending marketing emails, specify that you want to use the marketing IP pool. This allows you to maintain separate reputations for your different email traffic. @@ -3321,7 +3321,7 @@ By integrating with New Relic, you can send your SendGrid email statistics to yo **This endpoint returns a list of all scopes that this user has access to.** -API Keys can be used to authenticate the use of [SendGrids v3 Web API](https://sendgrid.com/docs/API_Reference/Web_API_v3/index.html), or the [Mail API Endpoint](https://sendgrid.com/docs/API_Reference/Web_API/mail.html). API Keys may be assigned certain permissions, or scopes, that limit which API endpoints they are able to access. For a more detailed explanation of how you can use API Key permissios, please visit our [User Guide](https://sendgrid.com/docs/User_Guide/Settings/api_keys.html#-API-Key-Permissions) or [Classroom](https://sendgrid.com/docs/Classroom/Basics/API/api_key_permissions.html). +API Keys can be used to authenticate the use of [SendGrids v3 Web API](https://sendgrid.com/docs/API_Reference/Web_API_v3/index.html), or the [Mail API Endpoint](https://sendgrid.com/docs/API_Reference/Web_API/mail.html). API Keys may be assigned certain permissions, or scopes, that limit which API endpoints they are able to access. For a more detailed explanation of how you can use API Key permissions, please visit our [User Guide](https://sendgrid.com/docs/User_Guide/Settings/api_keys.html#-API-Key-Permissions) or [Classroom](https://sendgrid.com/docs/Classroom/Basics/API/api_key_permissions.html). ### GET /scopes @@ -3443,7 +3443,7 @@ Sender Identities are required to be verified before use. If your domain has bee ``` ## Delete a Sender Identity -**This endoint allows you to delete one of your sender identities.** +**This endpoint allows you to delete one of your sender identities.** Sender Identities are required to be verified before use. If your domain has been whitelabeled it will auto verify on creation. Otherwise an email will be sent to the `from.email`. @@ -3466,7 +3466,7 @@ Sender Identities are required to be verified before use. If your domain has bee ``` ## Resend Sender Identity Verification -**This enpdoint allows you to resend a sender identity verification email.** +**This endpoint allows you to resend a sender identity verification email.** Sender Identities are required to be verified before use. If your domain has been whitelabeled it will auto verify on creation. Otherwise an email will be sent to the `from.email`. @@ -3869,7 +3869,7 @@ Subuser monitor settings allow you to receive a sample of an outgoing message by ``` ## Retrieve the monthly email statistics for a single subuser -**This endpoint allows you to retrive the monthly email statistics for a specific subuser.** +**This endpoint allows you to retrieve the monthly email statistics for a specific subuser.** While you can always view the statistics for all email activity on your account, subuser statistics enable you to view specific segments of your stats for your subusers. Emails sent, bounces, and spam reports are always tracked for subusers. Unsubscribes, clicks, and opens are tracked if you have enabled the required settings. @@ -4526,7 +4526,7 @@ Transactional templates are templates created specifically for transactional ema **This endpoint allows you to create a new version of a template.** -Each transactional template can have multiple versions, each version with its own subject and content. Each user can have up to 300 versions across across all templates. +Each transactional template can have multiple versions, each version with its own subject and content. Each user can have up to 300 versions across all templates. For more information about transactional templates, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Transactional_Templates/index.html). @@ -4553,7 +4553,7 @@ For more information about transactional templates, please see our [User Guide]( **This endpoint allows you to edit a version of one of your transactional templates.** -Each transactional template can have multiple versions, each version with its own subject and content. Each user can have up to 300 versions across across all templates. +Each transactional template can have multiple versions, each version with its own subject and content. Each user can have up to 300 versions across all templates. For more information about transactional templates, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Transactional_Templates/index.html). @@ -4585,7 +4585,7 @@ For more information about transactional templates, please see our [User Guide]( **This endpoint allows you to retrieve a specific version of a template.** -Each transactional template can have multiple versions, each version with its own subject and content. Each user can have up to 300 versions across across all templates. +Each transactional template can have multiple versions, each version with its own subject and content. Each user can have up to 300 versions across all templates. For more information about transactional templates, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Transactional_Templates/index.html). @@ -4616,7 +4616,7 @@ For more information about transactional templates, please see our [User Guide]( **This endpoint allows you to delete one of your transactional template versions.** -Each transactional template can have multiple versions, each version with its own subject and content. Each user can have up to 300 versions across across all templates. +Each transactional template can have multiple versions, each version with its own subject and content. Each user can have up to 300 versions across all templates. For more information about transactional templates, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Transactional_Templates/index.html). @@ -5962,7 +5962,7 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ ``` ## Retrieve all IP whitelabels -**This endpoint allows you to retrieve all of the IP whitelabels that have been createdy by this account.** +**This endpoint allows you to retrieve all of the IP whitelabels that have been created by this account.** You may include a search key by using the "ip" parameter. This enables you to perform a prefix search for a given IP segment (e.g. "192."). @@ -6157,7 +6157,7 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ **This endpoint allows you to retrieve the associated link whitelabel for a subuser.** Link whitelables can be associated with subusers from the parent account. This functionality allows -subusers to send mail using their parent's linke whitelabels. To associate a link whitelabel, the parent account +subusers to send mail using their parent's like whitelabels. To associate a link whitelabel, the parent account must first create a whitelabel and validate it. The parent may then associate that whitelabel with a subuser via the API or the Subuser Management page in the user interface. Email link whitelabels allow all of the click-tracked links you send in your emails to include the URL of your domain instead of sendgrid.net. @@ -6187,7 +6187,7 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ **This endpoint allows you to disassociate a link whitelabel from a subuser.** Link whitelables can be associated with subusers from the parent account. This functionality allows -subusers to send mail using their parent's linke whitelabels. To associate a link whitelabel, the parent account +subusers to send mail using their parent's like whitelabels. To associate a link whitelabel, the parent account must first create a whitelabel and validate it. The parent may then associate that whitelabel with a subuser via the API or the Subuser Management page in the user interface. Email link whitelabels allow all of the click-tracked links you send in your emails to include the URL of your domain instead of sendgrid.net. @@ -6318,7 +6318,7 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ **This endpoint allows you to associate a link whitelabel with a subuser account.** Link whitelables can be associated with subusers from the parent account. This functionality allows -subusers to send mail using their parent's linke whitelabels. To associate a link whitelabel, the parent account +subusers to send mail using their parent's like whitelabels. To associate a link whitelabel, the parent account must first create a whitelabel and validate it. The parent may then associate that whitelabel with a subuser via the API or the Subuser Management page in the user interface. Email link whitelabels allow all of the click-tracked links you send in your emails to include the URL of your domain instead of sendgrid.net. From 3a1733f666e5b153b98e999d4bda4671011dfd40 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=ADcero=20Pablo?= Date: Fri, 6 Oct 2017 21:53:03 -0300 Subject: [PATCH 016/345] Update USAGE.md --- USAGE.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/USAGE.md b/USAGE.md index 96b63ed8..00e66e96 100644 --- a/USAGE.md +++ b/USAGE.md @@ -6157,7 +6157,7 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ **This endpoint allows you to retrieve the associated link whitelabel for a subuser.** Link whitelables can be associated with subusers from the parent account. This functionality allows -subusers to send mail using their parent's like whitelabels. To associate a link whitelabel, the parent account +subusers to send mail using their parent's link whitelabels. To associate a link whitelabel, the parent account must first create a whitelabel and validate it. The parent may then associate that whitelabel with a subuser via the API or the Subuser Management page in the user interface. Email link whitelabels allow all of the click-tracked links you send in your emails to include the URL of your domain instead of sendgrid.net. @@ -6187,7 +6187,7 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ **This endpoint allows you to disassociate a link whitelabel from a subuser.** Link whitelables can be associated with subusers from the parent account. This functionality allows -subusers to send mail using their parent's like whitelabels. To associate a link whitelabel, the parent account +subusers to send mail using their parent's link whitelabels. To associate a link whitelabel, the parent account must first create a whitelabel and validate it. The parent may then associate that whitelabel with a subuser via the API or the Subuser Management page in the user interface. Email link whitelabels allow all of the click-tracked links you send in your emails to include the URL of your domain instead of sendgrid.net. @@ -6318,7 +6318,7 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ **This endpoint allows you to associate a link whitelabel with a subuser account.** Link whitelables can be associated with subusers from the parent account. This functionality allows -subusers to send mail using their parent's like whitelabels. To associate a link whitelabel, the parent account +subusers to send mail using their parent's link whitelabels. To associate a link whitelabel, the parent account must first create a whitelabel and validate it. The parent may then associate that whitelabel with a subuser via the API or the Subuser Management page in the user interface. Email link whitelabels allow all of the click-tracked links you send in your emails to include the URL of your domain instead of sendgrid.net. From c0eb49d6a972d8709323ac606673f125376d0d93 Mon Sep 17 00:00:00 2001 From: DaLun Date: Mon, 9 Oct 2017 13:15:34 -0500 Subject: [PATCH 017/345] Update USAGE.md with one period --- USAGE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/USAGE.md b/USAGE.md index 308ca259..1db7997b 100644 --- a/USAGE.md +++ b/USAGE.md @@ -495,7 +495,7 @@ If the API Key ID does not exist an HTTP 404 will be returned. ``` ## Delete API keys -**This endpoint allows you to revoke an existing API Key** +**This endpoint allows you to revoke an existing API Key.** Authentications using this API Key will fail after this request is made, with some small propogation delay.If the API Key ID does not exist an HTTP 404 will be returned. From 7469b4289cb057b6a7483efb2209afb15fbf9815 Mon Sep 17 00:00:00 2001 From: DaLun Date: Mon, 9 Oct 2017 13:20:28 -0500 Subject: [PATCH 018/345] fix the disappear logo --- README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/README.md b/README.md index 1847b034..99fceeb3 100644 --- a/README.md +++ b/README.md @@ -221,5 +221,4 @@ sendgrid-java is guided and supported by the SendGrid [Developer Experience Team sendgrid-java is maintained and funded by SendGrid, Inc. The names and logos for sendgrid-java are trademarks of SendGrid, Inc. -![SendGrid Logo] -(https://uiux.s3.amazonaws.com/2016-logos/email-logo%402x.png) +![SendGrid Logo](https://uiux.s3.amazonaws.com/2016-logos/email-logo%402x.png) From fd05b9430d222caa7110208c6bae8fb50a6dce57 Mon Sep 17 00:00:00 2001 From: Andy Trimble Date: Mon, 9 Oct 2017 18:05:14 -0600 Subject: [PATCH 019/345] Adding Docker support. --- docker/Dockerfile | 24 ++++++++++++++++++++++++ docker/README.md | 37 +++++++++++++++++++++++++++++++++++++ docker/USAGE.md | 35 +++++++++++++++++++++++++++++++++++ docker/entrypoint.sh | 31 +++++++++++++++++++++++++++++++ 4 files changed, 127 insertions(+) create mode 100644 docker/Dockerfile create mode 100644 docker/README.md create mode 100644 docker/USAGE.md create mode 100644 docker/entrypoint.sh diff --git a/docker/Dockerfile b/docker/Dockerfile new file mode 100644 index 00000000..943b2b50 --- /dev/null +++ b/docker/Dockerfile @@ -0,0 +1,24 @@ +FROM store/oracle/serverjre:8 + +ENV OAI_SPEC_URL="https://raw.githubusercontent.com/sendgrid/sendgrid-oai/master/oai_stoplight.json" + +RUN yum install -y git + +WORKDIR /root + +# install Prism +ADD https://raw.githubusercontent.com/stoplightio/prism/master/install.sh install.sh +RUN chmod +x ./install.sh && \ + ./install.sh && \ + rm ./install.sh + +# set up default sendgrid env +WORKDIR /root/sources +RUN git clone https://github.com/sendgrid/sendgrid-java.git +WORKDIR /root +RUN ln -s /root/sources/sendgrid-java/sendgrid + +COPY entrypoint.sh entrypoint.sh +RUN chmod +x entrypoint.sh +ENTRYPOINT ["./entrypoint.sh"] +CMD ["--mock"] diff --git a/docker/README.md b/docker/README.md new file mode 100644 index 00000000..7758a41a --- /dev/null +++ b/docker/README.md @@ -0,0 +1,37 @@ +# Supported tags and respective `Dockerfile` links + - `v1.0.0`, `latest` [(Dockerfile)](https://github.com/sendgrid/sendgrid-java/blob/master/docker/Dockerfile) + +# Quick reference +Due to Oracle's JDK license, you must build this Docker image using the official Oracle image located in the Docker Store. You will need a Docker store account. Once you have an account, you must accept the Oracle license [here](https://store.docker.com/images/oracle-serverjre-8). On the command line, type `docker login` and provide your credentials. You may then build the image using this command `docker build -t sendgrid/sendgrid-java -f Dockerfile .` + + - **Where to get help:** + [Contact SendGrid Support](https://support.sendgrid.com/hc/en-us) + + - **Where to file issues:** + https://github.com/sendgrid/sendgrid-java/issues + + - **Where to get more info:** + [USAGE.md](https://github.com/sendgrid/sendgrid-java/blob/master/docker/USAGE.md) + + - **Maintained by:** + [SendGrid Inc.](https://sendgrid.com) + +# Usage examples + - Most recent version: `docker run -it sendgrid/sendgrid-java`. + - Your own fork: + ```sh-session + $ git clone https://github.com/you/cool-sendgrid-java.git + $ realpath cool-sendgrid-java + /path/to/cool-sendgrid-java + $ docker run -it -v /path/to/cool-sendgrid-java:/mnt/sendgrid-java sendgrid/sendgrid-java + ``` + +For more detailed information, see [USAGE.md](https://github.com/sendgrid/sendgrid-java/blob/master/docker/USAGE.md). + +# About + +sendgrid-java is guided and supported by the SendGrid [Developer Experience Team](mailto:dx@sendgrid.com). + +sendgrid-java is maintained and funded by SendGrid, Inc. The names and logos for sendgrid-java are trademarks of SendGrid, Inc. + +![SendGrid Logo](https://uiux.s3.amazonaws.com/2016-logos/email-logo%402x.png) diff --git a/docker/USAGE.md b/docker/USAGE.md new file mode 100644 index 00000000..125b90fe --- /dev/null +++ b/docker/USAGE.md @@ -0,0 +1,35 @@ +You can use Docker to easily try out or test sendgrid-java. + + +# Quickstart + +1. Install Docker on your machine. +2. If you have not done so, create a Docker Store account [here](https://store.docker.com/signup?next=%2F) +3. Navigate [here](https://store.docker.com/images/oracle-serverjre-8) and click the "Proceed to Checkout" link (don't worry, it's free). +4. On the command line, execute `docker login` and provide your credentials. +5. Build the Docker image using the command `docker build -t sendgrid/sendgrid-java -f Dockerfile .` +6. Run `docker run -it sendgrid/sendgrid-java`. + + +# Info + +This Docker image contains + - `sendgrid-java` + - Stoplight's Prism, which lets you try out the API without actually sending email + +Run it in interactive mode with `-it`. + +You can mount repositories in the `/mnt/sendgrid-java` and `/mnt/java-http-client` directories to use them instead of the default SendGrid libraries. Read on for more info. + + +# Testing +Testing is easy! Run the container, `cd sendgrid`, and run `./gradlew test`. + + +# About + +sendgrid-java is guided and supported by the SendGrid [Developer Experience Team](mailto:dx@sendgrid.com). + +sendgrid-java is maintained and funded by SendGrid, Inc. The names and logos for sendgrid-java are trademarks of SendGrid, Inc. + +![SendGrid Logo](https://uiux.s3.amazonaws.com/2016-logos/email-logo%402x.png) diff --git a/docker/entrypoint.sh b/docker/entrypoint.sh new file mode 100644 index 00000000..556d85bd --- /dev/null +++ b/docker/entrypoint.sh @@ -0,0 +1,31 @@ +#! /bin/bash +clear + +# check for + link mounted libraries: +if [ -d /mnt/sendgrid-java ] +then + rm /root/sendgrid + ln -s /mnt/sendgrid-java/sendgrid + echo "Linked mounted sendgrid-java's code to /root/sendgrid" +fi + +SENDGRID_JAVA_VERSION="1.0.0" +echo "Welcome to sendgrid-java docker v${SENDGRID_JAVA_VERSION}." +echo + +if [ "$1" != "--no-mock" ] +then + echo "Starting Prism in mock mode. Calls made to Prism will not actually send emails." + echo "Disable this by running this container with --no-mock." + prism run --mock --spec $OAI_SPEC_URL 2> /dev/null & +else + echo "Starting Prism in live (--no-mock) mode. Calls made to Prism will send emails." + prism run --spec $OAI_SPEC_URL 2> /dev/null & +fi +echo "To use Prism, make API calls to localhost:4010. For example," +echo " sg = sendgrid.SendGridAPIClient(" +echo " host='http://localhost:4010/'," +echo " api_key=os.environ.get('SENDGRID_API_KEY_CAMPAIGNS'))" +echo "To stop Prism, run \"kill $!\" from the shell." + +bash \ No newline at end of file From b785ae22c9124d840950defd59cd03f5d704e527 Mon Sep 17 00:00:00 2001 From: scaalabr Date: Mon, 9 Oct 2017 22:52:29 -0500 Subject: [PATCH 020/345] Addressing comments --- src/main/java/com/sendgrid/SendGrid.java | 3 +- src/main/java/com/sendgrid/SendGridApi.java | 40 +++++++++++++++++++-- 2 files changed, 40 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/sendgrid/SendGrid.java b/src/main/java/com/sendgrid/SendGrid.java index 061316b8..96277d3e 100644 --- a/src/main/java/com/sendgrid/SendGrid.java +++ b/src/main/java/com/sendgrid/SendGrid.java @@ -7,7 +7,8 @@ /** * Class SendGrid allows for quick and easy access to the SendGrid API. */ -public class SendGrid implements SendGridApi{ +public class SendGrid implements SendGridAPI { + private static final String VERSION = "3.0.0"; private static final String USER_AGENT = "sendgrid/" + VERSION + ";java"; diff --git a/src/main/java/com/sendgrid/SendGridApi.java b/src/main/java/com/sendgrid/SendGridApi.java index d6273b36..bfbb230c 100644 --- a/src/main/java/com/sendgrid/SendGridApi.java +++ b/src/main/java/com/sendgrid/SendGridApi.java @@ -3,23 +3,59 @@ import java.io.IOException; import java.util.Map; -public interface SendGridApi { +public interface SendGridAPI { + /** + * Initializes SendGrid + * @param apiKey is your SendGrid API Key: https://app.sendgrid.com/settings/api_keys + */ public void initializeSendGrid(String apiKey); + /** + * Initializes SendGrid + * @param apiKey is your SendGrid API Key: https://app.sendgrid.com/settings/api_keys + */ public String getLibraryVersion(); + /** + * Gets the version. + */ public String getVersion(); + /** + * Sets the version. + * @param version the SendGrid version. + */ public void setVersion(String version); + + /** + * Gets the request headers. + */ public Map getRequestHeaders(); + /** + * Adds a request headers. + * @param key the key + * @param value the value + */ public Map addRequestHeader(String key, String value); + /** + * Removes a request headers. + * @param key the key + */ public Map removeRequestHeader(String key); + + /** + * Gets the host. + */ public String getHost(); - + + /** + * Sets the host. + * @param host the host to set + */ public void setHost(String host); /** From dc35aba01fb616c771c215fd9b4980ed1f5b8be3 Mon Sep 17 00:00:00 2001 From: sccalabr Date: Mon, 9 Oct 2017 22:56:32 -0500 Subject: [PATCH 021/345] Rename SendGridApi.java to SendGridAPI.java --- src/main/java/com/sendgrid/{SendGridApi.java => SendGridAPI.java} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/main/java/com/sendgrid/{SendGridApi.java => SendGridAPI.java} (100%) diff --git a/src/main/java/com/sendgrid/SendGridApi.java b/src/main/java/com/sendgrid/SendGridAPI.java similarity index 100% rename from src/main/java/com/sendgrid/SendGridApi.java rename to src/main/java/com/sendgrid/SendGridAPI.java From c983fe4764de3da8d7c2c85d16b9c9bb2d0584e4 Mon Sep 17 00:00:00 2001 From: Andy Trimble Date: Tue, 10 Oct 2017 01:27:46 -0600 Subject: [PATCH 022/345] Added javadocs. --- src/main/java/com/sendgrid/SendGrid.java | 85 ++++++- .../java/com/sendgrid/helpers/mail/Mail.java | 237 +++++++++++++++++- .../sendgrid/helpers/mail/objects/ASM.java | 33 ++- .../helpers/mail/objects/Attachments.java | 101 ++++++++ .../helpers/mail/objects/BccSettings.java | 23 +- .../mail/objects/ClickTrackingSetting.java | 24 +- .../helpers/mail/objects/Content.java | 35 ++- .../sendgrid/helpers/mail/objects/Email.java | 35 ++- .../helpers/mail/objects/FooterSetting.java | 30 ++- .../mail/objects/GoogleAnalyticsSetting.java | 56 ++++- .../helpers/mail/objects/MailSettings.java | 55 +++- .../mail/objects/OpenTrackingSetting.java | 27 +- .../helpers/mail/objects/Personalization.java | 121 ++++++++- .../helpers/mail/objects/Setting.java | 13 +- .../mail/objects/SpamCheckSetting.java | 33 ++- .../objects/SubscriptionTrackingSetting.java | 50 +++- .../mail/objects/TrackingSettings.java | 47 +++- 17 files changed, 967 insertions(+), 38 deletions(-) diff --git a/src/main/java/com/sendgrid/SendGrid.java b/src/main/java/com/sendgrid/SendGrid.java index 421b11a9..6bf14295 100644 --- a/src/main/java/com/sendgrid/SendGrid.java +++ b/src/main/java/com/sendgrid/SendGrid.java @@ -5,44 +5,66 @@ import java.util.Map; /** - * Class SendGrid allows for quick and easy access to the SendGrid API. - */ + * Class SendGrid allows for quick and easy access to the SendGrid API. + */ public class SendGrid { + /** The current library version. */ private static final String VERSION = "3.0.0"; + + /** The user agent string to return to SendGrid. */ private static final String USER_AGENT = "sendgrid/" + VERSION + ";java"; + /** The user's API key. */ private String apiKey; + + /** The SendGrid host to which to connect. */ private String host; + + /** The API version. */ private String version; + + /** The HTTP client. */ private Client client; + + /** The request headers container. */ private Map requestHeaders; /** - * @param apiKey is your SendGrid API Key: https://app.sendgrid.com/settings/api_keys - */ + * Construct a new SendGrid API wrapper. + * @param apiKey is your SendGrid API Key: https://app.sendgrid.com/settings/api_keys + * @return a SendGrid object. + */ public SendGrid(String apiKey) { this.client = new Client(); initializeSendGrid(apiKey); } /** - * @param apiKey is your SendGrid API Key: https://app.sendgrid.com/settings/api_keys - * @param test is true if you are unit testing - */ + * Construct a new SendGrid API wrapper. + * @param apiKey is your SendGrid API Key: https://app.sendgrid.com/settings/api_keys + * @param test is true if you are unit testing + * @return a SendGrid object. + */ public SendGrid(String apiKey, Boolean test) { this.client = new Client(test); initializeSendGrid(apiKey); } /** + * Construct a new SendGrid API wrapper. * @param apiKey is your SendGrid API Key: https://app.sendgrid.com/settings/api_keys * @param client the Client to use (allows to customize its configuration) + * @return a SendGrid object. */ public SendGrid(String apiKey, Client client) { this.client = client; initializeSendGrid(apiKey); } + /** + * Initialize the client. + * @param apiKey the user's API key. + */ public void initializeSendGrid(String apiKey) { this.apiKey = apiKey; this.host = "api.sendgrid.com"; @@ -53,50 +75,91 @@ public void initializeSendGrid(String apiKey) { this.requestHeaders.put("Accept", "application/json"); } + /** + * Retrieve the current library version. + * @return the current version. + */ public String getLibraryVersion() { return this.VERSION; } + /** + * Get the API version. + * @return the current API versioin (v3 by default). + */ public String getVersion() { return this.version; } + /** + * Set the API version. + * @param version the new version. + */ public void setVersion(String version) { this.version = version; } + /** + * Obtain the request headers. + * @return the request headers. + */ public Map getRequestHeaders() { return this.requestHeaders; } + /** + * Add a new request header. + * @param key the header key. + * @param value the header value. + * @return the new set of request headers. + */ public Map addRequestHeader(String key, String value) { this.requestHeaders.put(key, value); return getRequestHeaders(); } + /** + * Remove a request header. + * @param key the header key to remove. + * @return the new set of request headers. + */ public Map removeRequestHeader(String key) { this.requestHeaders.remove(key); return getRequestHeaders(); } + /** + * Get the SendGrid host (api.sendgrid.com by default). + * @return the SendGrid host. + */ public String getHost() { return this.host; } + /** + * Set the SendGrid host. + * @host the new SendGrid host. + */ public void setHost(String host) { this.host = host; } /** - * Class makeCall makes the call to the SendGrid API, override this method for testing. - */ + * Class makeCall makes the call to the SendGrid API, override this method for testing. + * @param request the request to make. + * @return the response object. + * @throws IOException in case of a network error. + */ public Response makeCall(Request request) throws IOException { return client.api(request); } /** - * Class api sets up the request to the SendGrid API, this is main interface. - */ + * Class api sets up the request to the SendGrid API, this is main interface. + * @param request the request object. + * @return the response object. + * @throws IOException in case of a network error. + */ public Response api(Request request) throws IOException { Request req = new Request(); req.setMethod(request.getMethod()); diff --git a/src/main/java/com/sendgrid/helpers/mail/Mail.java b/src/main/java/com/sendgrid/helpers/mail/Mail.java index beba5a53..edf02a15 100644 --- a/src/main/java/com/sendgrid/helpers/mail/Mail.java +++ b/src/main/java/com/sendgrid/helpers/mail/Mail.java @@ -19,26 +19,92 @@ import java.util.Map; /** - * Class Mail builds an object that sends an email through SendGrid. - */ + * Class Mail builds an object that sends an email through SendGrid. + * Note that this object is not thread safe. + */ @JsonInclude(Include.NON_DEFAULT) public class Mail { + + /** The email's from field. */ @JsonProperty("from") public Email from; + + /** The email's subject line. This is the global, or + * “message level”, subject of your email. This may + * be overridden by personalizations[x].subject. + */ @JsonProperty("subject") public String subject; + + /** + * The email's personalization. Each object within + * personalizations can be thought of as an envelope + * - it defines who should receive an individual message + * and how that message should be handled. + */ @JsonProperty("personalizations") public List personalization; + + /** The email's content. */ @JsonProperty("content") public List content; + + /** The email's attachments. */ @JsonProperty("attachments") public List attachments; + + /** The email's template ID. */ @JsonProperty("template_id") public String templateId; + + /** + * The email's sections. An object of key/value pairs that + * define block sections of code to be used as substitutions. + */ @JsonProperty("sections") public Map sections; + + /** The email's headers. */ @JsonProperty("headers") public Map headers; + + /** The email's categories. */ @JsonProperty("categories") public List categories; + + /** + * The email's custom arguments. Values that are specific to + * the entire send that will be carried along with the email + * and its activity data. Substitutions will not be made on + * custom arguments, so any string that is entered into this + * parameter will be assumed to be the custom argument that + * you would like to be used. This parameter is overridden by + * personalizations[x].custom_args if that parameter has been + * defined. Total custom args size may not exceed 10,000 bytes. + */ @JsonProperty("custom_args") public Map customArgs; + + /** + * A unix timestamp allowing you to specify when you want + * your email to be delivered. This may be overridden by + * the personalizations[x].send_at parameter. Scheduling + * more than 72 hours in advance is forbidden. + */ @JsonProperty("send_at") public long sendAt; + + /** + * This ID represents a batch of emails to be sent at the + * same time. Including a batch_id in your request allows + * you include this email in that batch, and also enables + * you to cancel or pause the delivery of that batch. For + * more information, see https://sendgrid.com/docs/API_Reference/Web_API_v3/cancel_schedule_send. + */ @JsonProperty("batch_id") public String batchId; + + /** The email's unsubscribe handling object. */ @JsonProperty("asm") public ASM asm; + + /** The email's IP pool name. */ @JsonProperty("ip_pool_name") public String ipPoolId; + + /** The email's mail settings. */ @JsonProperty("mail_settings") public MailSettings mailSettings; + + /** The email's tracking settings. */ @JsonProperty("tracking_settings") public TrackingSettings trackingSettings; + + /** The email's reply to address. */ @JsonProperty("reply_to") public Email replyTo; private static final ObjectMapper SORTED_MAPPER = new ObjectMapper(); @@ -46,10 +112,18 @@ public class Mail { SORTED_MAPPER.configure(SerializationFeature.ORDER_MAP_ENTRIES_BY_KEYS, true); } + /** Construct a new Mail object. */ public Mail() { return; } + /** + * Construct a new Mail object. + * @param from the email's from address. + * @param subject the email's subject line. + * @param to the email's recipient. + * @param content the email's content. + */ public Mail(Email from, String subject, Email to, Content content) { this.setFrom(from); @@ -60,38 +134,71 @@ public Mail(Email from, String subject, Email to, Content content) this.addContent(content); } + /** + * Get the email's from address. + * @return the email's from address. + */ @JsonProperty("from") public Email getFrom() { return this.from; } + /** + * Set the email's from address. + * @param from the email's from address. + */ public void setFrom(Email from) { this.from = from; } + /** + * Get the email's subject line. + * @return the email's subject line. + */ @JsonProperty("subject") public String getSubject() { return subject; } + /** + * Set the email's subject line. + * @param subject the email's subject line. + */ public void setSubject(String subject) { this.subject = subject; } + /** + * Get the email's unsubscribe handling object (ASM). + * @return the email's ASM. + */ @JsonProperty("asm") public ASM getASM() { return asm; } + /** + * Set the email's unsubscribe handling object (ASM). + * @param asm the email's ASM. + */ public void setASM(ASM asm) { this.asm = asm; } + /** + * Get the email's personalizations. Content added to the returned + * list will be included when sent. + * @return the email's personalizations. + */ @JsonProperty("personalizations") public List getPersonalization() { return personalization; } + /** + * Add a personalizaton to the email. + * @param personalization a personalization. + */ public void addPersonalization(Personalization personalization) { if (this.personalization == null) { this.personalization = new ArrayList(); @@ -101,11 +208,20 @@ public void addPersonalization(Personalization personalization) { } } + /** + * Get the email's content. Content added to the returned list + * will be included when sent. + * @return the email's content. + */ @JsonProperty("content") public List getContent() { return content; } + /** + * Add content to this email. + * @param content content to add to this email. + */ public void addContent(Content content) { Content newContent = new Content(); newContent.setType(content.getType()); @@ -118,11 +234,20 @@ public void addContent(Content content) { } } + /** + * Get the email's attachments. Attachments added to the returned + * list will be included when sent. + * @return the email's attachments. + */ @JsonProperty("attachments") public List getAttachments() { return attachments; } + /** + * Add attachments to the email. + * @param attachments attachments to add. + */ public void addAttachments(Attachments attachments) { Attachments newAttachment = new Attachments(); newAttachment.setContent(attachments.getContent()); @@ -138,20 +263,38 @@ public void addAttachments(Attachments attachments) { } } + /** + * Get the email's template ID. + * @return the email's template ID. + */ @JsonProperty("template_id") public String getTemplateId() { return this.templateId; } + /** + * Set the email's template ID. + * @param templateId the email's template ID. + */ public void setTemplateId(String templateId) { this.templateId = templateId; } + /** + * Get the email's sections. Sections added to the returned list + * will be included when sent. + * @return the email's sections. + */ @JsonProperty("sections") public Map getSections() { return sections; } + /** + * Add a section to the email. + * @param key the section's key. + * @param value the section's value. + */ public void addSection(String key, String value) { if (sections == null) { sections = new HashMap(); @@ -161,12 +304,21 @@ public void addSection(String key, String value) { } } + /** + * Get the email's headers. Headers added to the returned list + * will be included when sent. + * @return the email's headers. + */ @JsonProperty("headers") public Map getHeaders() { return headers; } - + /** + * Add a header to the email. + * @param key the header's key. + * @param value the header's value. + */ public void addHeader(String key, String value) { if (headers == null) { headers = new HashMap(); @@ -176,11 +328,20 @@ public void addHeader(String key, String value) { } } + /** + * Get the email's categories. Categories added to the returned list + * will be included when sent. + * @return the email's categories. + */ @JsonProperty("categories") public List getCategories() { return categories; } + /** + * Add a category to the email. + * @param category the category. + */ public void addCategory(String category) { if (categories == null) { categories = new ArrayList(); @@ -190,11 +351,21 @@ public void addCategory(String category) { } } + /** + * Get the email's custom arguments. Custom arguments added to the returned list + * will be included when sent. + * @return the email's custom arguments. + */ @JsonProperty("custom_args") public Map getCustomArgs() { return customArgs; } + /** + * Add a custom argument to the email. + * @param key argument's key. + * @param value the argument's value. + */ public void addCustomArg(String key, String value) { if (customArgs == null) { customArgs = new HashMap(); @@ -204,63 +375,113 @@ public void addCustomArg(String key, String value) { } } + /** + * Get the email's send at time (Unix timestamp). + * @return the email's send at time. + */ @JsonProperty("send_at") public long sendAt() { return sendAt; } + /** + * Set the email's send at time (Unix timestamp). + * @param sendAt the send at time. + */ public void setSendAt(long sendAt) { this.sendAt = sendAt; } + /** + * Get the email's batch ID. + * @return the batch ID. + */ @JsonProperty("batch_id") public String getBatchId() { return batchId; } + /** + * Set the email's batch ID. + * @param batchId the batch ID. + */ public void setBatchId(String batchId) { this.batchId = batchId; } + /** + * Get the email's IP pool ID. + * @return the IP pool ID. + */ @JsonProperty("ip_pool_name") public String getIpPoolId() { return ipPoolId; } + /** + * Set the email's IP pool ID. + * @param ipPoolId the IP pool ID. + */ public void setIpPoolId(String ipPoolId) { this.ipPoolId = ipPoolId; } + /** + * Get the email's settings. + * @return the settings. + */ @JsonProperty("mail_settings") public MailSettings getMailSettings() { return mailSettings; } + /** + * Set the email's settings. + * @param mailSettings the settings. + */ public void setMailSettings(MailSettings mailSettings) { this.mailSettings = mailSettings; } + /** + * Get the email's tracking settings. + * @return the tracking settings. + */ @JsonProperty("tracking_settings") public TrackingSettings getTrackingSettings() { return trackingSettings; } + /** + * Set the email's tracking settings. + * @param trackingSettings the tracking settings. + */ public void setTrackingSettings(TrackingSettings trackingSettings) { this.trackingSettings = trackingSettings; } + /** + * Get the email's reply to address. + * @return the reply to address. + */ @JsonProperty("reply_to") public Email getReplyto() { return replyTo; } + /** + * Set the email's reply to address. + * @param replyTo the reply to address. + */ public void setReplyTo(Email replyTo) { this.replyTo = replyTo; } /** - * Create a string represenation of the Mail object JSON. - */ + * Create a string represenation of the Mail object JSON. + * @return a JSON string. + * @throws IOException in case of a JSON marshal error. + */ public String build() throws IOException { try { //ObjectMapper mapper = new ObjectMapper(); @@ -271,8 +492,10 @@ public String build() throws IOException { } /** - * Create a string represenation of the Mail object JSON and pretty print it. - */ + * Create a string represenation of the Mail object JSON and pretty print it. + * @return a pretty JSON string. + * @throws IOException in case of a JSON marshal error. + */ public String buildPretty() throws IOException { try { ObjectMapper mapper = new ObjectMapper(); diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/ASM.java b/src/main/java/com/sendgrid/helpers/mail/objects/ASM.java index 1a65a65d..00763af7 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/ASM.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/ASM.java @@ -6,26 +6,49 @@ import java.util.Arrays; +/** + * An object allowing you to specify how to handle unsubscribes. + */ @JsonInclude(Include.NON_DEFAULT) public class ASM { + + /** The group ID. */ @JsonProperty("group_id") private int groupId; + + /** The groups to display property. */ @JsonProperty("groups_to_display") private int[] groupsToDisplay; - + + /** + * Get the group ID. + * @return the group ID. + */ @JsonProperty("group_id") public int getGroupId() { return groupId; } - + + /** + * Set the group ID. + * @param groupId the group ID. + */ public void setGroupId(int groupId) { this.groupId = groupId; } - + + /** + * Get the groups to display. + * @return the groups to display. + */ @JsonProperty("groups_to_display") public int[] getGroupsToDisplay() { return groupsToDisplay; } - + + /** + * Set the groups to display. + * @param groupsToDisplay the groups to display. + */ public void setGroupsToDisplay(int[] groupsToDisplay) { this.groupsToDisplay = Arrays.copyOf(groupsToDisplay, groupsToDisplay.length); } -} \ No newline at end of file +} diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/Attachments.java b/src/main/java/com/sendgrid/helpers/mail/objects/Attachments.java index 9323b837..059fc835 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/Attachments.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/Attachments.java @@ -8,59 +8,133 @@ import java.io.*; +/** + * An attachment object. + */ @JsonInclude(Include.NON_DEFAULT) public class Attachments { + + /** The attachment content. */ @JsonProperty("content") private String content; + + /** + * The mime type of the content you are attaching. For example, + * “text/plain” or “text/html”. + */ @JsonProperty("type") private String type; + + /** The attachment file name. */ @JsonProperty("filename") private String filename; + + /** The attachment disposition. */ @JsonProperty("disposition") private String disposition; + + /** + * The attachment content ID. This is used when the + * disposition is set to “inline” and the attachment + * is an image, allowing the file to be displayed within + * the body of your email. + */ @JsonProperty("content_id") private String contentId; + /** + * Get the attachment's content. + * @return the content. + */ @JsonProperty("content") public String getContent() { return content; } + /** + * Set the attachment's content. + * @param content the content. + */ public void setContent(String content) { this.content = content; } + /** + * Get the mime type of the content you are attaching. For example, + * “text/plain” or “text/html”. + * @return the mime type. + */ @JsonProperty("type") public String getType() { return type; } + /** + * Set the mime type of the content. + * @param type the mime type. + */ public void setType(String type) { this.type = type; } + /** + * Get the filename for this attachment. + * @return the file name. + */ @JsonProperty("filename") public String getFilename() { return filename; } + /** + * Set the filename for this attachment. + * @param filename the filename. + */ public void setFilename(String filename) { this.filename = filename; } + /** + * Get the content-disposition of the attachment specifying + * how you would like the attachment to be displayed. + * For example, “inline” results in the attached file + * being displayed automatically within the message + * while “attachment” results in the attached file + * requiring some action to be taken before it is + * displayed (e.g. opening or downloading the file). + * @return the disposition. + */ @JsonProperty("disposition") public String getDisposition() { return disposition; } + /** + * Set the content-disposition of the attachment. + * @param disposition the disposition. + */ public void setDisposition(String disposition) { this.disposition = disposition; } + /** + * Get the attachment content ID. This is used when the + * disposition is set to “inline” and the attachment + * is an image, allowing the file to be displayed within + * the body of your email. + * @return the content ID. + */ @JsonProperty("content_id") public String getContentId() { return contentId; } + /** + * Set the content ID. + * @param contentId the content ID. + */ public void setContentId(String contentId) { this.contentId = contentId; } + /** + * A helper object to construct usable attachments. + */ @JsonIgnoreType public static class Builder { @@ -72,6 +146,12 @@ public static class Builder { private String disposition; private String contentId; + /** + * Construct a new attachment builder. + * @param fileName the filename to include. + * @param content an input stream for the content. + * @throws IllegalArgumentException in case either the fileName or the content is null. + */ public Builder(String fileName, InputStream content) { if (fileName == null) { throw new IllegalArgumentException("File name mustn't be null"); @@ -85,6 +165,12 @@ public Builder(String fileName, InputStream content) { this.content = encodeToBase64(content); } + /** + * Construct a new attachment builder. + * @param fileName the filename to include. + * @param content an input string for the content. + * @throws IllegalArgumentException in case either the fileName or the content is null. + */ public Builder(String fileName, String content) { if (fileName == null) { throw new IllegalArgumentException("File name mustn't be null"); @@ -112,21 +198,36 @@ private String encodeToBase64(InputStream content) { } } + /** + * Set the type of this attachment builder. + * @param type the attachment type. + */ public Builder withType(String type) { this.type = type; return this; } + /** + * Set the disposition of this attachment builder. + * @param disposition the disposition. + */ public Builder withDisposition(String disposition) { this.disposition = disposition; return this; } + /** + * Set the content ID of this attachment builder. + * @param contentId the content ID. + */ public Builder withContentId(String contentId) { this.contentId = contentId; return this; } + /** + * Construct the attachments object. + */ public Attachments build() { Attachments attachments = new Attachments(); attachments.setContent(content); diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/BccSettings.java b/src/main/java/com/sendgrid/helpers/mail/objects/BccSettings.java index 176387fa..37be0866 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/BccSettings.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/BccSettings.java @@ -4,26 +4,47 @@ import com.fasterxml.jackson.annotation.JsonInclude.Include; import com.fasterxml.jackson.annotation.JsonProperty; +/** + * This object allows you to have a blind carbon copy + * automatically sent to the specified email address + * for every email that is sent. + */ @JsonInclude(Include.NON_DEFAULT) public class BccSettings { @JsonProperty("enable") private boolean enable; @JsonProperty("email") private String email; + /** + * Determines if this setting is enabled. + * @return true if BCC is enabled, false otherwise. + */ @JsonProperty("enable") public boolean getEnable() { return enable; } + /** + * Set whether or not BCC is enabled. + * @param enable true if BCC is enabled, false otherwise. + */ public void setEnable(boolean enable) { this.enable = enable; } + /** + * Get the email address that you would like to receive the BCC. + * @return the address. + */ @JsonProperty("email") public String getEmail() { return this.email; } + /** + * Set the email address that you would like to receive the BCC. + * @param email the address. + */ public void setEmail(String email) { this.email = email; } -} \ No newline at end of file +} diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/ClickTrackingSetting.java b/src/main/java/com/sendgrid/helpers/mail/objects/ClickTrackingSetting.java index 839c8fbf..e901e086 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/ClickTrackingSetting.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/ClickTrackingSetting.java @@ -4,26 +4,48 @@ import com.fasterxml.jackson.annotation.JsonInclude.Include; import com.fasterxml.jackson.annotation.JsonProperty; +/** + * Settings to determine how you would like to track the + * metrics of how your recipients interact with your email. + */ @JsonInclude(Include.NON_DEFAULT) public class ClickTrackingSetting { @JsonProperty("enable") private boolean enable; @JsonProperty("enable_text") private boolean enableText; + /** + * Determines if this setting is enabled. + * @return true if click tracking is enabled, false otherwise. + */ @JsonProperty("enable") public boolean getEnable() { return enable; } + /** + * Set if this setting is enabled. + * @param enable true if click tracking is enabled, false otherwise. + */ public void setEnable(boolean enable) { this.enable = enable; } + /** + * Get the enabled text. This indicates if this + * setting should be included in the text/plain + * portion of your email. + * @return the enable text. + */ @JsonProperty("enable_text") public boolean getEnableText() { return enableText; } + /** + * Set the enalbed text. + * @param enableText the enable text. + */ public void setEnableText(boolean enableText) { this.enableText = enableText; } -} \ No newline at end of file +} diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/Content.java b/src/main/java/com/sendgrid/helpers/mail/objects/Content.java index b00f9566..f6621ac9 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/Content.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/Content.java @@ -4,35 +4,66 @@ import com.fasterxml.jackson.annotation.JsonInclude.Include; import com.fasterxml.jackson.annotation.JsonProperty; +/** + * An object in which you may specify the content of your email. + */ @JsonInclude(Include.NON_DEFAULT) public class Content { @JsonProperty("type") private String type; @JsonProperty("value") private String value; + /** + * Construct an empty content object. + */ public Content() { - return; + } + /** + * Construct a content object with the specified type and value. + * @param type the mime type. + * @param value the content. + */ public Content(String type, String value) { this.setType(type); this.setValue(value); } + /** + * Get the mime type of the content you are including + * in your email. For example, “text/plain” or “text/html”. + * @return the mime type. + */ @JsonProperty("type") public String getType() { return type; } + /** + * Set the mime type of the content you are including + * in your email. For example, “text/plain” or “text/html”. + * @param type the mime type. + */ public void setType(String type) { this.type = type; } + /** + * Get the actual content of the specified mime type + * that you are including in your email. + * @return the value. + */ @JsonProperty("value") public String getValue() { return value; } + /** + * Set the actual content of the specified mime type + * that you are including in your email. + * @param value the value. + */ public void setValue(String value) { this.value = value; } -} \ No newline at end of file +} diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/Email.java b/src/main/java/com/sendgrid/helpers/mail/objects/Email.java index 43396a85..5642e345 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/Email.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/Email.java @@ -4,39 +4,70 @@ import com.fasterxml.jackson.annotation.JsonInclude.Include; import com.fasterxml.jackson.annotation.JsonProperty; +/** + * An email address represented as an address name pair. + */ @JsonInclude(Include.NON_DEFAULT) public class Email { @JsonProperty("name") private String name; @JsonProperty("email") private String email; + /** + * Construct an empty email. + */ public Email() { - return; + } + /** + * Construct an email with the supplied email and an empty name. + * @param email an email address. + */ public Email(String email) { this.setEmail(email); } + /** + * Construct an email with the supplied address and name. + * @param email an email address. + * @param name a name. + */ public Email(String email, String name) { this.setEmail(email); this.setName(name); } + /** + * Get the name. + * @return the name. + */ @JsonProperty("name") public String getName() { return name; } + /** + * Set the name. + * @param name the name. + */ public void setName(String name) { this.name = name; } + /** + * Get the email address. + * @return the email address. + */ @JsonProperty("email") public String getEmail() { return email; } + /** + * Set the email address. + * @param email the email address. + */ public void setEmail(String email) { this.email = email; } -} \ No newline at end of file +} diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/FooterSetting.java b/src/main/java/com/sendgrid/helpers/mail/objects/FooterSetting.java index 8e542c7f..1428b66b 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/FooterSetting.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/FooterSetting.java @@ -4,36 +4,64 @@ import com.fasterxml.jackson.annotation.JsonInclude.Include; import com.fasterxml.jackson.annotation.JsonProperty; +/** + * An object representing the default footer + * that you would like included on every email. + */ @JsonInclude(Include.NON_DEFAULT) public class FooterSetting { @JsonProperty("enable") private boolean enable; @JsonProperty("text") private String text; @JsonProperty("html") private String html; + /** + * Get whether or not the footer is enabled. + * @return true if the footer is enabled, false otherwise. + */ @JsonProperty("enable") public boolean getEnable() { return enable; } + /** + * Set whether or not the footer is enabled. + * @param enable true if the footer is enabled, false otherwise. + */ public void setEnable(boolean enable) { this.enable = enable; } + /** + * Get the plain text content of the footer. + * @return the footer plain text. + */ @JsonProperty("text") public String getText() { return text; } + /** + * Set the plain text content of the footer. + * @param text the footer plain text. + */ public void setText(String text) { this.text = text; } + /** + * Get the HTML content of the footer. + * @return the footer HTML. + */ @JsonProperty("html") public String getHtml() { return html; } + /** + * Set the HTML content of the footer. + * @param html the footer HTML. + */ public void setHtml(String html) { this.html = html; } -} \ No newline at end of file +} diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/GoogleAnalyticsSetting.java b/src/main/java/com/sendgrid/helpers/mail/objects/GoogleAnalyticsSetting.java index ce30edbc..eac91899 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/GoogleAnalyticsSetting.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/GoogleAnalyticsSetting.java @@ -4,6 +4,9 @@ import com.fasterxml.jackson.annotation.JsonInclude.Include; import com.fasterxml.jackson.annotation.JsonProperty; +/** + * An object configuring the tracking provided by Google Analytics. + */ @JsonInclude(Include.NON_DEFAULT) public class GoogleAnalyticsSetting { @JsonProperty("enable") private boolean enable; @@ -13,57 +16,108 @@ public class GoogleAnalyticsSetting { @JsonProperty("utm_campaign") private String campaignName; @JsonProperty("utm_medium") private String campaignMedium; + /** + * Get whether or not this setting is enabled. + * @return true if enabled, false otherwise. + */ @JsonProperty("enable") public boolean getEnable() { return enable; } + /** + * Set whether or not this setting is enabled. + * @param enable true if enabled, false otherwise. + */ public void setEnable(boolean enable) { this.enable = enable; } + /** + * Get the name of the referrer source. + * (e.g. Google, SomeDomain.com, or Marketing Email) + * @return the referrer source. + */ @JsonProperty("utm_source") public String getCampaignSource() { return campaignSource; } + /** + * Set the name of the referrer source. + * @param campaignSource the referrer source. + */ public void setCampaignSource(String campaignSource) { this.campaignSource = campaignSource; } + /** + * Get the term used to identify any paid keywords. + * @return the term. + */ @JsonProperty("utm_term") public String getCampaignTerm() { return campaignTerm; } + /** + * Set the term used to identify any paid keywords. + * @param campaignTerm the term. + */ public void setCampaignTerm(String campaignTerm) { this.campaignTerm = campaignTerm; } + /** + * Get the content Used to differentiate your campaign + * from advertisements. + * @return the content. + */ @JsonProperty("utm_content") public String getCampaignContent() { return campaignContent; } + /** + * Set the content Used to differentiate your campaign + * from advertisements. + * @param campaignContent the content. + */ public void setCampaignContent(String campaignContent) { this.campaignContent = campaignContent; } + /** + * Get the name of the campaign. + * @return the name. + */ @JsonProperty("utm_campaign") public String getCampaignName() { return campaignName; } + /** + * Set the name of the campaign. + * @param campaignName the name. + */ public void setCampaignName(String campaignName) { this.campaignName = campaignName; } + /** + * Get the name of the marketing medium. (e.g. Email) + * @return the medium name. + */ @JsonProperty("utm_medium") public String getCampaignMedium() { return campaignMedium; } + /** + * Set the name of the marketing medium. (e.g. Email) + * @param campaignMedium the medium name. + */ public void setCampaignMedium(String campaignMedium) { this.campaignMedium = campaignMedium; } -} \ No newline at end of file +} diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/MailSettings.java b/src/main/java/com/sendgrid/helpers/mail/objects/MailSettings.java index 63580458..1210eb08 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/MailSettings.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/MailSettings.java @@ -4,6 +4,11 @@ import com.fasterxml.jackson.annotation.JsonInclude.Include; import com.fasterxml.jackson.annotation.JsonProperty; +/** + * An object representing a collection of different mail + * settings that you can use to specify how you would + * like this email to be handled. + */ @JsonInclude(Include.NON_DEFAULT) public class MailSettings { @JsonProperty("bcc") private BccSettings bccSettings; @@ -12,48 +17,96 @@ public class MailSettings { @JsonProperty("sandbox_mode") private Setting sandBoxMode; @JsonProperty("spam_check") private SpamCheckSetting spamCheckSetting; + /** + * Get the BCC settings. + * @return the BCC settings. + */ @JsonProperty("bcc") public BccSettings getBccSettings() { return bccSettings; } + /** + * Set the BCC settings. + * @param bccSettings the BCC settings. + */ public void setBccSettings(BccSettings bccSettings) { this.bccSettings = bccSettings; } + /** + * A setting that allows you to bypass all unsubscribe + * groups and suppressions to ensure that the email is + * delivered to every single recipient. This should only + * be used in emergencies when it is absolutely necessary + * that every recipient receives your email. + * @return the bypass list setting. + */ @JsonProperty("bypass_list_management") public Setting getBypassListManagement() { return bypassListManagement; } + /** + * Set the bypass setting. + * @param bypassListManagement the setting. + */ public void setBypassListManagement(Setting bypassListManagement) { this.bypassListManagement = bypassListManagement; } + /** + * Get the the footer settings that you would like included on every email. + * @return the setting. + */ @JsonProperty("footer") public FooterSetting getFooterSetting() { return footerSetting; } + /** + * Set the the footer settings that you would like included on every email. + * @param footerSetting the setting. + */ public void setFooterSetting(FooterSetting footerSetting) { this.footerSetting = footerSetting; } + /** + * Get sandbox mode. This allows you to send a test email to + * ensure that your request body is valid and formatted correctly. + * @return the sandbox mode setting. + */ @JsonProperty("sandbox_mode") public Setting getSandBoxMode() { return sandBoxMode; } + /** + * Set sandbox mode. + * @param sandBoxMode the sandbox mode setting. + */ + @JsonProperty("sandbox_mode") public void setSandboxMode(Setting sandBoxMode) { this.sandBoxMode = sandBoxMode; } + /** + * Get the spam check setting. This allows you to test the + * content of your email for spam. + * @return the spam check setting. + */ @JsonProperty("spam_check") public SpamCheckSetting getSpamCheck() { return spamCheckSetting; } + /** + * Set the spam check setting. This allows you to test the + * content of your email for spam. + * @param spamCheckSetting the spam check setting. + */ public void setSpamCheckSetting(SpamCheckSetting spamCheckSetting) { this.spamCheckSetting = spamCheckSetting; } -} \ No newline at end of file +} diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/OpenTrackingSetting.java b/src/main/java/com/sendgrid/helpers/mail/objects/OpenTrackingSetting.java index aeb7ede1..deba6d33 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/OpenTrackingSetting.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/OpenTrackingSetting.java @@ -4,26 +4,51 @@ import com.fasterxml.jackson.annotation.JsonInclude.Include; import com.fasterxml.jackson.annotation.JsonProperty; +/** + * An open tracking settings object. This allows you to track + * whether the email was opened or not, but including a single + * pixel image in the body of the content. When the pixel is + * loaded, we can log that the email was opened. + */ @JsonInclude(Include.NON_DEFAULT) public class OpenTrackingSetting { @JsonProperty("enable") private boolean enable; @JsonProperty("substitution_tag") private String substitutionTag; + /** + * Determines if this setting is enabled. + * @return true if open tracking is enabled, false otherwise. + */ @JsonProperty("enable") public boolean getEnable() { return enable; } + /** + * Set if this setting is enabled. + * @param enable true if open tracking is enabled, false otherwise. + */ public void setEnable(boolean enable) { this.enable = enable; } + /** + * Get the substituion tag. This allows you to specify a + * substitution tag that you can insert in the body of + * your email at a location that you desire. This tag will + * be replaced by the open tracking pixel. + * @return the substitution tag. + */ @JsonProperty("substitution_tag") public String getSubstitutionTag() { return substitutionTag; } + /** + * Set the substitution tag. + * @param substitutionTag the substitution tag. + */ public void setSubstitutionTag(String substitutionTag) { this.substitutionTag = substitutionTag; } -} \ No newline at end of file +} diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/Personalization.java b/src/main/java/com/sendgrid/helpers/mail/objects/Personalization.java index 734dc9c0..b72f2316 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/Personalization.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/Personalization.java @@ -10,6 +10,12 @@ import java.util.List; import java.util.Map; +/** + * An object representing a message and its metadata. + * A personalization can be thought of as an envelope + * - it defines who should receive an individual message + * and how that message should be handled. + */ @JsonInclude(Include.NON_DEFAULT) public class Personalization { @JsonProperty("to") private List tos; @@ -21,6 +27,16 @@ public class Personalization { @JsonProperty("custom_args") private Map customArgs; @JsonProperty("send_at") private long sendAt; + /** + * Get the to list. This is an array of recipients. Each object + * within this array may contain the name, but must always + * contain the email, of a recipient. + *

+ * The maximum number of entries is 1000. + *

+ * Content added to the returned list will be included when sent. + * @return the to list. + */ @JsonProperty("to") public List getTos() { if(tos == null) @@ -28,6 +44,10 @@ public List getTos() { return tos; } + /** + * Add a recipient. + * @param email an email address. + */ public void addTo(Email email) { Email newEmail = new Email(); newEmail.setName(email.getName()); @@ -40,6 +60,16 @@ public void addTo(Email email) { } } + /** + * Set the CC list. This is an array of recipients. Each object + * within this array may contain the name, but must always + * contain the email, of a recipient. + *

+ * The maximum number of entries is 1000. + *

+ * Content added to the returned list will be included when sent. + * @return the CC list. + */ @JsonProperty("cc") public List getCcs() { if(ccs == null) @@ -47,6 +77,10 @@ public List getCcs() { return ccs; } + /** + * Add a recipient. + * @param email an email address. + */ public void addCc(Email email) { Email newEmail = new Email(); newEmail.setName(email.getName()); @@ -59,6 +93,16 @@ public void addCc(Email email) { } } + /** + * Set the BCC list. This is an array of recipients. Each object + * within this array may contain the name, but must always + * contain the email, of a recipient. + *

+ * The maximum number of entries is 1000. + *

+ * Content added to the returned list will be included when sent. + * @return the BCC list. + */ @JsonProperty("bcc") public List getBccs() { if(bccs == null) @@ -66,6 +110,10 @@ public List getBccs() { return bccs; } + /** + * Add a recipient. + * @param email an email address. + */ public void addBcc(Email email) { Email newEmail = new Email(); newEmail.setName(email.getName()); @@ -78,15 +126,34 @@ public void addBcc(Email email) { } } + /** + * Get the subject of the email. + * @return the subject. + */ @JsonProperty("subject") public String getSubject() { return subject; } + /** + * Set the subject of the email. + * @param subject the subject. + */ public void setSubject(String subject) { this.subject = subject; } + /** + * Get the headers. The headers are a collection of JSON + * key/value pairs allowing you to specify specific handling + * instructions for your email. You may not overwrite the + * following headers: x-sg-id, x-sg-eid, received, + * dkim-signature, Content-Type, Content-Transfer-Encoding, + * To, From, Subject, Reply-To, CC, BCC + *

+ * Content added to the returned list will be included when sent. + * @return the headers. + */ @JsonProperty("headers") public Map getHeaders() { if(headers == null) @@ -94,6 +161,11 @@ public Map getHeaders() { return headers; } + /** + * Add a header. + * @param key the header key. + * @param value the header value. + */ public void addHeader(String key, String value) { if (headers == null) { headers = new HashMap(); @@ -103,6 +175,21 @@ public void addHeader(String key, String value) { } } + /** + * Get the substitusions. Substitutions are a collection of + * key/value pairs following the pattern + * "substitution_tag":"value to substitute". All are assumed + * to be strings. These substitutions will apply to the text + * and html content of the body of your email, in addition + * to the subject and reply-to parameters. The total + * collective size of your substitutions may not exceed + * 10,000 bytes per personalization object. + *

+ * The maximum number of entries is 1000. + *

+ * Content added to the returned list will be included when sent. + * @return the substitutions. + */ @JsonProperty("substitutions") public Map getSubstitutions() { if(substitutions == null) @@ -110,6 +197,11 @@ public Map getSubstitutions() { return substitutions; } + /** + * Add a substitusion. + * @param key the key. + * @param value the value. + */ public void addSubstitution(String key, String value) { if (substitutions == null) { substitutions = new HashMap(); @@ -119,6 +211,18 @@ public void addSubstitution(String key, String value) { } } + /** + * Get the custom arguments. Values that are specific to + * this personalization that will be carried along with + * the email and its activity data. Substitutions will + * not be made on custom arguments, so any string that + * is entered into this parameter will be assumed to be + * the custom argument that you would like to be used. i + * May not exceed 10,000 bytes. + *

+ * Content added to the returned list will be included when sent. + * @return the custom arguments. + */ @JsonProperty("custom_args") public Map getCustomArgs() { if(customArgs == null) @@ -126,6 +230,11 @@ public Map getCustomArgs() { return customArgs; } + /** + * Add a custom argument. + * @param key the key. + * @param value the value. + */ public void addCustomArg(String key, String value) { if (customArgs == null) { customArgs = new HashMap(); @@ -135,13 +244,23 @@ public void addCustomArg(String key, String value) { } } + /** + * Get the send at time. This is a unix timestamp + * allowing you to specify when you want your + * email to be delivered. Scheduling more than + * 72 hours in advance is forbidden. + * @return the send at time. + */ @JsonProperty("send_at") public long sendAt() { return sendAt; } + /** + * Set the send at time. + * @param sendAt the send at time (Unix timestamp). + */ public void setSendAt(long sendAt) { this.sendAt = sendAt; } - } diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/Setting.java b/src/main/java/com/sendgrid/helpers/mail/objects/Setting.java index 5818a145..20b8d64e 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/Setting.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/Setting.java @@ -4,16 +4,27 @@ import com.fasterxml.jackson.annotation.JsonInclude.Include; import com.fasterxml.jackson.annotation.JsonProperty; +/** + * A generic setting object. + */ @JsonInclude(Include.NON_DEFAULT) public class Setting { @JsonProperty("enable") private boolean enable; + /** + * Get whether or not this setting is enabled. + * @return true if the setting is enabled, false otherwise. + */ @JsonProperty("enable") public boolean getEnable() { return enable; } + /** + * Set whether or not this setting is enabled. + * @param enable true if the setting is enabled, false otherwise. + */ public void setEnable(boolean enable) { this.enable = enable; } -} \ No newline at end of file +} diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/SpamCheckSetting.java b/src/main/java/com/sendgrid/helpers/mail/objects/SpamCheckSetting.java index 85d1dc10..dbd43955 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/SpamCheckSetting.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/SpamCheckSetting.java @@ -4,36 +4,67 @@ import com.fasterxml.jackson.annotation.JsonInclude.Include; import com.fasterxml.jackson.annotation.JsonProperty; +/** + * A setting object that allows you to test the content of + * your email for spam. + */ @JsonInclude(Include.NON_DEFAULT) public class SpamCheckSetting { @JsonProperty("enable") private boolean enable; @JsonProperty("threshold") private int spamThreshold; @JsonProperty("post_to_url") private String postToUrl; + /** + * Determines if this setting is enabled. + * @return true if spam checking is enabled, false otherwise. + */ @JsonProperty("enable") public boolean getEnable() { return enable; } + /** + * Set if this setting is enabled. + * @param enable true if spam checking is enabled, false otherwise. + */ public void setEnable(boolean enable) { this.enable = enable; } + /** + * Get the the threshold used to determine if your content + * qualifies as spam on a scale from 1 to 10, with 10 being + * most strict, or most likely to be considered as spam. + * @return the threshold. + */ @JsonProperty("threshold") public int getSpamThreshold() { return spamThreshold; } + /** + * Set the spam check threshold. + * @param spamThreshold the threshold. + */ public void setSpamThreshold(int spamThreshold) { this.spamThreshold = spamThreshold; } + /** + * Get the Inbound Parse URL that you would like a copy of + * your email along with the spam report to be sent to. + * @return a URL. + */ @JsonProperty("post_to_url") public String getPostToUrl() { return postToUrl; } + /** + * Set the Inbout Parse URL. + * @param postToUrl a URL. + */ public void setPostToUrl(String postToUrl) { this.postToUrl = postToUrl; } -} \ No newline at end of file +} diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/SubscriptionTrackingSetting.java b/src/main/java/com/sendgrid/helpers/mail/objects/SubscriptionTrackingSetting.java index ad1121c2..2ca6616b 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/SubscriptionTrackingSetting.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/SubscriptionTrackingSetting.java @@ -4,6 +4,13 @@ import com.fasterxml.jackson.annotation.JsonInclude.Include; import com.fasterxml.jackson.annotation.JsonProperty; +/** + * A subscription tracking setting object. Subscription tracking + * allows you to insert a subscription management link at the + * bottom of the text and html bodies of your email. If you + * would like to specify the location of the link within your + * email, you may use the substitution_tag. + */ @JsonInclude(Include.NON_DEFAULT) public class SubscriptionTrackingSetting { @JsonProperty("enable") private boolean enable; @@ -11,39 +18,80 @@ public class SubscriptionTrackingSetting { @JsonProperty("html") private String html; @JsonProperty("substitution_tag") private String substitutionTag; + /** + * Determines if this setting is enabled. + * @return true if subscription tracking is enabled, false otherwise. + */ @JsonProperty("enable") public boolean getEnable() { return enable; } + /** + * Set if this setting is enabled. + * @param enable true if subscription tracking is enabled, false otherwise. + */ public void setEnable(boolean enable) { this.enable = enable; } + /** + * Get the plain text to be appended to the email, with the + * subscription tracking link. You may control where + * the link is by using the tag <% %> + * @return the plain text. + */ @JsonProperty("text") public String getText() { return text; } + /** + * Set the plain text. + * @param text the plain text. + */ public void setText(String text) { this.text = text; } + /** + * Get the HTML to be appended to the email, with the + * subscription tracking link. You may control where + * the link is by using the tag <% %> + * @return the HTML. + */ @JsonProperty("html") public String getHtml() { return html; } + /** + * Set the HTML. + * @param html the HTML. + */ public void setHtml(String html) { this.html = html; } + /** + * Get the tag that will be replaced with the + * unsubscribe URL. for example: [unsubscribe_url]. + * If this parameter is used, it will override both + * the text and html parameters. The URL of the link + * will be placed at the substitution tag’s location, + * with no additional formatting. + * @return the substitution tag. + */ @JsonProperty("substitution_tag") public String getSubstitutionTag() { return substitutionTag; } + /** + * Set the substitution tag. + * @param substitutionTag the substitution tag. + */ public void setSubstitutionTag(String substitutionTag) { this.substitutionTag = substitutionTag; } -} \ No newline at end of file +} diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/TrackingSettings.java b/src/main/java/com/sendgrid/helpers/mail/objects/TrackingSettings.java index 4da565d5..0e2a47bb 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/TrackingSettings.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/TrackingSettings.java @@ -4,6 +4,11 @@ import com.fasterxml.jackson.annotation.JsonInclude.Include; import com.fasterxml.jackson.annotation.JsonProperty; +/** + * An object representing the settings to determine how + * you would like to track the metrics of how your recipients + * interact with your email. + */ @JsonInclude(Include.NON_DEFAULT) public class TrackingSettings { @JsonProperty("click_tracking") private ClickTrackingSetting clickTrackingSetting; @@ -11,39 +16,79 @@ public class TrackingSettings { @JsonProperty("subscription_tracking") private SubscriptionTrackingSetting subscriptionTrackingSetting; @JsonProperty("ganalytics") private GoogleAnalyticsSetting googleAnalyticsSetting; + /** + * Get the click tracking setting. Click tracking allows you to + * track whether a recipient clicked a link in your email. + * @return the setting. + */ @JsonProperty("click_tracking") public ClickTrackingSetting getClickTrackingSetting() { return clickTrackingSetting; } + /** + * Set the click tracking setting. + * @param clickTrackingSetting the setting. + */ public void setClickTrackingSetting(ClickTrackingSetting clickTrackingSetting) { this.clickTrackingSetting = clickTrackingSetting; } + /** + * Get the open tracking setting. The open tracking allows you to + * track whether the email was opened or not, but including a single + * pixel image in the body of the content. When the pixel is loaded, we can log that the email was opened. + * @return the setting. + */ @JsonProperty("open_tracking") public OpenTrackingSetting getOpenTrackingSetting() { return openTrackingSetting; } + /** + * Set the open tracking setting. + * @param openTrackingSetting the setting. + */ public void setOpenTrackingSetting(OpenTrackingSetting openTrackingSetting) { this.openTrackingSetting = openTrackingSetting; } + /** + * Get the subscription tracking setting. The subscription + * tracking setting allows you to insert a subscription + * management link at the bottom of the text and html bodies + * of your email. If you would like to specify the location + * of the link within your email, you may use the substitution_tag. + * @return the setting. + */ @JsonProperty("subscription_tracking") public SubscriptionTrackingSetting getSubscriptionTrackingSetting() { return subscriptionTrackingSetting; } + /** + * Set the subscription tracking setting. + * @param subscriptionTrackingSetting the setting. + */ public void setSubscriptionTrackingSetting(SubscriptionTrackingSetting subscriptionTrackingSetting) { this.subscriptionTrackingSetting = subscriptionTrackingSetting; } + /** + * Get the Google Analytics setting. This setting allows you to + * enable tracking provided by Google Analytics. + * @return the setting. + */ @JsonProperty("ganalytics") public GoogleAnalyticsSetting getGoogleAnalyticsSetting() { return googleAnalyticsSetting; } + /** + * Set the Google Analytics setting. + * @param googleAnalyticsSetting the setting. + */ public void setGoogleAnalyticsSetting(GoogleAnalyticsSetting googleAnalyticsSetting) { this.googleAnalyticsSetting = googleAnalyticsSetting; } -} \ No newline at end of file +} From 083f524811265af0a08d6ed0039a2cba60285ba9 Mon Sep 17 00:00:00 2001 From: dmitraver Date: Tue, 10 Oct 2017 15:44:11 +0200 Subject: [PATCH 023/345] Adds new lines to the end of the files. --- scripts/startPrism.sh | 2 +- test/prism.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/startPrism.sh b/scripts/startPrism.sh index 7438aa5d..13c35548 100755 --- a/scripts/startPrism.sh +++ b/scripts/startPrism.sh @@ -55,4 +55,4 @@ else echo "Prism is not installed." install run -fi \ No newline at end of file +fi diff --git a/test/prism.sh b/test/prism.sh index 5d9d3002..d6e0f251 100644 --- a/test/prism.sh +++ b/test/prism.sh @@ -39,4 +39,4 @@ else fi } -install \ No newline at end of file +install From a21f3da020ef4ff8eaa01c4ccc9952cf7006b3a1 Mon Sep 17 00:00:00 2001 From: dmitraver Date: Tue, 10 Oct 2017 17:22:32 +0200 Subject: [PATCH 024/345] Makes prism script executable. --- test/prism.sh | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 test/prism.sh diff --git a/test/prism.sh b/test/prism.sh old mode 100644 new mode 100755 From 0000925234db32bff25ba723f06338746fe32531 Mon Sep 17 00:00:00 2001 From: Andy Trimble Date: Tue, 10 Oct 2017 13:57:47 -0600 Subject: [PATCH 025/345] Initial implementation. --- src/main/java/com/sendgrid/APICallback.java | 19 +++ .../java/com/sendgrid/RateLimitException.java | 36 +++++ src/main/java/com/sendgrid/SendGrid.java | 126 +++++++++++++++++- src/test/java/com/sendgrid/SendGridTest.java | 92 +++++++++++++ 4 files changed, 266 insertions(+), 7 deletions(-) create mode 100644 src/main/java/com/sendgrid/APICallback.java create mode 100644 src/main/java/com/sendgrid/RateLimitException.java diff --git a/src/main/java/com/sendgrid/APICallback.java b/src/main/java/com/sendgrid/APICallback.java new file mode 100644 index 00000000..fde54f9d --- /dev/null +++ b/src/main/java/com/sendgrid/APICallback.java @@ -0,0 +1,19 @@ +package com.sendgrid; + +/** + * An interface describing a callback mechanism for the + * asynchronous, rate limit aware API connection. + */ +public interface APICallback { + /** + * Callback method in case of an error. + * @param ex the error that was thrown. + */ + public void error(Exception ex); + + /** + * Callback method in case of a valid response. + * @param response the valid response. + */ + public void response(Response response); +} diff --git a/src/main/java/com/sendgrid/RateLimitException.java b/src/main/java/com/sendgrid/RateLimitException.java new file mode 100644 index 00000000..4912ac92 --- /dev/null +++ b/src/main/java/com/sendgrid/RateLimitException.java @@ -0,0 +1,36 @@ +package com.sendgrid; + +/** + * An exception thrown when the maximum number of retries + * have occurred, and the API calls are still rate limited. + */ +public class RateLimitException extends Exception { + private final Request request; + private final int retryCount; + + /** + * Construct a new exception. + * @param request the originating request object. + * @param retryCount the number of times a retry was attempted. + */ + public RateLimitException(Request request, int retryCount) { + this.request = request; + this.retryCount = retryCount; + } + + /** + * Get the originating request object. + * @return the request object. + */ + public Request getRequest() { + return this.request; + } + + /** + * Get the number of times the action was attemted. + * @return the retry count. + */ + public int getRetryCount() { + return this.retryCount; + } +} diff --git a/src/main/java/com/sendgrid/SendGrid.java b/src/main/java/com/sendgrid/SendGrid.java index 6bf14295..1d49d4f4 100644 --- a/src/main/java/com/sendgrid/SendGrid.java +++ b/src/main/java/com/sendgrid/SendGrid.java @@ -3,6 +3,8 @@ import java.io.IOException; import java.util.HashMap; import java.util.Map; +import java.util.concurrent.Executors; +import java.util.concurrent.ExecutorService; /** * Class SendGrid allows for quick and easy access to the SendGrid API. @@ -13,6 +15,10 @@ public class SendGrid { /** The user agent string to return to SendGrid. */ private static final String USER_AGENT = "sendgrid/" + VERSION + ";java"; + private static final int RATE_LIMIT_RESPONSE_CODE = 429; + private static final int THREAD_POOL_SIZE = 8; + + private ExecutorService pool; /** The user's API key. */ private String apiKey; @@ -27,7 +33,13 @@ public class SendGrid { private Client client; /** The request headers container. */ - private Map requestHeaders; + private Map requestHeaders; + + /** The number of times to try after a rate limit. */ + private int rateLimitRetry; + + /** The number of milliseconds to sleep between retries. */ + private int rateLimitSleep; /** * Construct a new SendGrid API wrapper. @@ -73,6 +85,10 @@ public void initializeSendGrid(String apiKey) { this.requestHeaders.put("Authorization", "Bearer " + apiKey); this.requestHeaders.put("User-agent", USER_AGENT); this.requestHeaders.put("Accept", "application/json"); + this.rateLimitRetry = 5; + this.rateLimitSleep = 1100; + + this.pool = Executors.newFixedThreadPool(THREAD_POOL_SIZE); } /** @@ -103,7 +119,7 @@ public void setVersion(String version) { * Obtain the request headers. * @return the request headers. */ - public Map getRequestHeaders() { + public Map getRequestHeaders() { return this.requestHeaders; } @@ -113,7 +129,7 @@ public Map getRequestHeaders() { * @param value the header value. * @return the new set of request headers. */ - public Map addRequestHeader(String key, String value) { + public Map addRequestHeader(String key, String value) { this.requestHeaders.put(key, value); return getRequestHeaders(); } @@ -123,7 +139,7 @@ public Map addRequestHeader(String key, String value) { * @param key the header key to remove. * @return the new set of request headers. */ - public Map removeRequestHeader(String key) { + public Map removeRequestHeader(String key) { this.requestHeaders.remove(key); return getRequestHeaders(); } @@ -145,7 +161,43 @@ public void setHost(String host) { } /** - * Class makeCall makes the call to the SendGrid API, override this method for testing. + * Get the maximum number of retries on a rate limit response. + * The default is 5. + * @return the number of retries on a rate limit. + */ + public int getRateLimitRetry() { + return this.rateLimitRetry; + } + + /** + * Set the maximum number of retries on a rate limit response. + * @param rateLimitRetry the maximum retry count. + */ + public void setRateLimitRetry(int rateLimitRetry) { + this.rateLimitRetry = rateLimitRetry; + } + + /** + * Get the duration of time (in milliseconds) to sleep between + * consecutive rate limit retries. The SendGrid API enforces + * the rate limit to the second. The default value is 1.1 seconds. + * @return the sleep duration. + */ + public int getRateLimitSleep() { + return this.rateLimitSleep; + } + + /** + * Set the duration of time (in milliseconds) to sleep between + * consecutive rate limit retries. + * @param rateLimitSleep the sleep duration. + */ + public void setRateLimitSleep(int rateLimitSleep) { + this.rateLimitSleep = rateLimitSleep; + } + + /** + * Makes the call to the SendGrid API, override this method for testing. * @param request the request to make. * @return the response object. * @throws IOException in case of a network error. @@ -166,13 +218,73 @@ public Response api(Request request) throws IOException { req.setBaseUri(this.host); req.setEndpoint("/" + version + "/" + request.getEndpoint()); req.setBody(request.getBody()); - for (Map.Entry header : this.requestHeaders.entrySet()) { + for (Map.Entry header : this.requestHeaders.entrySet()) { req.addHeader(header.getKey(), header.getValue()); } - for (Map.Entry queryParam : request.getQueryParams().entrySet()) { + for (Map.Entry queryParam : request.getQueryParams().entrySet()) { req.addQueryParam(queryParam.getKey(), queryParam.getValue()); } return makeCall(req); } + + /** + * Attempt an API call. This method executes the API call asynchronously + * on an internal thread pool. If the call is rate limited, the thread + * will retry up to the maximum configured time. + * @param request the API request. + */ + public void attempt(Request request) { + this.attempt(request, new APICallback() { + @Override + public void error(Exception ex) { + } + + public void response(Response r) { + } + }); + } + + /** + * Attempt an API call. This method executes the API call asynchronously + * on an internal thread pool. If the call is rate limited, the thread + * will retry up to the maximum configured time. The supplied callback + * will be called in the event of an error, or a successful response. + * @param request the API request. + * @param callback the callback. + */ + public void attempt(Request request, APICallback callback) { + this.pool.execute(new Runnable() { + @Override + public void run() { + Response response; + + // Retry until the retry limit has been reached. + for (int i = 0; i < rateLimitRetry; ++i) { + try { + response = api(request); + } catch (IOException ex) { + // Stop retrying if there is a network error. + callback.error(ex); + return; + } + + // We have been rate limited. + if (response.getStatusCode() == RATE_LIMIT_RESPONSE_CODE) { + try { + Thread.sleep(rateLimitSleep); + } catch (InterruptedException ex) { + // Can safely ignore this exception and retry. + } + } else { + callback.response(response); + return; + } + } + + // Retries exhausted. Return error. + callback.error(new RateLimitException(request, rateLimitRetry)); + } + }); + } } diff --git a/src/test/java/com/sendgrid/SendGridTest.java b/src/test/java/com/sendgrid/SendGridTest.java index 5ec45eab..8f469bf0 100644 --- a/src/test/java/com/sendgrid/SendGridTest.java +++ b/src/test/java/com/sendgrid/SendGridTest.java @@ -74,6 +74,98 @@ public void testHost() { Assert.assertEquals(sg.getHost(), "api.new.com"); } + @Test + public void testRateLimitRetry() { + SendGrid sg = new SendGrid(SENDGRID_API_KEY); + sg.setRateLimitRetry(100); + Assert.assertEquals(sg.getRateLimitRetry(), 100); + } + + @Test + public void testRateLimitSleep() { + SendGrid sg = new SendGrid(SENDGRID_API_KEY); + sg.setRateLimitSleep(999); + Assert.assertEquals(sg.getRateLimitSleep(), 999); + } + + + @Test + public void test_async() { + Object sync = new Object(); + SendGrid sg = null; + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); + sg.setHost(System.getenv("MOCK_HOST")); + } else { + sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); + } + sg.addRequestHeader("X-Mock", "200"); + + Request request = new Request(); + + request.setMethod(Method.GET); + request.setEndpoint("access_settings/activity"); + request.addQueryParam("limit", "1"); + sg.attempt(request, new APICallback() { + @Override + public void error(Exception e) { + Assert.fail(); + sync.notify(); + } + + @Override + public void response(Response response) { + Assert.assertEquals(200, response.getStatusCode()); + sync.notify(); + } + }); + + try { + sync.wait(2000); + } catch(InterruptedException ex) { + Assert.fail(ex.toString()); + } + } + + @Test + public void test_async_rate_limit() { + Object sync = new Object(); + SendGrid sg = null; + if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + sg = new SendGrid("SENDGRID_API_KEY"); + sg.setHost(System.getenv("MOCK_HOST")); + } else { + sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); + } + sg.addRequestHeader("X-Mock", "429"); + + Request request = new Request(); + + request.setMethod(Method.GET); + request.setEndpoint("access_settings/activity"); + request.addQueryParam("limit", "1"); + sg.attempt(request, new APICallback() { + @Override + public void error(Exception e) { + Assert.assertEquals(e.getClass(), RateLimitException.class); + sync.notify(); + } + + @Override + public void response(Response response) { + Assert.fail(); + sync.notify(); + } + }); + + try { + sync.wait(2000); + } catch(InterruptedException ex) { + Assert.fail(ex.toString()); + } + } @Test public void test_access_settings_activity_get() throws IOException { From 6e6d7b59499ecac98765e3288ebe5d646e4d9027 Mon Sep 17 00:00:00 2001 From: Andy Trimble Date: Tue, 10 Oct 2017 14:07:45 -0600 Subject: [PATCH 026/345] Fixed test race condition, and compile issue. --- src/main/java/com/sendgrid/SendGrid.java | 2 +- src/test/java/com/sendgrid/SendGridTest.java | 20 ++++++++++++++------ 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/sendgrid/SendGrid.java b/src/main/java/com/sendgrid/SendGrid.java index 1d49d4f4..37839f56 100644 --- a/src/main/java/com/sendgrid/SendGrid.java +++ b/src/main/java/com/sendgrid/SendGrid.java @@ -253,7 +253,7 @@ public void response(Response r) { * @param request the API request. * @param callback the callback. */ - public void attempt(Request request, APICallback callback) { + public void attempt(final Request request, final APICallback callback) { this.pool.execute(new Runnable() { @Override public void run() { diff --git a/src/test/java/com/sendgrid/SendGridTest.java b/src/test/java/com/sendgrid/SendGridTest.java index 8f469bf0..2249b81f 100644 --- a/src/test/java/com/sendgrid/SendGridTest.java +++ b/src/test/java/com/sendgrid/SendGridTest.java @@ -91,7 +91,7 @@ public void testRateLimitSleep() { @Test public void test_async() { - Object sync = new Object(); + final Object sync = new Object(); SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg = new SendGrid("SENDGRID_API_KEY"); @@ -111,18 +111,24 @@ public void test_async() { @Override public void error(Exception e) { Assert.fail(); - sync.notify(); + synchronized(sync) { + sync.notify(); + } } @Override public void response(Response response) { Assert.assertEquals(200, response.getStatusCode()); - sync.notify(); + synchronized(sync) { + sync.notify(); + } } }); try { - sync.wait(2000); + synchronized(sync) { + sync.wait(2000); + } } catch(InterruptedException ex) { Assert.fail(ex.toString()); } @@ -130,7 +136,7 @@ public void response(Response response) { @Test public void test_async_rate_limit() { - Object sync = new Object(); + final Object sync = new Object(); SendGrid sg = null; if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg = new SendGrid("SENDGRID_API_KEY"); @@ -161,7 +167,9 @@ public void response(Response response) { }); try { - sync.wait(2000); + synchronized(sync) { + sync.wait(2000); + } } catch(InterruptedException ex) { Assert.fail(ex.toString()); } From 2afa5192a9b26c16c16618c2f8de0ba223c91fc2 Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Tue, 10 Oct 2017 13:20:20 -0700 Subject: [PATCH 027/345] Version Bump v4.1.1: PR #247 Added Javadocs. --- CHANGELOG.md | 5 +++++ CONTRIBUTING.md | 2 +- README.md | 2 +- build.gradle | 2 +- pom.xml | 2 +- src/main/java/com/sendgrid/SendGrid.java | 5 +---- .../helpers/mail/objects/Personalization.java | 20 +++++++++---------- .../objects/SubscriptionTrackingSetting.java | 4 ++-- 8 files changed, 22 insertions(+), 20 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8fd10782..7a85d7e2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,11 @@ # Change Log All notable changes to this project will be documented in this file. +## [4.1.1] - 2017-10-10 +### Added +- PR #247 Added Javadocs. +- BIG thanks to [Andy Trimble](https://github.com/andy-trimble) + ## [4.1.0] - 2017-08-16 ### Added - PR #211 Return empty collections in place of nulls diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index e627ccc1..afec7437 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -102,7 +102,7 @@ touch Example.java Add the example you want to test to Example.java, including the headers at the top of the file. ``` bash -javac -classpath ../repo/com/sendgrid/4.1.0/sendgrid-4.1.0-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.1.0/sendgrid-4.1.0-jar.jar:. Example +javac -classpath ../repo/com/sendgrid/4.1.1/sendgrid-4.1.0-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.1.0/sendgrid-4.1.1-jar.jar:. Example ``` diff --git a/README.md b/README.md index 99fceeb3..02725369 100644 --- a/README.md +++ b/README.md @@ -54,7 +54,7 @@ Add the following to your build.gradle file in the root of your project. ... dependencies { ... - compile 'com.sendgrid:sendgrid-java:4.1.0' + compile 'com.sendgrid:sendgrid-java:4.1.1' } repositories { diff --git a/build.gradle b/build.gradle index 881a496e..52c07eb5 100644 --- a/build.gradle +++ b/build.gradle @@ -17,7 +17,7 @@ apply plugin: 'maven' apply plugin: 'signing' group = 'com.sendgrid' -version = '4.1.0' +version = '4.1.1' ext.packaging = 'jar' allprojects { diff --git a/pom.xml b/pom.xml index 07545420..249d79d4 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ com.sendgrid sendgrid-java SendGrid Java helper library - 4.1.0 + 4.1.1 This Java module allows you to quickly and easily send emails through SendGrid using Java. https://github.com/sendgrid/sendgrid-java diff --git a/src/main/java/com/sendgrid/SendGrid.java b/src/main/java/com/sendgrid/SendGrid.java index 6bf14295..897728bc 100644 --- a/src/main/java/com/sendgrid/SendGrid.java +++ b/src/main/java/com/sendgrid/SendGrid.java @@ -32,7 +32,6 @@ public class SendGrid { /** * Construct a new SendGrid API wrapper. * @param apiKey is your SendGrid API Key: https://app.sendgrid.com/settings/api_keys - * @return a SendGrid object. */ public SendGrid(String apiKey) { this.client = new Client(); @@ -43,7 +42,6 @@ public SendGrid(String apiKey) { * Construct a new SendGrid API wrapper. * @param apiKey is your SendGrid API Key: https://app.sendgrid.com/settings/api_keys * @param test is true if you are unit testing - * @return a SendGrid object. */ public SendGrid(String apiKey, Boolean test) { this.client = new Client(test); @@ -54,7 +52,6 @@ public SendGrid(String apiKey, Boolean test) { * Construct a new SendGrid API wrapper. * @param apiKey is your SendGrid API Key: https://app.sendgrid.com/settings/api_keys * @param client the Client to use (allows to customize its configuration) - * @return a SendGrid object. */ public SendGrid(String apiKey, Client client) { this.client = client; @@ -138,7 +135,7 @@ public String getHost() { /** * Set the SendGrid host. - * @host the new SendGrid host. + * @param host the new SendGrid host. */ public void setHost(String host) { this.host = host; diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/Personalization.java b/src/main/java/com/sendgrid/helpers/mail/objects/Personalization.java index b72f2316..83bd9c56 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/Personalization.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/Personalization.java @@ -31,9 +31,9 @@ public class Personalization { * Get the to list. This is an array of recipients. Each object * within this array may contain the name, but must always * contain the email, of a recipient. - *

+ * * The maximum number of entries is 1000. - *

+ * * Content added to the returned list will be included when sent. * @return the to list. */ @@ -64,9 +64,9 @@ public void addTo(Email email) { * Set the CC list. This is an array of recipients. Each object * within this array may contain the name, but must always * contain the email, of a recipient. - *

+ * * The maximum number of entries is 1000. - *

+ * * Content added to the returned list will be included when sent. * @return the CC list. */ @@ -97,9 +97,9 @@ public void addCc(Email email) { * Set the BCC list. This is an array of recipients. Each object * within this array may contain the name, but must always * contain the email, of a recipient. - *

+ * * The maximum number of entries is 1000. - *

+ * * Content added to the returned list will be included when sent. * @return the BCC list. */ @@ -150,7 +150,7 @@ public void setSubject(String subject) { * following headers: x-sg-id, x-sg-eid, received, * dkim-signature, Content-Type, Content-Transfer-Encoding, * To, From, Subject, Reply-To, CC, BCC - *

+ * * Content added to the returned list will be included when sent. * @return the headers. */ @@ -184,9 +184,9 @@ public void addHeader(String key, String value) { * to the subject and reply-to parameters. The total * collective size of your substitutions may not exceed * 10,000 bytes per personalization object. - *

+ * * The maximum number of entries is 1000. - *

+ * * Content added to the returned list will be included when sent. * @return the substitutions. */ @@ -219,7 +219,7 @@ public void addSubstitution(String key, String value) { * is entered into this parameter will be assumed to be * the custom argument that you would like to be used. i * May not exceed 10,000 bytes. - *

+ * * Content added to the returned list will be included when sent. * @return the custom arguments. */ diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/SubscriptionTrackingSetting.java b/src/main/java/com/sendgrid/helpers/mail/objects/SubscriptionTrackingSetting.java index 2ca6616b..304eb916 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/SubscriptionTrackingSetting.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/SubscriptionTrackingSetting.java @@ -38,7 +38,7 @@ public void setEnable(boolean enable) { /** * Get the plain text to be appended to the email, with the * subscription tracking link. You may control where - * the link is by using the tag <% %> + * the link is by using the tag <% %> * @return the plain text. */ @JsonProperty("text") @@ -57,7 +57,7 @@ public void setText(String text) { /** * Get the HTML to be appended to the email, with the * subscription tracking link. You may control where - * the link is by using the tag <% %> + * the link is by using the tag <% %> * @return the HTML. */ @JsonProperty("html") From 725d0f9e175c77c8de6137937832f6e49030f3f6 Mon Sep 17 00:00:00 2001 From: JR Date: Tue, 10 Oct 2017 18:37:37 -0400 Subject: [PATCH 028/345] Added CODE_OF_CONDUCT.md Added CODE_OF_CONDUCT.md to root of this repo --- CODE_OF_CONDUCT.md | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 CODE_OF_CONDUCT.md diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 00000000..a6ad51a7 --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,42 @@ + + # SendGrid Community Code of Conduct + + The SendGrid open source community is made up of members from around the globe with a diverse set of skills, personalities, and experiences. It is through these differences that our community experiences successes and continued growth. When you're working with members of the community, we encourage you to follow these guidelines, which help steer our interactions and strive to maintain a positive, successful and growing community. + + ### Be Open + Members of the community are open to collaboration, whether it's on pull requests, code reviews, approvals, issues or otherwise. We're receptive to constructive comments and criticism, as the experiences and skill sets of all members contribute to the whole of our efforts. We're accepting of all who wish to take part in our activities, fostering an environment where anyone can participate, and everyone can make a difference. + + ### Be Considerate + Members of the community are considerate of their peers, which include other contributors and users of SendGrid. We're thoughtful when addressing the efforts of others, keeping in mind that often the labor was completed with the intent of the good of the community. We're attentive in our communications, whether in person or online, and we're tactful when approaching differing views. + + ### Be Respectful + Members of the community are respectful. We're respectful of others, their positions, their skills, their commitments and their efforts. We're respectful of the volunteer efforts that permeate the SendGrid community. We're respectful of the processes outlined in the community, and we work within them. When we disagree, we are courteous in raising our issues. Overall, we're good to each other. We contribute to this community not because we have to, but because we want to. If we remember that, these guidelines will come naturally. + + ## Additional Guidance + + ### Disclose Potential Conflicts of Interest + Community discussions often involve interested parties. We expect participants to be aware when they are conflicted due to employment or other projects they are involved in and disclose those interests to other project members. When in doubt, over-disclose. Perceived conflicts of interest are important to address so that the community’s decisions are credible even when unpopular, difficult or favorable to the interests of one group over another. + + ### Interpretation + This Code is not exhaustive or complete. It is not a rulebook; it serves to distill our common understanding of a collaborative, shared environment and goals. We expect it to be followed in spirit as much as in the letter. When in doubt, try to abide by [SendGrid’s cultural values](https://sendgrid.com/blog/employee-engagement-the-4h-way) defined by our “4H’s”: Happy, Hungry, Humble and Honest. + + ### Enforcement + Most members of the SendGrid community always comply with this Code, not because of the existence of this Code, but because they have long experience participating in open source communities where the conduct described above is normal and expected. However, failure to observe this Code may be grounds for suspension, reporting the user for abuse or changing permissions for outside contributors. + + ## If you have concerns about someone’s conduct + **Initiate Direct Contact** - It is always appropriate to email a community member (if contact information is available), mention that you think their behavior was out of line, and (if necessary) point them to this Code. + + **Discuss Publicly** - Discussing publicly is always acceptable. Note, though, that approaching the person directly may be better, as it tends to make them less defensive, and it respects the time of other community members, so you probably want to try direct contact first. + + **Contact the Moderators** - You can reach the SendGrid moderators by emailing dx@sendgrid.com. + + ## Submission to SendGrid Repositories + Finally, just a reminder, changes to the SendGrid repositories will only be accepted upon completion of the [SendGrid Contributor Agreement](https://cla.sendgrid.com). + + ## Attribution + + SendGrid thanks the following, on which it draws for content and inspiration: + + * [Python Community Code of Conduct](https://www.python.org/psf/codeofconduct/) + * [Open Source Initiative General Code of Conduct](https://opensource.org/codeofconduct) + * [Apache Code of Conduct](https://www.apache.org/foundation/policies/conduct.html) From 10a0ea26446a5c225ddeb4172e2c3b449d552507 Mon Sep 17 00:00:00 2001 From: sccalabr Date: Tue, 10 Oct 2017 21:59:09 -0500 Subject: [PATCH 029/345] Adding @return @throws @param and formatting file. --- src/main/java/com/sendgrid/SendGridAPI.java | 128 ++++++++++++-------- 1 file changed, 75 insertions(+), 53 deletions(-) diff --git a/src/main/java/com/sendgrid/SendGridAPI.java b/src/main/java/com/sendgrid/SendGridAPI.java index bfbb230c..d190675c 100644 --- a/src/main/java/com/sendgrid/SendGridAPI.java +++ b/src/main/java/com/sendgrid/SendGridAPI.java @@ -5,66 +5,88 @@ public interface SendGridAPI { - /** - * Initializes SendGrid - * @param apiKey is your SendGrid API Key: https://app.sendgrid.com/settings/api_keys - */ - public void initializeSendGrid(String apiKey); + /** + * Initializes SendGrid + * + * @param apiKey is your SendGrid API Key: https://app.sendgrid.com/settings/api_keys + */ + public void initializeSendGrid(String apiKey); - /** - * Initializes SendGrid - * @param apiKey is your SendGrid API Key: https://app.sendgrid.com/settings/api_keys - */ - public String getLibraryVersion(); + /** + * Initializes SendGrid + * + * @param apiKey is your SendGrid API Key: https://app.sendgrid.com/settings/api_keys + * @return + */ + public String getLibraryVersion(); - /** - * Gets the version. - */ - public String getVersion(); + /** + * Gets the version. + * + * @return + */ + public String getVersion(); - /** - * Sets the version. - * @param version the SendGrid version. - */ - public void setVersion(String version); + /** + * Sets the version. + * + * @param version the SendGrid version. + */ + public void setVersion(String version); + /** + * Gets the request headers. + * @return + */ + public Map getRequestHeaders(); - /** - * Gets the request headers. - */ - public Map getRequestHeaders(); + /** + * Adds a request headers. + * + * @param keythe key + * @param valuethe value + * @return + */ + public Map addRequestHeader(String key, String value); - /** - * Adds a request headers. - * @param key the key - * @param value the value - */ - public Map addRequestHeader(String key, String value); + /** + * Removes a request headers. + * + * @param key the key + * @return + */ + public Map removeRequestHeader(String key); - /** - * Removes a request headers. - * @param key the key - */ - public Map removeRequestHeader(String key); - - /** - * Gets the host. - */ - public String getHost(); - - /** - * Sets the host. - * @param host the host to set - */ - public void setHost(String host); + /** + * Gets the host. + * + * @return + */ + public String getHost(); - /** - * Class makeCall makes the call to the SendGrid API, override this method for testing. - */ - public Response makeCall(Request request) throws IOException; + /** + * Sets the host. + * + * @param host the host to set + */ + public void setHost(String host); - /** - * Class api sets up the request to the SendGrid API, this is main interface. - */ - public Response api(Request request) throws IOException; + /** + * Class makeCall makes the call to the SendGrid API, override this method for + * testing. + * + * @param request + * @return + * @throws IOException + */ + public Response makeCall(Request request) throws IOException; + + /** + * Class api sets up the request to the SendGrid API, this is main interface. + * + * @param request + * @return + * @throws IOException + */ + public Response api(Request request) throws IOException; } From 665b0b4829f15965d1fee7bb09c6985ca921f13a Mon Sep 17 00:00:00 2001 From: dmitraver Date: Wed, 11 Oct 2017 17:15:03 +0200 Subject: [PATCH 030/345] Fixes prism startup script. Attempts to fix travis build. --- .travis.yml | 5 ++--- scripts/startPrism.sh | 2 +- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/.travis.yml b/.travis.yml index a07cec04..8ad70c07 100644 --- a/.travis.yml +++ b/.travis.yml @@ -11,9 +11,8 @@ matrix: - os: linux jdk: oraclejdk8 before_script: -- mkdir -p prism/bin -- export PATH=$PATH:$PWD/prism/bin/ -- ./test/prism.sh +- "./scripts/startPrism.sh &" +- sleep 10 after_script: - "./gradlew build" diff --git a/scripts/startPrism.sh b/scripts/startPrism.sh index 13c35548..53923593 100755 --- a/scripts/startPrism.sh +++ b/scripts/startPrism.sh @@ -45,7 +45,7 @@ fi run () { echo "Running prism..." cd ../prism/bin - prism run --mock --spec https://raw.githubusercontent.com/sendgrid/sendgrid-oai/master/oai_stoplight.json + ./prism run --mock --spec https://raw.githubusercontent.com/sendgrid/sendgrid-oai/master/oai_stoplight.json } if [ -f ../prism/bin/prism ]; then From 8895f22a083623141a856fdd3d0a7284e78599a1 Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Wed, 11 Oct 2017 08:43:16 -0700 Subject: [PATCH 031/345] Update .travis.yml --- .travis.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 8ad70c07..6d5607bd 100644 --- a/.travis.yml +++ b/.travis.yml @@ -13,7 +13,11 @@ matrix: before_script: - "./scripts/startPrism.sh &" - sleep 10 - +before_install: +- cat /etc/hosts # optionally check the content *before* +- sudo hostname "$(hostname | cut -c1-63)" +- sed -e "s/^\\(127\\.0\\.0\\.1.*\\)/\\1 $(hostname | cut -c1-63)/" /etc/hosts | sudo tee /etc/hosts +- cat /etc/hosts # optionally check the content *after* after_script: - "./gradlew build" - "./scripts/upload.sh" From 02c6f4e50015a01f7125f7c1a493bd661707ce55 Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Wed, 11 Oct 2017 08:46:23 -0700 Subject: [PATCH 032/345] Update .travis.yml --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 6d5607bd..dc8a908f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -11,7 +11,7 @@ matrix: - os: linux jdk: oraclejdk8 before_script: -- "./scripts/startPrism.sh &" +- "./scripts/startPrism.sh" - sleep 10 before_install: - cat /etc/hosts # optionally check the content *before* From 5a0da482e7fe8e75c1c0645b569c63e92b3fedec Mon Sep 17 00:00:00 2001 From: dmitraver Date: Thu, 12 Oct 2017 12:06:17 +0200 Subject: [PATCH 033/345] Fixes field naming in tests. --- .../objects/SettingsSerializationTest.java | 40 +++++++++---------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/src/test/java/com/sendgrid/helpers/mail/objects/SettingsSerializationTest.java b/src/test/java/com/sendgrid/helpers/mail/objects/SettingsSerializationTest.java index 48fbfcc6..74e6c8b5 100644 --- a/src/test/java/com/sendgrid/helpers/mail/objects/SettingsSerializationTest.java +++ b/src/test/java/com/sendgrid/helpers/mail/objects/SettingsSerializationTest.java @@ -20,8 +20,8 @@ public void testOpenTrackingSettingSerialization() throws Exception { OpenTrackingSetting setting = new OpenTrackingSetting(); setting.setEnable(false); - String jsonOne = mapper.writeValueAsString(setting); - Assert.assertEquals(jsonOne, "{\"enable\":false}"); + String json = mapper.writeValueAsString(setting); + Assert.assertEquals(json, "{\"enable\":false}"); } @Test @@ -29,9 +29,9 @@ public void testClickTrackingSettingSerialization() throws Exception { ClickTrackingSetting setting = new ClickTrackingSetting(); setting.setEnable(false); - String jsonTwo = mapper.writeValueAsString(setting); - System.out.println(jsonTwo); - Assert.assertEquals(jsonTwo, "{\"enable\":false,\"enable_text\":false}"); + String json = mapper.writeValueAsString(setting); + System.out.println(json); + Assert.assertEquals(json, "{\"enable\":false,\"enable_text\":false}"); } @Test @@ -39,9 +39,9 @@ public void testSubscriptionTrackingSettingSerialization() throws Exception { SubscriptionTrackingSetting setting = new SubscriptionTrackingSetting(); setting.setEnable(false); - String jsonTwo = mapper.writeValueAsString(setting); - System.out.println(jsonTwo); - Assert.assertEquals(jsonTwo, "{\"enable\":false}"); + String json = mapper.writeValueAsString(setting); + System.out.println(json); + Assert.assertEquals(json, "{\"enable\":false}"); } @Test @@ -49,9 +49,9 @@ public void testGoogleAnalyticsTrackingSettingSerialization() throws Exception { GoogleAnalyticsSetting setting = new GoogleAnalyticsSetting(); setting.setEnable(false); - String jsonTwo = mapper.writeValueAsString(setting); - System.out.println(jsonTwo); - Assert.assertEquals(jsonTwo, "{\"enable\":false}"); + String json = mapper.writeValueAsString(setting); + System.out.println(json); + Assert.assertEquals(json, "{\"enable\":false}"); } @Test @@ -59,9 +59,9 @@ public void testSpamCheckSettingSerialization() throws Exception { SpamCheckSetting setting = new SpamCheckSetting(); setting.setEnable(false); - String jsonTwo = mapper.writeValueAsString(setting); - System.out.println(jsonTwo); - Assert.assertEquals(jsonTwo, "{\"enable\":false,\"threshold\":0}"); + String json = mapper.writeValueAsString(setting); + System.out.println(json); + Assert.assertEquals(json, "{\"enable\":false,\"threshold\":0}"); } @Test @@ -69,9 +69,9 @@ public void testFooterSettingSerialization() throws Exception { FooterSetting setting = new FooterSetting(); setting.setEnable(false); - String jsonTwo = mapper.writeValueAsString(setting); - System.out.println(jsonTwo); - Assert.assertEquals(jsonTwo, "{\"enable\":false}"); + String json = mapper.writeValueAsString(setting); + System.out.println(json); + Assert.assertEquals(json, "{\"enable\":false}"); } @Test @@ -79,8 +79,8 @@ public void testBccSettingsSerialization() throws Exception { BccSettings settings = new BccSettings(); settings.setEnable(false); - String jsonTwo = mapper.writeValueAsString(settings); - System.out.println(jsonTwo); - Assert.assertEquals(jsonTwo, "{\"enable\":false}"); + String json = mapper.writeValueAsString(settings); + System.out.println(json); + Assert.assertEquals(json, "{\"enable\":false}"); } } From a43392fac958dd60acdcbc09189c16e3828389c2 Mon Sep 17 00:00:00 2001 From: dmitraver Date: Thu, 12 Oct 2017 16:54:51 +0200 Subject: [PATCH 034/345] Checks if the prism port is in use. --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index dc8a908f..7f50f52b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -19,6 +19,7 @@ before_install: - sed -e "s/^\\(127\\.0\\.0\\.1.*\\)/\\1 $(hostname | cut -c1-63)/" /etc/hosts | sudo tee /etc/hosts - cat /etc/hosts # optionally check the content *after* after_script: +- lsof -i :4010 -S # adds some debugging statements - "./gradlew build" - "./scripts/upload.sh" env: From 9b3f92cbc1116b9cd6b2a873fd098ee50004fc44 Mon Sep 17 00:00:00 2001 From: dmitraver Date: Thu, 12 Oct 2017 17:06:22 +0200 Subject: [PATCH 035/345] Reverts back to running prism in background. --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 7f50f52b..4fc4dbee 100644 --- a/.travis.yml +++ b/.travis.yml @@ -11,7 +11,7 @@ matrix: - os: linux jdk: oraclejdk8 before_script: -- "./scripts/startPrism.sh" +- "./scripts/startPrism.sh &" - sleep 10 before_install: - cat /etc/hosts # optionally check the content *before* From 2464dd8747e6e7da35c9513a0b6c25ee2a57c7fb Mon Sep 17 00:00:00 2001 From: sccalabr Date: Thu, 12 Oct 2017 22:15:55 -0500 Subject: [PATCH 036/345] Adding new line at the end of the file. --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 86ef37d8..7cc79a80 100644 --- a/pom.xml +++ b/pom.xml @@ -127,4 +127,4 @@ test - \ No newline at end of file + From e28455d4391aca01a053b72ff7c302fbad99b97e Mon Sep 17 00:00:00 2001 From: sccalabr Date: Thu, 12 Oct 2017 22:17:33 -0500 Subject: [PATCH 037/345] Adding new line at the end of the file. --- pom.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/pom.xml b/pom.xml index 7cc79a80..d250df9f 100644 --- a/pom.xml +++ b/pom.xml @@ -128,3 +128,4 @@ + From a061b8c747c9282dee845d16371d9e44e05f22fd Mon Sep 17 00:00:00 2001 From: dmitraver Date: Fri, 13 Oct 2017 17:45:37 +0200 Subject: [PATCH 038/345] Prints debug statement and exception. --- src/test/java/com/sendgrid/SendGridTest.java | 22 ++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/src/test/java/com/sendgrid/SendGridTest.java b/src/test/java/com/sendgrid/SendGridTest.java index 5ec45eab..7d056d92 100644 --- a/src/test/java/com/sendgrid/SendGridTest.java +++ b/src/test/java/com/sendgrid/SendGridTest.java @@ -4163,18 +4163,28 @@ public void test_whitelabel_domains_post() throws IOException { if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); + + System.out.println("===== Use ??? === "); } else { sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); + + System.out.println("===== Use localhost === "); } sg.addRequestHeader("X-Mock", "201"); - Request request = new Request(); - request.setMethod(Method.POST); - request.setEndpoint("whitelabel/domains"); - request.setBody("{\"automatic_security\":false,\"username\":\"john@example.com\",\"domain\":\"example.com\",\"default\":true,\"custom_spf\":true,\"ips\":[\"192.168.1.1\",\"192.168.1.2\"],\"subdomain\":\"news\"}"); - Response response = sg.api(request); - Assert.assertEquals(201, response.getStatusCode()); + try { + Request request = new Request(); + request.setMethod(Method.POST); + request.setEndpoint("whitelabel/domains"); + request.setBody("{\"automatic_security\":false,\"username\":\"john@example.com\",\"domain\":\"example.com\",\"default\":true,\"custom_spf\":true,\"ips\":[\"192.168.1.1\",\"192.168.1.2\"],\"subdomain\":\"news\"}"); + Response response = sg.api(request); + Assert.assertEquals(201, response.getStatusCode()); + } catch (Exception e) { + System.out.println("Debugging prism setup."); + e.printStackTrace(); + } + } @Test From 6a626f35d6b9052164dfc9f1a362ca45176ed503 Mon Sep 17 00:00:00 2001 From: dmitraver Date: Fri, 13 Oct 2017 17:51:24 +0200 Subject: [PATCH 039/345] Rethrow exception in a test. --- src/test/java/com/sendgrid/SendGridTest.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/test/java/com/sendgrid/SendGridTest.java b/src/test/java/com/sendgrid/SendGridTest.java index 7d056d92..5ff38886 100644 --- a/src/test/java/com/sendgrid/SendGridTest.java +++ b/src/test/java/com/sendgrid/SendGridTest.java @@ -4183,6 +4183,7 @@ public void test_whitelabel_domains_post() throws IOException { } catch (Exception e) { System.out.println("Debugging prism setup."); e.printStackTrace(); + throw e; } } From 1ae3ed2011fbfc083a2e26aa2fbbfe3db9fa6b2d Mon Sep 17 00:00:00 2001 From: Dmitry Avershin Date: Sun, 15 Oct 2017 11:04:52 +0200 Subject: [PATCH 040/345] Reverts debugging statements. --- src/test/java/com/sendgrid/SendGridTest.java | 23 +++++--------------- 1 file changed, 6 insertions(+), 17 deletions(-) diff --git a/src/test/java/com/sendgrid/SendGridTest.java b/src/test/java/com/sendgrid/SendGridTest.java index 5ff38886..5ec45eab 100644 --- a/src/test/java/com/sendgrid/SendGridTest.java +++ b/src/test/java/com/sendgrid/SendGridTest.java @@ -4163,29 +4163,18 @@ public void test_whitelabel_domains_post() throws IOException { if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); - - System.out.println("===== Use ??? === "); } else { sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); - - System.out.println("===== Use localhost === "); } sg.addRequestHeader("X-Mock", "201"); - try { - Request request = new Request(); - request.setMethod(Method.POST); - request.setEndpoint("whitelabel/domains"); - request.setBody("{\"automatic_security\":false,\"username\":\"john@example.com\",\"domain\":\"example.com\",\"default\":true,\"custom_spf\":true,\"ips\":[\"192.168.1.1\",\"192.168.1.2\"],\"subdomain\":\"news\"}"); - Response response = sg.api(request); - Assert.assertEquals(201, response.getStatusCode()); - } catch (Exception e) { - System.out.println("Debugging prism setup."); - e.printStackTrace(); - throw e; - } - + Request request = new Request(); + request.setMethod(Method.POST); + request.setEndpoint("whitelabel/domains"); + request.setBody("{\"automatic_security\":false,\"username\":\"john@example.com\",\"domain\":\"example.com\",\"default\":true,\"custom_spf\":true,\"ips\":[\"192.168.1.1\",\"192.168.1.2\"],\"subdomain\":\"news\"}"); + Response response = sg.api(request); + Assert.assertEquals(201, response.getStatusCode()); } @Test From c866a493c6759a5914051b0225be4203544f23a2 Mon Sep 17 00:00:00 2001 From: Dmitry Avershin Date: Sun, 15 Oct 2017 11:07:46 +0200 Subject: [PATCH 041/345] Sets MOCK_HOST env variable in travis. --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index 4fc4dbee..5f0a4358 100644 --- a/.travis.yml +++ b/.travis.yml @@ -24,6 +24,7 @@ after_script: - "./scripts/upload.sh" env: global: + - MOCK_HOST=localhost:4010 - S3_POLICY: ewogICJleHBpcmF0aW9uIjogIjIxMDAtMDEtMDFUMTI6MDA6MDAuMDAwWiIsCiAgImNvbmRpdGlvbnMiOiBbCiAgICB7ImFjbCI6ICJwdWJsaWMtcmVhZCIgfSwKICAgIHsiYnVja2V0IjogInNlbmRncmlkLW9wZW4tc291cmNlIiB9LAogICAgWyJzdGFydHMtd2l0aCIsICIka2V5IiwgInNlbmRncmlkLWphdmEvIl0sCiAgICBbImNvbnRlbnQtbGVuZ3RoLXJhbmdlIiwgMjA0OCwgMjY4NDM1NDU2XSwKICAgIFsiZXEiLCAiJENvbnRlbnQtVHlwZSIsICJhcHBsaWNhdGlvbi96aXAiXQogIF0KfQo= - secure: Iki1btwhG1nlyjnEMu90Oh/hoatFpPiiKkqpj7siLnlLp2xbBQ2003jRsn30I3Vujes2ugvzdlHqBJ9lDwRvfGrKXcLlRvYuDQ24N2YKquEiKHUxs+iMOzTQj6Sf64KL5O0aSZd1l5rjWgsQ0qqjHW9u3l5bUjqxzrhAI2Js37U= - secure: Khi6a4z1lfZmDEDV738MOiWznRcTv5ILZUM+igEw2txX7PGX+B5909WridpAijTGiurJ6eda7jvsUgci8DTPQCXB18LD6N870hnPcSQkuI6zDAhKTx+w/ZsfPLWh28sP2CVzbqGdxaitZDKxRWaVmKnBZpyi8XI9UKjmyK2sjwE= From db3f6c7ea9829530139944fb879ba7adf82037ea Mon Sep 17 00:00:00 2001 From: Shubheksha Jalan Date: Mon, 16 Oct 2017 12:22:15 +0530 Subject: [PATCH 042/345] Update USE_CASES.md - Add sections on email stats and setting up domain white labels --- USE_CASES.md | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/USE_CASES.md b/USE_CASES.md index 1bfb62f0..b9f7863f 100644 --- a/USE_CASES.md +++ b/USE_CASES.md @@ -98,4 +98,18 @@ public class Example { } } } -``` \ No newline at end of file +``` + + +# How to Setup a Domain Whitelabel + +You can find documentation for how to setup a domain whitelabel via the UI [here](https://sendgrid.com/docs/Classroom/Basics/Whitelabel/setup_domain_whitelabel.html) and via API [here](https://github.com/sendgrid/sendgrid-csharp/blob/master/USAGE.md#whitelabel). + +Find more information about all of SendGrid's whitelabeling related documentation [here](https://sendgrid.com/docs/Classroom/Basics/Whitelabel/index.html). + + +# How to View Email Statistics + +You can find documentation for how to view your email statistics via the UI [here](https://app.sendgrid.com/statistics) and via API [here](https://github.com/sendgrid/sendgrid-csharp/blob/master/USAGE.md#stats). + +Alternatively, we can post events to a URL of your choice via our [Event Webhook](https://sendgrid.com/docs/API_Reference/Webhooks/event.html) about events that occur as SendGrid processes your email. From 56e8770c72f5a3e06416bfc6e7eb1655700ce071 Mon Sep 17 00:00:00 2001 From: Diego Camargo Date: Mon, 16 Oct 2017 21:09:20 +0200 Subject: [PATCH 043/345] Add a way to verify that the content doesn't contain sensitive information --- .../helpers/mail/objects/Content.java | 23 +++++++++ .../com/sendgrid/helpers/ContentTest.java | 47 +++++++++++++++++++ 2 files changed, 70 insertions(+) create mode 100644 src/test/java/com/sendgrid/helpers/ContentTest.java diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/Content.java b/src/main/java/com/sendgrid/helpers/mail/objects/Content.java index f6621ac9..1a348ea5 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/Content.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/Content.java @@ -4,6 +4,14 @@ import com.fasterxml.jackson.annotation.JsonInclude.Include; import com.fasterxml.jackson.annotation.JsonProperty; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashSet; +import java.util.List; +import java.util.Set; +import java.util.regex.Pattern; +import java.lang.IllegalArgumentException; + /** * An object in which you may specify the content of your email. */ @@ -64,6 +72,21 @@ public String getValue() { * @param value the value. */ public void setValue(String value) { + ContentVerifier.verifyContent(value); this.value = value; } } + +class ContentVerifier { + private static final List FORBIDDEN_PATTERNS = Collections.singletonList( + Pattern.compile(".*SG\\.[a-zA-Z0-9(-|_)]*\\.[a-zA-Z0-9(-|_)]*.*") + ); + + static void verifyContent(String content) { + for (Pattern pattern: FORBIDDEN_PATTERNS) { + if (pattern.matcher(content).matches()) { + throw new IllegalArgumentException("Found a Forbidden Pattern in the content of the email"); + } + } + } +} diff --git a/src/test/java/com/sendgrid/helpers/ContentTest.java b/src/test/java/com/sendgrid/helpers/ContentTest.java new file mode 100644 index 00000000..05e2328c --- /dev/null +++ b/src/test/java/com/sendgrid/helpers/ContentTest.java @@ -0,0 +1,47 @@ +package com.sendgrid; + +import org.junit.Assert; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.ExpectedException; + +import java.util.ArrayList; +import java.util.Arrays; + +public class ContentTest { + private Content content; + + @Before + public void setUp() { + this.content = new Content(); + } + + @Rule + public final ExpectedException exception = ExpectedException.none(); + + @Test + public void testForbiddenContentIsRejected() { + + ArrayList sampleApiKeys = new ArrayList<>( + Arrays.asList( + "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", + "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" + ) + + ); + + for (String apiKey: sampleApiKeys) { + exception.expect(IllegalArgumentException.class); + this.content.setValue("My api key is: " + apiKey); + } + } + + @Test + public void testNormalContentIsAllowed() { + String message = "I will not send you my api key!"; + this.content.setValue(message); + Assert.assertEquals(message, this.content.getValue()); + } + +} From a2e2213f1e438a92e85cbb9b5900c4ded5dad3ac Mon Sep 17 00:00:00 2001 From: Shubheksha Jalan Date: Tue, 17 Oct 2017 01:36:02 +0530 Subject: [PATCH 044/345] Add links in the table of contents, fix repo name in links --- USE_CASES.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/USE_CASES.md b/USE_CASES.md index b9f7863f..13a06be9 100644 --- a/USE_CASES.md +++ b/USE_CASES.md @@ -3,6 +3,8 @@ This documentation provides examples for specific use cases. Please [open an iss # Table of Contents * [Transactional Templates](#transactional_templates) +* [How to Setup a Domain Whitelabel](#domain_whitelabel) +* [How to View Email Statistics](#email_stats) # Transactional Templates @@ -103,13 +105,13 @@ public class Example { # How to Setup a Domain Whitelabel -You can find documentation for how to setup a domain whitelabel via the UI [here](https://sendgrid.com/docs/Classroom/Basics/Whitelabel/setup_domain_whitelabel.html) and via API [here](https://github.com/sendgrid/sendgrid-csharp/blob/master/USAGE.md#whitelabel). +You can find documentation for how to setup a domain whitelabel via the UI [here](https://sendgrid.com/docs/Classroom/Basics/Whitelabel/setup_domain_whitelabel.html) and via API [here](https://github.com/sendgrid/sendgrid-java/blob/master/USAGE.md#whitelabel). Find more information about all of SendGrid's whitelabeling related documentation [here](https://sendgrid.com/docs/Classroom/Basics/Whitelabel/index.html). # How to View Email Statistics -You can find documentation for how to view your email statistics via the UI [here](https://app.sendgrid.com/statistics) and via API [here](https://github.com/sendgrid/sendgrid-csharp/blob/master/USAGE.md#stats). +You can find documentation for how to view your email statistics via the UI [here](https://app.sendgrid.com/statistics) and via API [here](https://github.com/sendgrid/sendgrid-java/blob/master/USAGE.md#stats). Alternatively, we can post events to a URL of your choice via our [Event Webhook](https://sendgrid.com/docs/API_Reference/Webhooks/event.html) about events that occur as SendGrid processes your email. From ba59272eb88b0c3115a957e86c9fc064967144af Mon Sep 17 00:00:00 2001 From: pushkyn Date: Tue, 17 Oct 2017 20:15:05 +0300 Subject: [PATCH 045/345] add "viewing request body" section to troubleshooting --- TROUBLESHOOTING.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/TROUBLESHOOTING.md b/TROUBLESHOOTING.md index 7a4aace1..fc282d40 100644 --- a/TROUBLESHOOTING.md +++ b/TROUBLESHOOTING.md @@ -12,6 +12,7 @@ If you can't find a solution below, please open an [issue](https://github.com/se * [Environment Variables and Your SendGrid API Key](#environment) * [Using the Package Manager](#package-manager) * [Android Compatibility](#android) +* [Viewing the Request Body](#request-body) ## Migrating from v2 to v3 @@ -97,3 +98,14 @@ repositories { Since Android SDK 23, HttpClient is no longer supported. Some workarounds can be found [here](http://stackoverflow.com/questions/32153318/httpclient-wont-import-in-android-studio). We have an issue to remove that dependency [here](https://github.com/sendgrid/java-http-client/issues/2), please upvote to move it up the queue. + + +## Viewing the Request Body + +When debugging or testing, it may be useful to exampine the raw request body to compare against the [documented format](https://sendgrid.com/docs/API_Reference/api_v3.html). + +You can do this right before you call `request.setBody(mail.build())` like so: + +```java +System.out.println(mail.build()); +``` \ No newline at end of file From 6517d4a2c7c1959e3f79f9239f871988d3e41210 Mon Sep 17 00:00:00 2001 From: pushkyn Date: Tue, 17 Oct 2017 20:48:38 +0300 Subject: [PATCH 046/345] Update USAGE.md and CONTRIBUTING.md --- CONTRIBUTING.md | 2 +- USAGE.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index a515809f..8cb8ea5c 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -167,7 +167,7 @@ Please run your code through: # Clone your fork of the repo into the current directory git clone https://github.com/sendgrid/sendgrid-java # Navigate to the newly cloned directory - cd sendgrid-python + cd sendgrid-java # Assign the original repo to a remote called "upstream" git remote add upstream https://github.com/sendgrid/sendgrid-java ``` diff --git a/USAGE.md b/USAGE.md index bc64978b..b29616d7 100644 --- a/USAGE.md +++ b/USAGE.md @@ -2,7 +2,7 @@ This documentation is based on our [OAI specification](https://github.com/sendgr # INITIALIZATION -```ruby +```java import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; From 25fafa89da47e65393630d8da26f6117bea60e5b Mon Sep 17 00:00:00 2001 From: Dmitry Avershin Date: Fri, 20 Oct 2017 08:35:01 +0200 Subject: [PATCH 047/345] Prints TRVIS and MOCK_HOST env variables. --- .travis.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 5f0a4358..9986d9a1 100644 --- a/.travis.yml +++ b/.travis.yml @@ -11,6 +11,8 @@ matrix: - os: linux jdk: oraclejdk8 before_script: +- echo TRAVIS $TRAVIS +- echo MOCK_HOST $MOCK_HOST - "./scripts/startPrism.sh &" - sleep 10 before_install: @@ -24,7 +26,6 @@ after_script: - "./scripts/upload.sh" env: global: - - MOCK_HOST=localhost:4010 - S3_POLICY: ewogICJleHBpcmF0aW9uIjogIjIxMDAtMDEtMDFUMTI6MDA6MDAuMDAwWiIsCiAgImNvbmRpdGlvbnMiOiBbCiAgICB7ImFjbCI6ICJwdWJsaWMtcmVhZCIgfSwKICAgIHsiYnVja2V0IjogInNlbmRncmlkLW9wZW4tc291cmNlIiB9LAogICAgWyJzdGFydHMtd2l0aCIsICIka2V5IiwgInNlbmRncmlkLWphdmEvIl0sCiAgICBbImNvbnRlbnQtbGVuZ3RoLXJhbmdlIiwgMjA0OCwgMjY4NDM1NDU2XSwKICAgIFsiZXEiLCAiJENvbnRlbnQtVHlwZSIsICJhcHBsaWNhdGlvbi96aXAiXQogIF0KfQo= - secure: Iki1btwhG1nlyjnEMu90Oh/hoatFpPiiKkqpj7siLnlLp2xbBQ2003jRsn30I3Vujes2ugvzdlHqBJ9lDwRvfGrKXcLlRvYuDQ24N2YKquEiKHUxs+iMOzTQj6Sf64KL5O0aSZd1l5rjWgsQ0qqjHW9u3l5bUjqxzrhAI2Js37U= - secure: Khi6a4z1lfZmDEDV738MOiWznRcTv5ILZUM+igEw2txX7PGX+B5909WridpAijTGiurJ6eda7jvsUgci8DTPQCXB18LD6N870hnPcSQkuI6zDAhKTx+w/ZsfPLWh28sP2CVzbqGdxaitZDKxRWaVmKnBZpyi8XI9UKjmyK2sjwE= From ff020faf43fa7958aeb72fd3751567d177a63a1e Mon Sep 17 00:00:00 2001 From: Dmitry Avershin Date: Fri, 20 Oct 2017 21:40:09 +0200 Subject: [PATCH 048/345] Removes TRAVIS related logic from 10 tests. --- src/test/java/com/sendgrid/SendGridTest.java | 100 ++++--------------- 1 file changed, 20 insertions(+), 80 deletions(-) diff --git a/src/test/java/com/sendgrid/SendGridTest.java b/src/test/java/com/sendgrid/SendGridTest.java index 5ec45eab..953e43c8 100644 --- a/src/test/java/com/sendgrid/SendGridTest.java +++ b/src/test/java/com/sendgrid/SendGridTest.java @@ -4159,14 +4159,8 @@ public void test_user_webhooks_parse_stats_get() throws IOException { @Test public void test_whitelabel_domains_post() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); @@ -4179,14 +4173,8 @@ public void test_whitelabel_domains_post() throws IOException { @Test public void test_whitelabel_domains_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -4203,14 +4191,8 @@ public void test_whitelabel_domains_get() throws IOException { @Test public void test_whitelabel_domains_default_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -4222,14 +4204,8 @@ public void test_whitelabel_domains_default_get() throws IOException { @Test public void test_whitelabel_domains_subuser_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -4241,14 +4217,8 @@ public void test_whitelabel_domains_subuser_get() throws IOException { @Test public void test_whitelabel_domains_subuser_delete() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -4260,14 +4230,8 @@ public void test_whitelabel_domains_subuser_delete() throws IOException { @Test public void test_whitelabel_domains__domain_id__patch() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -4280,14 +4244,8 @@ public void test_whitelabel_domains__domain_id__patch() throws IOException { @Test public void test_whitelabel_domains__domain_id__get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -4299,14 +4257,8 @@ public void test_whitelabel_domains__domain_id__get() throws IOException { @Test public void test_whitelabel_domains__domain_id__delete() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -4318,14 +4270,8 @@ public void test_whitelabel_domains__domain_id__delete() throws IOException { @Test public void test_whitelabel_domains__domain_id__subuser_post() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); @@ -4338,14 +4284,8 @@ public void test_whitelabel_domains__domain_id__subuser_post() throws IOExceptio @Test public void test_whitelabel_domains__id__ips_post() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); From 377892c9f0f085512b24f25bc3ac2280f37cc0da Mon Sep 17 00:00:00 2001 From: pushkyn Date: Sat, 21 Oct 2017 01:42:49 +0300 Subject: [PATCH 049/345] More SEO Friendly Section links --- CONTRIBUTING.md | 25 +++++++++++++------------ README.md | 14 +++++++------- USAGE.md | 24 ++++++++++++------------ USE_CASES.md | 4 ++-- 4 files changed, 34 insertions(+), 33 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 8cb8ea5c..aeaa6486 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -2,13 +2,13 @@ Hello! Thank you for choosing to help contribute to one of the SendGrid open sou - [CLAs and CCLAs](#cla) - [Roadmap & Milestones](#roadmap) -- [Feature Request](#feature_request) -- [Submit a Bug Report](#submit_a_bug_report) -- [Improvements to the Codebase](#improvements_to_the_codebase) -- [Understanding the Code Base](#understanding_the_codebase) +- [Feature Request](#feature-request) +- [Submit a Bug Report](#submit-a-bug-report) +- [Improvements to the Codebase](#improvements-to-the-codebase) +- [Understanding the Code Base](#understanding-the-codebase) - [Testing](#testing) -- [Style Guidelines & Naming Conventions](#style_guidelines_and_naming_conventions) -- [Creating a Pull Request](#creating_a_pull_request) +- [Style Guidelines & Naming Conventions](#style-guidelines-and-naming-conventions) +- [Creating a Pull Request](#creating-a-pull-request) We use [Milestones](https://github.com/sendgrid/sendgrid-java/milestones) to help define current roadmaps, please feel free to grab an issue from the current milestone. Please indicate that you have begun work on it to avoid collisions. Once a PR is made, community review, comments, suggestions and additional PRs are welcomed and encouraged. @@ -26,7 +26,7 @@ When you create a Pull Request, after a few seconds, a comment will appear with There are a few ways to contribute, which we'll enumerate below: - + ## Feature Request If you'd like to make a feature request, please read this section. @@ -36,7 +36,7 @@ The GitHub issue tracker is the preferred channel for library feature requests, - Please **search for existing issues** in order to ensure we don't have duplicate bugs/feature requests. - Please be respectful and considerate of others when commenting on issues - + ## Submit a Bug Report Note: DO NOT include your credentials in ANY code examples, descriptions, or media you make public. @@ -53,7 +53,7 @@ Before you decide to create a new issue, please try the following: In order to make the process easier, we've included a [sample bug report template](https://github.com/sendgrid/sendgrid-java/blob/master/.github/ISSUE_TEMPLATE) (borrowed from [Ghost](https://github.com/TryGhost/Ghost/)). The template uses [GitHub flavored markdown](https://help.github.com/articles/github-flavored-markdown/) for formatting. - + ## Improvements to the Codebase We welcome direct contributions to the sendgrid-java code base. Thank you! @@ -105,7 +105,7 @@ Add the example you want to test to Example.java, including the headers at the t javac -classpath ../repo/com/sendgrid/4.1.1/sendgrid-4.1.0-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.1.0/sendgrid-4.1.1-jar.jar:. Example ``` - + ## Understanding the Code Base **/examples** @@ -149,7 +149,7 @@ For the purposes of contributing to this repo, please update the [`SendGridTest. ./gradlew test -i ``` - + ## Style Guidelines & Naming Conventions Generally, we follow the style guidelines as suggested by the official language. However, we ask that you conform to the styles that already exist in the library. If you wish to deviate, please explain your reasoning. @@ -158,7 +158,8 @@ Please run your code through: - [FindBugs](http://findbugs.sourceforge.net/) - [CheckStyle](http://checkstyle.sourceforge.net/) with [Google's Java Style Guide](http://checkstyle.sourceforge.net/reports/google-java-style.html). -## Creating a Pull Request + +## Creating a Pull Request 1. [Fork](https://help.github.com/fork-a-repo/) the project, clone your fork, and configure the remotes: diff --git a/README.md b/README.md index 02725369..45abaabf 100644 --- a/README.md +++ b/README.md @@ -16,9 +16,9 @@ We appreciate your continued support, thank you! # Table of Contents * [Installation](#installation) -* [Quick Start](#quick_start) +* [Quick Start](#quick-start) * [Usage](#usage) -* [Use Cases](#use_cases) +* [Use Cases](#use-cases) * [Announcements](#announcements) * [Roadmap](#roadmap) * [How to Contribute](#contribute) @@ -79,7 +79,7 @@ You can just drop the jar file in. It's a fat jar - it has all the dependencies - [Java-HTTP-Client](https://github.com/sendgrid/java-http-client) - + # Quick Start ## Hello Email @@ -180,7 +180,7 @@ public class Example { - [v3 Web API Mail Send Helper](https://github.com/sendgrid/sendgrid-java/tree/master/src/main/java/com/sendgrid/helpers) - build a request object payload for a v3 /mail/send API call. - + # Use Cases [Examples of common API use cases](https://github.com/sendgrid/sendgrid-java/blob/master/USE_CASES.md), such as how to send an email with a transactional template. @@ -204,10 +204,10 @@ We encourage contribution to our libraries (you might even score some nifty swag Quick links: -- [Feature Request](https://github.com/sendgrid/sendgrid-java/blob/master/CONTRIBUTING.md#feature_request) -- [Bug Reports](https://github.com/sendgrid/sendgrid-java/blob/master/CONTRIBUTING.md#submit_a_bug_report) +- [Feature Request](https://github.com/sendgrid/sendgrid-java/blob/master/CONTRIBUTING.md#feature-request) +- [Bug Reports](https://github.com/sendgrid/sendgrid-java/blob/master/CONTRIBUTING.md#submit-a-bug-report) - [Sign the CLA to Create a Pull Request](https://github.com/sendgrid/sendgrid-java/blob/master/CONTRIBUTING.md#cla) -- [Improvements to the Codebase](https://github.com/sendgrid/sendgrid-java/blob/master/CONTRIBUTING.md#improvements_to_the_codebase) +- [Improvements to the Codebase](https://github.com/sendgrid/sendgrid-java/blob/master/CONTRIBUTING.md#improvements-to-the-codebase) # Troubleshooting diff --git a/USAGE.md b/USAGE.md index b29616d7..c014d11d 100644 --- a/USAGE.md +++ b/USAGE.md @@ -22,9 +22,9 @@ public class Example { # Table of Contents -* [ACCESS SETTINGS](#access_settings) +* [ACCESS SETTINGS](#access-settings) * [ALERTS](#alerts) -* [API KEYS](#api_keys) +* [API KEYS](#api-keys) * [ASM](#asm) * [BROWSERS](#browsers) * [CAMPAIGNS](#campaigns) @@ -35,21 +35,21 @@ public class Example { * [GEO](#geo) * [IPS](#ips) * [MAIL](#mail) -* [MAIL SETTINGS](#mail_settings) -* [MAILBOX PROVIDERS](#mailbox_providers) -* [PARTNER SETTINGS](#partner_settings) +* [MAIL SETTINGS](#mail-settings) +* [MAILBOX PROVIDERS](#mailbox-providers) +* [PARTNER SETTINGS](#partner-settings) * [SCOPES](#scopes) * [SENDERS](#senders) * [STATS](#stats) * [SUBUSERS](#subusers) * [SUPPRESSION](#suppression) * [TEMPLATES](#templates) -* [TRACKING SETTINGS](#tracking_settings) +* [TRACKING SETTINGS](#tracking-settings) * [USER](#user) * [WHITELABEL](#whitelabel) - + # ACCESS SETTINGS ## Retrieve all recent access attempts @@ -353,7 +353,7 @@ For more information about alerts, please see our [User Guide](https://sendgrid. throw ex; } ``` - + # API KEYS ## Create API keys @@ -2710,7 +2710,7 @@ This endpoint has a helper, check it out [here](https://github.com/sendgrid/send throw ex; } ``` - + # MAIL SETTINGS ## Retrieve all mail settings @@ -3201,7 +3201,7 @@ Mail settings allow you to tell SendGrid specific things to do to every email th throw ex; } ``` - + # MAILBOX PROVIDERS ## Retrieve email statistics by mailbox provider. @@ -3235,7 +3235,7 @@ Advanced Stats provide a more in-depth view of your email statistics and the act throw ex; } ``` - + # PARTNER SETTINGS ## Returns a list of all partner settings. @@ -4675,7 +4675,7 @@ For more information about transactional templates, please see our [User Guide]( throw ex; } ``` - + # TRACKING SETTINGS ## Retrieve Tracking Settings diff --git a/USE_CASES.md b/USE_CASES.md index 1bfb62f0..9fd05950 100644 --- a/USE_CASES.md +++ b/USE_CASES.md @@ -2,9 +2,9 @@ This documentation provides examples for specific use cases. Please [open an iss # Table of Contents -* [Transactional Templates](#transactional_templates) +* [Transactional Templates](#transactional-templates) - + # Transactional Templates For this example, we assume you have created a [transactional template](https://sendgrid.com/docs/User_Guide/Transactional_Templates/index.html). Following is the template content we used for testing. From 0b9c047278cd4529529bab08eba0667f7991dc32 Mon Sep 17 00:00:00 2001 From: mptap Date: Fri, 20 Oct 2017 16:16:14 -0700 Subject: [PATCH 050/345] Add/Update Badges on README --- README.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 02725369..57372f2b 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,9 @@ +![SendGrid Logo](https://uiux.s3.amazonaws.com/2016-logos/email-logo%402x.png) [![Travis Badge](https://travis-ci.org/sendgrid/sendgrid-java.svg?branch=master)](https://travis-ci.org/sendgrid/sendgrid-java) [![Email Notifications Badge](https://dx.sendgrid.com/badge/java)](https://dx.sendgrid.com/newsletter/java) +[![Twitter Follow](https://img.shields.io/twitter/follow/sendgrid.svg?style=social&label=Follow)](https://twitter.com/sendgrid) +[![GitHub contributors](https://img.shields.io/github/contributors/sendgrid/sendgrid-java.svg)](https://github.com/sendgrid/sendgrid-java/graphs/contributors) +[![MIT licensed](https://img.shields.io/badge/license-MIT-blue.svg)](./LICENSE.txt) **NEW:** Subscribe to email [notifications](https://dx.sendgrid.com/newsletter/java) for releases and breaking changes. @@ -24,6 +28,7 @@ We appreciate your continued support, thank you! * [How to Contribute](#contribute) * [Troubleshooting](#troubleshooting) * [About](#about) +* [License](#license) # Installation @@ -221,4 +226,5 @@ sendgrid-java is guided and supported by the SendGrid [Developer Experience Team sendgrid-java is maintained and funded by SendGrid, Inc. The names and logos for sendgrid-java are trademarks of SendGrid, Inc. -![SendGrid Logo](https://uiux.s3.amazonaws.com/2016-logos/email-logo%402x.png) +# License +[The MIT License (MIT)](LICENSE.txt) From 802f36d9eca501c7eb5e2ad44420c42549afa4ba Mon Sep 17 00:00:00 2001 From: Dmitry Avershin Date: Sat, 21 Oct 2017 08:10:25 +0200 Subject: [PATCH 051/345] Removes TRAVIS related logic from all tests. --- src/test/java/com/sendgrid/SendGridTest.java | 2210 ++++-------------- 1 file changed, 442 insertions(+), 1768 deletions(-) diff --git a/src/test/java/com/sendgrid/SendGridTest.java b/src/test/java/com/sendgrid/SendGridTest.java index 953e43c8..c633554b 100644 --- a/src/test/java/com/sendgrid/SendGridTest.java +++ b/src/test/java/com/sendgrid/SendGridTest.java @@ -77,14 +77,8 @@ public void testHost() { @Test public void test_access_settings_activity_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -97,14 +91,8 @@ public void test_access_settings_activity_get() throws IOException { @Test public void test_access_settings_whitelist_post() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); @@ -117,14 +105,8 @@ public void test_access_settings_whitelist_post() throws IOException { @Test public void test_access_settings_whitelist_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -136,14 +118,8 @@ public void test_access_settings_whitelist_get() throws IOException { @Test public void test_access_settings_whitelist_delete() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -156,14 +132,8 @@ public void test_access_settings_whitelist_delete() throws IOException { @Test public void test_access_settings_whitelist__rule_id__get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -175,14 +145,8 @@ public void test_access_settings_whitelist__rule_id__get() throws IOException { @Test public void test_access_settings_whitelist__rule_id__delete() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -194,14 +158,8 @@ public void test_access_settings_whitelist__rule_id__delete() throws IOException @Test public void test_alerts_post() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); @@ -214,14 +172,8 @@ public void test_alerts_post() throws IOException { @Test public void test_alerts_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -233,14 +185,8 @@ public void test_alerts_get() throws IOException { @Test public void test_alerts__alert_id__patch() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -253,14 +199,8 @@ public void test_alerts__alert_id__patch() throws IOException { @Test public void test_alerts__alert_id__get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -272,14 +212,8 @@ public void test_alerts__alert_id__get() throws IOException { @Test public void test_alerts__alert_id__delete() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -291,14 +225,8 @@ public void test_alerts__alert_id__delete() throws IOException { @Test public void test_api_keys_post() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); @@ -311,14 +239,8 @@ public void test_api_keys_post() throws IOException { @Test public void test_api_keys_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -331,14 +253,8 @@ public void test_api_keys_get() throws IOException { @Test public void test_api_keys__api_key_id__put() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -351,14 +267,8 @@ public void test_api_keys__api_key_id__put() throws IOException { @Test public void test_api_keys__api_key_id__patch() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -371,14 +281,8 @@ public void test_api_keys__api_key_id__patch() throws IOException { @Test public void test_api_keys__api_key_id__get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -390,14 +294,8 @@ public void test_api_keys__api_key_id__get() throws IOException { @Test public void test_api_keys__api_key_id__delete() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -409,14 +307,8 @@ public void test_api_keys__api_key_id__delete() throws IOException { @Test public void test_asm_groups_post() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); @@ -429,14 +321,8 @@ public void test_asm_groups_post() throws IOException { @Test public void test_asm_groups_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -449,14 +335,8 @@ public void test_asm_groups_get() throws IOException { @Test public void test_asm_groups__group_id__patch() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); @@ -469,14 +349,8 @@ public void test_asm_groups__group_id__patch() throws IOException { @Test public void test_asm_groups__group_id__get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -488,14 +362,8 @@ public void test_asm_groups__group_id__get() throws IOException { @Test public void test_asm_groups__group_id__delete() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -507,14 +375,8 @@ public void test_asm_groups__group_id__delete() throws IOException { @Test public void test_asm_groups__group_id__suppressions_post() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); @@ -527,14 +389,8 @@ public void test_asm_groups__group_id__suppressions_post() throws IOException { @Test public void test_asm_groups__group_id__suppressions_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -546,14 +402,8 @@ public void test_asm_groups__group_id__suppressions_get() throws IOException { @Test public void test_asm_groups__group_id__suppressions_search_post() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -566,14 +416,8 @@ public void test_asm_groups__group_id__suppressions_search_post() throws IOExcep @Test public void test_asm_groups__group_id__suppressions__email__delete() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -585,14 +429,8 @@ public void test_asm_groups__group_id__suppressions__email__delete() throws IOEx @Test public void test_asm_suppressions_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -604,14 +442,8 @@ public void test_asm_suppressions_get() throws IOException { @Test public void test_asm_suppressions_global_post() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); @@ -624,14 +456,8 @@ public void test_asm_suppressions_global_post() throws IOException { @Test public void test_asm_suppressions_global__email__get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -643,14 +469,8 @@ public void test_asm_suppressions_global__email__get() throws IOException { @Test public void test_asm_suppressions_global__email__delete() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -662,14 +482,8 @@ public void test_asm_suppressions_global__email__delete() throws IOException { @Test public void test_asm_suppressions__email__get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -681,14 +495,8 @@ public void test_asm_suppressions__email__get() throws IOException { @Test public void test_browsers_stats_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -706,14 +514,8 @@ public void test_browsers_stats_get() throws IOException { @Test public void test_campaigns_post() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); @@ -726,14 +528,8 @@ public void test_campaigns_post() throws IOException { @Test public void test_campaigns_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -747,14 +543,8 @@ public void test_campaigns_get() throws IOException { @Test public void test_campaigns__campaign_id__patch() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -767,14 +557,8 @@ public void test_campaigns__campaign_id__patch() throws IOException { @Test public void test_campaigns__campaign_id__get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -786,14 +570,8 @@ public void test_campaigns__campaign_id__get() throws IOException { @Test public void test_campaigns__campaign_id__delete() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -805,14 +583,8 @@ public void test_campaigns__campaign_id__delete() throws IOException { @Test public void test_campaigns__campaign_id__schedules_patch() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -825,14 +597,8 @@ public void test_campaigns__campaign_id__schedules_patch() throws IOException { @Test public void test_campaigns__campaign_id__schedules_post() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); @@ -845,14 +611,8 @@ public void test_campaigns__campaign_id__schedules_post() throws IOException { @Test public void test_campaigns__campaign_id__schedules_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -864,14 +624,8 @@ public void test_campaigns__campaign_id__schedules_get() throws IOException { @Test public void test_campaigns__campaign_id__schedules_delete() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -883,14 +637,8 @@ public void test_campaigns__campaign_id__schedules_delete() throws IOException { @Test public void test_campaigns__campaign_id__schedules_now_post() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); @@ -902,14 +650,8 @@ public void test_campaigns__campaign_id__schedules_now_post() throws IOException @Test public void test_campaigns__campaign_id__schedules_test_post() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -922,14 +664,8 @@ public void test_campaigns__campaign_id__schedules_test_post() throws IOExceptio @Test public void test_categories_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -944,14 +680,8 @@ public void test_categories_get() throws IOException { @Test public void test_categories_stats_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -969,14 +699,8 @@ public void test_categories_stats_get() throws IOException { @Test public void test_categories_stats_sums_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -995,14 +719,8 @@ public void test_categories_stats_sums_get() throws IOException { @Test public void test_clients_stats_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1017,14 +735,8 @@ public void test_clients_stats_get() throws IOException { @Test public void test_clients__client_type__stats_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1039,14 +751,8 @@ public void test_clients__client_type__stats_get() throws IOException { @Test public void test_contactdb_custom_fields_post() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); @@ -1059,14 +765,8 @@ public void test_contactdb_custom_fields_post() throws IOException { @Test public void test_contactdb_custom_fields_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1078,14 +778,8 @@ public void test_contactdb_custom_fields_get() throws IOException { @Test public void test_contactdb_custom_fields__custom_field_id__get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1097,14 +791,8 @@ public void test_contactdb_custom_fields__custom_field_id__get() throws IOExcept @Test public void test_contactdb_custom_fields__custom_field_id__delete() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "202"); Request request = new Request(); @@ -1116,14 +804,8 @@ public void test_contactdb_custom_fields__custom_field_id__delete() throws IOExc @Test public void test_contactdb_lists_post() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); @@ -1136,14 +818,8 @@ public void test_contactdb_lists_post() throws IOException { @Test public void test_contactdb_lists_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1155,14 +831,8 @@ public void test_contactdb_lists_get() throws IOException { @Test public void test_contactdb_lists_delete() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -1175,14 +845,8 @@ public void test_contactdb_lists_delete() throws IOException { @Test public void test_contactdb_lists__list_id__patch() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1196,14 +860,8 @@ public void test_contactdb_lists__list_id__patch() throws IOException { @Test public void test_contactdb_lists__list_id__get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1216,14 +874,8 @@ public void test_contactdb_lists__list_id__get() throws IOException { @Test public void test_contactdb_lists__list_id__delete() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "202"); Request request = new Request(); @@ -1236,14 +888,8 @@ public void test_contactdb_lists__list_id__delete() throws IOException { @Test public void test_contactdb_lists__list_id__recipients_post() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); @@ -1256,14 +902,8 @@ public void test_contactdb_lists__list_id__recipients_post() throws IOException @Test public void test_contactdb_lists__list_id__recipients_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1278,14 +918,8 @@ public void test_contactdb_lists__list_id__recipients_get() throws IOException { @Test public void test_contactdb_lists__list_id__recipients__recipient_id__post() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); @@ -1297,14 +931,8 @@ public void test_contactdb_lists__list_id__recipients__recipient_id__post() thro @Test public void test_contactdb_lists__list_id__recipients__recipient_id__delete() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -1318,14 +946,8 @@ public void test_contactdb_lists__list_id__recipients__recipient_id__delete() th @Test public void test_contactdb_recipients_patch() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); @@ -1338,14 +960,8 @@ public void test_contactdb_recipients_patch() throws IOException { @Test public void test_contactdb_recipients_post() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); @@ -1358,14 +974,8 @@ public void test_contactdb_recipients_post() throws IOException { @Test public void test_contactdb_recipients_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1379,14 +989,8 @@ public void test_contactdb_recipients_get() throws IOException { @Test public void test_contactdb_recipients_delete() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1399,14 +1003,8 @@ public void test_contactdb_recipients_delete() throws IOException { @Test public void test_contactdb_recipients_billable_count_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1418,14 +1016,8 @@ public void test_contactdb_recipients_billable_count_get() throws IOException { @Test public void test_contactdb_recipients_count_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1437,14 +1029,8 @@ public void test_contactdb_recipients_count_get() throws IOException { @Test public void test_contactdb_recipients_search_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1457,14 +1043,8 @@ public void test_contactdb_recipients_search_get() throws IOException { @Test public void test_contactdb_recipients__recipient_id__get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1476,14 +1056,8 @@ public void test_contactdb_recipients__recipient_id__get() throws IOException { @Test public void test_contactdb_recipients__recipient_id__delete() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -1495,14 +1069,8 @@ public void test_contactdb_recipients__recipient_id__delete() throws IOException @Test public void test_contactdb_recipients__recipient_id__lists_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1514,14 +1082,8 @@ public void test_contactdb_recipients__recipient_id__lists_get() throws IOExcept @Test public void test_contactdb_reserved_fields_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1533,14 +1095,8 @@ public void test_contactdb_reserved_fields_get() throws IOException { @Test public void test_contactdb_segments_post() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1553,14 +1109,8 @@ public void test_contactdb_segments_post() throws IOException { @Test public void test_contactdb_segments_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1572,14 +1122,8 @@ public void test_contactdb_segments_get() throws IOException { @Test public void test_contactdb_segments__segment_id__patch() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1593,14 +1137,8 @@ public void test_contactdb_segments__segment_id__patch() throws IOException { @Test public void test_contactdb_segments__segment_id__get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1613,14 +1151,8 @@ public void test_contactdb_segments__segment_id__get() throws IOException { @Test public void test_contactdb_segments__segment_id__delete() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -1633,14 +1165,8 @@ public void test_contactdb_segments__segment_id__delete() throws IOException { @Test public void test_contactdb_segments__segment_id__recipients_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1654,14 +1180,8 @@ public void test_contactdb_segments__segment_id__recipients_get() throws IOExcep @Test public void test_devices_stats_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1678,14 +1198,8 @@ public void test_devices_stats_get() throws IOException { @Test public void test_geo_stats_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1703,14 +1217,8 @@ public void test_geo_stats_get() throws IOException { @Test public void test_ips_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1727,14 +1235,8 @@ public void test_ips_get() throws IOException { @Test public void test_ips_assigned_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1746,14 +1248,8 @@ public void test_ips_assigned_get() throws IOException { @Test public void test_ips_pools_post() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1766,14 +1262,8 @@ public void test_ips_pools_post() throws IOException { @Test public void test_ips_pools_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1785,14 +1275,8 @@ public void test_ips_pools_get() throws IOException { @Test public void test_ips_pools__pool_name__put() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1805,14 +1289,8 @@ public void test_ips_pools__pool_name__put() throws IOException { @Test public void test_ips_pools__pool_name__get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1824,14 +1302,8 @@ public void test_ips_pools__pool_name__get() throws IOException { @Test public void test_ips_pools__pool_name__delete() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -1843,14 +1315,8 @@ public void test_ips_pools__pool_name__delete() throws IOException { @Test public void test_ips_pools__pool_name__ips_post() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); @@ -1863,14 +1329,8 @@ public void test_ips_pools__pool_name__ips_post() throws IOException { @Test public void test_ips_pools__pool_name__ips__ip__delete() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -1882,14 +1342,8 @@ public void test_ips_pools__pool_name__ips__ip__delete() throws IOException { @Test public void test_ips_warmup_post() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1902,14 +1356,8 @@ public void test_ips_warmup_post() throws IOException { @Test public void test_ips_warmup_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1921,14 +1369,8 @@ public void test_ips_warmup_get() throws IOException { @Test public void test_ips_warmup__ip_address__get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1940,14 +1382,8 @@ public void test_ips_warmup__ip_address__get() throws IOException { @Test public void test_ips_warmup__ip_address__delete() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -1959,14 +1395,8 @@ public void test_ips_warmup__ip_address__delete() throws IOException { @Test public void test_ips__ip_address__get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1978,14 +1408,8 @@ public void test_ips__ip_address__get() throws IOException { @Test public void test_mail_batch_post() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); @@ -1997,14 +1421,8 @@ public void test_mail_batch_post() throws IOException { @Test public void test_mail_batch__batch_id__get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2016,14 +1434,8 @@ public void test_mail_batch__batch_id__get() throws IOException { @Test public void test_mail_send_post() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "202"); Request request = new Request(); @@ -2036,14 +1448,8 @@ public void test_mail_send_post() throws IOException { @Test public void test_mail_settings_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2057,14 +1463,8 @@ public void test_mail_settings_get() throws IOException { @Test public void test_mail_settings_address_whitelist_patch() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2077,14 +1477,8 @@ public void test_mail_settings_address_whitelist_patch() throws IOException { @Test public void test_mail_settings_address_whitelist_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2096,14 +1490,8 @@ public void test_mail_settings_address_whitelist_get() throws IOException { @Test public void test_mail_settings_bcc_patch() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2116,14 +1504,8 @@ public void test_mail_settings_bcc_patch() throws IOException { @Test public void test_mail_settings_bcc_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2135,14 +1517,8 @@ public void test_mail_settings_bcc_get() throws IOException { @Test public void test_mail_settings_bounce_purge_patch() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2155,14 +1531,8 @@ public void test_mail_settings_bounce_purge_patch() throws IOException { @Test public void test_mail_settings_bounce_purge_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2174,14 +1544,8 @@ public void test_mail_settings_bounce_purge_get() throws IOException { @Test public void test_mail_settings_footer_patch() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2194,14 +1558,8 @@ public void test_mail_settings_footer_patch() throws IOException { @Test public void test_mail_settings_footer_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2213,14 +1571,8 @@ public void test_mail_settings_footer_get() throws IOException { @Test public void test_mail_settings_forward_bounce_patch() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2233,14 +1585,8 @@ public void test_mail_settings_forward_bounce_patch() throws IOException { @Test public void test_mail_settings_forward_bounce_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2252,14 +1598,8 @@ public void test_mail_settings_forward_bounce_get() throws IOException { @Test public void test_mail_settings_forward_spam_patch() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2272,14 +1612,8 @@ public void test_mail_settings_forward_spam_patch() throws IOException { @Test public void test_mail_settings_forward_spam_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2291,14 +1625,8 @@ public void test_mail_settings_forward_spam_get() throws IOException { @Test public void test_mail_settings_plain_content_patch() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2311,14 +1639,8 @@ public void test_mail_settings_plain_content_patch() throws IOException { @Test public void test_mail_settings_plain_content_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2330,14 +1652,8 @@ public void test_mail_settings_plain_content_get() throws IOException { @Test public void test_mail_settings_spam_check_patch() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2350,14 +1666,8 @@ public void test_mail_settings_spam_check_patch() throws IOException { @Test public void test_mail_settings_spam_check_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2369,14 +1679,8 @@ public void test_mail_settings_spam_check_get() throws IOException { @Test public void test_mail_settings_template_patch() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2389,14 +1693,8 @@ public void test_mail_settings_template_patch() throws IOException { @Test public void test_mail_settings_template_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2408,14 +1706,8 @@ public void test_mail_settings_template_get() throws IOException { @Test public void test_mailbox_providers_stats_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2433,14 +1725,8 @@ public void test_mailbox_providers_stats_get() throws IOException { @Test public void test_partner_settings_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2454,14 +1740,8 @@ public void test_partner_settings_get() throws IOException { @Test public void test_partner_settings_new_relic_patch() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2474,14 +1754,8 @@ public void test_partner_settings_new_relic_patch() throws IOException { @Test public void test_partner_settings_new_relic_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2493,14 +1767,8 @@ public void test_partner_settings_new_relic_get() throws IOException { @Test public void test_scopes_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2512,14 +1780,8 @@ public void test_scopes_get() throws IOException { @Test public void test_senders_post() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); @@ -2532,14 +1794,8 @@ public void test_senders_post() throws IOException { @Test public void test_senders_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2551,14 +1807,8 @@ public void test_senders_get() throws IOException { @Test public void test_senders__sender_id__patch() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2571,14 +1821,8 @@ public void test_senders__sender_id__patch() throws IOException { @Test public void test_senders__sender_id__get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2590,14 +1834,8 @@ public void test_senders__sender_id__get() throws IOException { @Test public void test_senders__sender_id__delete() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -2609,14 +1847,8 @@ public void test_senders__sender_id__delete() throws IOException { @Test public void test_senders__sender_id__resend_verification_post() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -2628,14 +1860,8 @@ public void test_senders__sender_id__resend_verification_post() throws IOExcepti @Test public void test_stats_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2652,14 +1878,8 @@ public void test_stats_get() throws IOException { @Test public void test_subusers_post() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2672,14 +1892,8 @@ public void test_subusers_post() throws IOException { @Test public void test_subusers_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2694,14 +1908,8 @@ public void test_subusers_get() throws IOException { @Test public void test_subusers_reputations_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2714,14 +1922,8 @@ public void test_subusers_reputations_get() throws IOException { @Test public void test_subusers_stats_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2739,14 +1941,8 @@ public void test_subusers_stats_get() throws IOException { @Test public void test_subusers_stats_monthly_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2764,14 +1960,8 @@ public void test_subusers_stats_monthly_get() throws IOException { @Test public void test_subusers_stats_sums_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2790,14 +1980,8 @@ public void test_subusers_stats_sums_get() throws IOException { @Test public void test_subusers__subuser_name__patch() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -2810,14 +1994,8 @@ public void test_subusers__subuser_name__patch() throws IOException { @Test public void test_subusers__subuser_name__delete() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -2829,14 +2007,8 @@ public void test_subusers__subuser_name__delete() throws IOException { @Test public void test_subusers__subuser_name__ips_put() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2849,14 +2021,8 @@ public void test_subusers__subuser_name__ips_put() throws IOException { @Test public void test_subusers__subuser_name__monitor_put() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2869,14 +2035,8 @@ public void test_subusers__subuser_name__monitor_put() throws IOException { @Test public void test_subusers__subuser_name__monitor_post() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2889,14 +2049,8 @@ public void test_subusers__subuser_name__monitor_post() throws IOException { @Test public void test_subusers__subuser_name__monitor_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2908,14 +2062,8 @@ public void test_subusers__subuser_name__monitor_get() throws IOException { @Test public void test_subusers__subuser_name__monitor_delete() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -2927,14 +2075,8 @@ public void test_subusers__subuser_name__monitor_delete() throws IOException { @Test public void test_subusers__subuser_name__stats_monthly_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2951,14 +2093,8 @@ public void test_subusers__subuser_name__stats_monthly_get() throws IOException @Test public void test_suppression_blocks_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2974,14 +2110,8 @@ public void test_suppression_blocks_get() throws IOException { @Test public void test_suppression_blocks_delete() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -2994,14 +2124,8 @@ public void test_suppression_blocks_delete() throws IOException { @Test public void test_suppression_blocks__email__get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -3013,14 +2137,8 @@ public void test_suppression_blocks__email__get() throws IOException { @Test public void test_suppression_blocks__email__delete() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -3032,14 +2150,8 @@ public void test_suppression_blocks__email__delete() throws IOException { @Test public void test_suppression_bounces_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -3053,14 +2165,8 @@ public void test_suppression_bounces_get() throws IOException { @Test public void test_suppression_bounces_delete() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -3073,14 +2179,8 @@ public void test_suppression_bounces_delete() throws IOException { @Test public void test_suppression_bounces__email__get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -3092,14 +2192,8 @@ public void test_suppression_bounces__email__get() throws IOException { @Test public void test_suppression_bounces__email__delete() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -3112,14 +2206,8 @@ public void test_suppression_bounces__email__delete() throws IOException { @Test public void test_suppression_invalid_emails_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -3135,14 +2223,8 @@ public void test_suppression_invalid_emails_get() throws IOException { @Test public void test_suppression_invalid_emails_delete() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -3155,14 +2237,8 @@ public void test_suppression_invalid_emails_delete() throws IOException { @Test public void test_suppression_invalid_emails__email__get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -3174,14 +2250,8 @@ public void test_suppression_invalid_emails__email__get() throws IOException { @Test public void test_suppression_invalid_emails__email__delete() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -3193,14 +2263,8 @@ public void test_suppression_invalid_emails__email__delete() throws IOException @Test public void test_suppression_spam_report__email__get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -3212,14 +2276,8 @@ public void test_suppression_spam_report__email__get() throws IOException { @Test public void test_suppression_spam_report__email__delete() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -3231,14 +2289,8 @@ public void test_suppression_spam_report__email__delete() throws IOException { @Test public void test_suppression_spam_reports_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -3254,14 +2306,8 @@ public void test_suppression_spam_reports_get() throws IOException { @Test public void test_suppression_spam_reports_delete() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -3274,14 +2320,8 @@ public void test_suppression_spam_reports_delete() throws IOException { @Test public void test_suppression_unsubscribes_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -3297,14 +2337,8 @@ public void test_suppression_unsubscribes_get() throws IOException { @Test public void test_templates_post() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); @@ -3317,14 +2351,8 @@ public void test_templates_post() throws IOException { @Test public void test_templates_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -3336,14 +2364,8 @@ public void test_templates_get() throws IOException { @Test public void test_templates__template_id__patch() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -3356,14 +2378,8 @@ public void test_templates__template_id__patch() throws IOException { @Test public void test_templates__template_id__get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -3375,14 +2391,8 @@ public void test_templates__template_id__get() throws IOException { @Test public void test_templates__template_id__delete() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -3394,14 +2404,8 @@ public void test_templates__template_id__delete() throws IOException { @Test public void test_templates__template_id__versions_post() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); @@ -3414,14 +2418,8 @@ public void test_templates__template_id__versions_post() throws IOException { @Test public void test_templates__template_id__versions__version_id__patch() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -3434,14 +2432,8 @@ public void test_templates__template_id__versions__version_id__patch() throws IO @Test public void test_templates__template_id__versions__version_id__get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -3453,14 +2445,8 @@ public void test_templates__template_id__versions__version_id__get() throws IOEx @Test public void test_templates__template_id__versions__version_id__delete() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -3472,14 +2458,8 @@ public void test_templates__template_id__versions__version_id__delete() throws I @Test public void test_templates__template_id__versions__version_id__activate_post() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -3491,14 +2471,8 @@ public void test_templates__template_id__versions__version_id__activate_post() t @Test public void test_tracking_settings_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -3512,14 +2486,8 @@ public void test_tracking_settings_get() throws IOException { @Test public void test_tracking_settings_click_patch() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -3532,14 +2500,8 @@ public void test_tracking_settings_click_patch() throws IOException { @Test public void test_tracking_settings_click_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -3551,14 +2513,8 @@ public void test_tracking_settings_click_get() throws IOException { @Test public void test_tracking_settings_google_analytics_patch() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -3571,14 +2527,8 @@ public void test_tracking_settings_google_analytics_patch() throws IOException { @Test public void test_tracking_settings_google_analytics_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -3590,14 +2540,8 @@ public void test_tracking_settings_google_analytics_get() throws IOException { @Test public void test_tracking_settings_open_patch() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -3610,14 +2554,8 @@ public void test_tracking_settings_open_patch() throws IOException { @Test public void test_tracking_settings_open_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -3629,14 +2567,8 @@ public void test_tracking_settings_open_get() throws IOException { @Test public void test_tracking_settings_subscription_patch() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -3649,14 +2581,8 @@ public void test_tracking_settings_subscription_patch() throws IOException { @Test public void test_tracking_settings_subscription_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -3668,14 +2594,8 @@ public void test_tracking_settings_subscription_get() throws IOException { @Test public void test_user_account_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -3687,14 +2607,8 @@ public void test_user_account_get() throws IOException { @Test public void test_user_credits_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -3706,14 +2620,8 @@ public void test_user_credits_get() throws IOException { @Test public void test_user_email_put() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -3726,14 +2634,8 @@ public void test_user_email_put() throws IOException { @Test public void test_user_email_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -3745,14 +2647,8 @@ public void test_user_email_get() throws IOException { @Test public void test_user_password_put() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -3765,14 +2661,8 @@ public void test_user_password_put() throws IOException { @Test public void test_user_profile_patch() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -3785,14 +2675,8 @@ public void test_user_profile_patch() throws IOException { @Test public void test_user_profile_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -3804,14 +2688,8 @@ public void test_user_profile_get() throws IOException { @Test public void test_user_scheduled_sends_post() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); @@ -3824,14 +2702,8 @@ public void test_user_scheduled_sends_post() throws IOException { @Test public void test_user_scheduled_sends_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -3843,14 +2715,8 @@ public void test_user_scheduled_sends_get() throws IOException { @Test public void test_user_scheduled_sends__batch_id__patch() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -3863,14 +2729,8 @@ public void test_user_scheduled_sends__batch_id__patch() throws IOException { @Test public void test_user_scheduled_sends__batch_id__get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -3882,14 +2742,8 @@ public void test_user_scheduled_sends__batch_id__get() throws IOException { @Test public void test_user_scheduled_sends__batch_id__delete() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -3901,14 +2755,8 @@ public void test_user_scheduled_sends__batch_id__delete() throws IOException { @Test public void test_user_settings_enforced_tls_patch() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -3921,14 +2769,8 @@ public void test_user_settings_enforced_tls_patch() throws IOException { @Test public void test_user_settings_enforced_tls_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -3940,14 +2782,8 @@ public void test_user_settings_enforced_tls_get() throws IOException { @Test public void test_user_username_put() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -3960,14 +2796,8 @@ public void test_user_username_put() throws IOException { @Test public void test_user_username_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -3979,14 +2809,8 @@ public void test_user_username_get() throws IOException { @Test public void test_user_webhooks_event_settings_patch() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -3999,14 +2823,8 @@ public void test_user_webhooks_event_settings_patch() throws IOException { @Test public void test_user_webhooks_event_settings_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -4018,14 +2836,8 @@ public void test_user_webhooks_event_settings_get() throws IOException { @Test public void test_user_webhooks_event_test_post() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -4038,14 +2850,8 @@ public void test_user_webhooks_event_test_post() throws IOException { @Test public void test_user_webhooks_parse_settings_post() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); @@ -4058,14 +2864,8 @@ public void test_user_webhooks_parse_settings_post() throws IOException { @Test public void test_user_webhooks_parse_settings_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -4077,14 +2877,8 @@ public void test_user_webhooks_parse_settings_get() throws IOException { @Test public void test_user_webhooks_parse_settings__hostname__patch() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -4097,14 +2891,8 @@ public void test_user_webhooks_parse_settings__hostname__patch() throws IOExcept @Test public void test_user_webhooks_parse_settings__hostname__get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -4116,14 +2904,8 @@ public void test_user_webhooks_parse_settings__hostname__get() throws IOExceptio @Test public void test_user_webhooks_parse_settings__hostname__delete() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -4135,14 +2917,8 @@ public void test_user_webhooks_parse_settings__hostname__delete() throws IOExcep @Test public void test_user_webhooks_parse_stats_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -4298,14 +3074,8 @@ public void test_whitelabel_domains__id__ips_post() throws IOException { @Test public void test_whitelabel_domains__id__ips__ip__delete() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -4317,14 +3087,8 @@ public void test_whitelabel_domains__id__ips__ip__delete() throws IOException { @Test public void test_whitelabel_domains__id__validate_post() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -4336,14 +3100,8 @@ public void test_whitelabel_domains__id__validate_post() throws IOException { @Test public void test_whitelabel_ips_post() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); @@ -4356,14 +3114,8 @@ public void test_whitelabel_ips_post() throws IOException { @Test public void test_whitelabel_ips_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -4378,14 +3130,8 @@ public void test_whitelabel_ips_get() throws IOException { @Test public void test_whitelabel_ips__id__get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -4397,14 +3143,8 @@ public void test_whitelabel_ips__id__get() throws IOException { @Test public void test_whitelabel_ips__id__delete() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -4416,14 +3156,8 @@ public void test_whitelabel_ips__id__delete() throws IOException { @Test public void test_whitelabel_ips__id__validate_post() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -4435,14 +3169,8 @@ public void test_whitelabel_ips__id__validate_post() throws IOException { @Test public void test_whitelabel_links_post() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); @@ -4457,14 +3185,8 @@ public void test_whitelabel_links_post() throws IOException { @Test public void test_whitelabel_links_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -4477,14 +3199,8 @@ public void test_whitelabel_links_get() throws IOException { @Test public void test_whitelabel_links_default_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -4497,14 +3213,8 @@ public void test_whitelabel_links_default_get() throws IOException { @Test public void test_whitelabel_links_subuser_get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -4517,14 +3227,8 @@ public void test_whitelabel_links_subuser_get() throws IOException { @Test public void test_whitelabel_links_subuser_delete() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -4537,14 +3241,8 @@ public void test_whitelabel_links_subuser_delete() throws IOException { @Test public void test_whitelabel_links__id__patch() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -4557,14 +3255,8 @@ public void test_whitelabel_links__id__patch() throws IOException { @Test public void test_whitelabel_links__id__get() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -4576,14 +3268,8 @@ public void test_whitelabel_links__id__get() throws IOException { @Test public void test_whitelabel_links__id__delete() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -4595,14 +3281,8 @@ public void test_whitelabel_links__id__delete() throws IOException { @Test public void test_whitelabel_links__id__validate_post() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -4614,14 +3294,8 @@ public void test_whitelabel_links__id__validate_post() throws IOException { @Test public void test_whitelabel_links__link_id__subuser_post() throws IOException { - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); + sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); From 1df94b5758d0ee88011a492c748b0b375c870f58 Mon Sep 17 00:00:00 2001 From: pushkyn Date: Sat, 21 Oct 2017 14:18:10 +0300 Subject: [PATCH 052/345] Update readme - added maven central badge --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 02725369..505fa717 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,5 @@ [![Travis Badge](https://travis-ci.org/sendgrid/sendgrid-java.svg?branch=master)](https://travis-ci.org/sendgrid/sendgrid-java) +[![Maven Central](https://img.shields.io/maven-central/v/com.sendgrid/sendgrid-java.svg)](http://mvnrepository.com/artifact/com.sendgrid/sendgrid-java) [![Email Notifications Badge](https://dx.sendgrid.com/badge/java)](https://dx.sendgrid.com/newsletter/java) **NEW:** Subscribe to email [notifications](https://dx.sendgrid.com/newsletter/java) for releases and breaking changes. From e224ab20f740df09d97dad439d60443ef04307b1 Mon Sep 17 00:00:00 2001 From: Brandon Smith Date: Sat, 21 Oct 2017 20:37:48 -0400 Subject: [PATCH 053/345] Spelling corrections in .md files --- CHANGELOG.md | 8 ++++---- TROUBLESHOOTING.md | 2 +- USAGE.md | 28 ++++++++++++++-------------- proposals/mail-helper-refactor.md | 2 +- 4 files changed, 20 insertions(+), 20 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7a85d7e2..818020a4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,12 +20,12 @@ All notable changes to this project will be documented in this file. ### BREAKING CHANGE - PR #162 Update java http client dependency to [4.1.0 from 2.3.4](https://github.com/sendgrid/java-http-client/releases) - BIG thanks to [Diego Camargo](https://github.com/belfazt) for the pull request! -- The breaking change is that variables that were public are now private and accessable only via getters and setters -- The `Request` object attributes are now only accessable through getters/setters +- The breaking change is that variables that were public are now private and accessible only via getters and setters +- The `Request` object attributes are now only accessible through getters/setters - `request.method` is now `request.setMethod(string)` - `request.endpoint` is now `request.setEndpoint(string)` - `request.body` is now `request.setBody(string)` -- The `Response` object attributes are now only accessable through getters/setters +- The `Response` object attributes are now only accessible through getters/setters - `response.statusCode` is now `response.getStatusCode()` - `response.body` is now `response.getBody()` - `response.headers` is now `response.getHeaders()` @@ -118,7 +118,7 @@ request.addQueryParam("limit", "1"); ## [2.2.2] - 2015-5-23 ### Fixed -- Subsitution orders being swapped via [#65](https://github.com/sendgrid/sendgrid-java/pull/65) +- Substitution orders being swapped via [#65](https://github.com/sendgrid/sendgrid-java/pull/65) ## [2.2.1] - 2015-5-14 ### Changed diff --git a/TROUBLESHOOTING.md b/TROUBLESHOOTING.md index fc282d40..e510304b 100644 --- a/TROUBLESHOOTING.md +++ b/TROUBLESHOOTING.md @@ -102,7 +102,7 @@ We have an issue to remove that dependency [here](https://github.com/sendgrid/ja ## Viewing the Request Body -When debugging or testing, it may be useful to exampine the raw request body to compare against the [documented format](https://sendgrid.com/docs/API_Reference/api_v3.html). +When debugging or testing, it may be useful to examine the raw request body to compare against the [documented format](https://sendgrid.com/docs/API_Reference/api_v3.html). You can do this right before you call `request.setBody(mail.build())` like so: diff --git a/USAGE.md b/USAGE.md index b29616d7..1374bc51 100644 --- a/USAGE.md +++ b/USAGE.md @@ -161,7 +161,7 @@ For more information, please see our [User Guide](http://sendgrid.com/docs/User_ ``` ## Retrieve a specific whitelisted IP -**This endpoint allows you to retreive a specific IP address that has been whitelisted.** +**This endpoint allows you to retrieve a specific IP address that has been whitelisted.** You must include the ID for the specific IP address you want to retrieve in your call. @@ -497,7 +497,7 @@ If the API Key ID does not exist an HTTP 404 will be returned. **This endpoint allows you to revoke an existing API Key.** -Authentications using this API Key will fail after this request is made, with some small propogation delay.If the API Key ID does not exist an HTTP 404 will be returned. +Authentications using this API Key will fail after this request is made, with some small propagation delay.If the API Key ID does not exist an HTTP 404 will be returned. The API Keys feature allows customers to be able to generate an API Key credential which can be used for authentication with the SendGrid v3 Web API or the [Mail API Endpoint](https://sendgrid.com/docs/API_Reference/Web_API/mail.html). @@ -563,7 +563,7 @@ This endpoint will return information for each group ID that you include in your Suppressions are a list of email addresses that will not receive content sent under a given [group](https://sendgrid.com/docs/API_Reference/Web_API_v3/Suppression_Management/groups.html). -Suppression groups, or [unsubscribe groups](https://sendgrid.com/docs/API_Reference/Web_API_v3/Suppression_Management/groups.html), allow you to label a category of content that you regularly send. This gives your recipients the ability to opt out of a specific set of your email. For example, you might define a group for your transactional email, and one for your marketing email so that your users can continue recieving your transactional email witout having to receive your marketing content. +Suppression groups, or [unsubscribe groups](https://sendgrid.com/docs/API_Reference/Web_API_v3/Suppression_Management/groups.html), allow you to label a category of content that you regularly send. This gives your recipients the ability to opt out of a specific set of your email. For example, you might define a group for your transactional email, and one for your marketing email so that your users can continue receiving your transactional email without having to receive your marketing content. ### GET /asm/groups @@ -814,9 +814,9 @@ A global suppression (or global unsubscribe) is an email address of a recipient ``` ## Retrieve a Global Suppression -**This endpoint allows you to retrieve a global suppression. You can also use this endpoint to confirm if an email address is already globally suppresed.** +**This endpoint allows you to retrieve a global suppression. You can also use this endpoint to confirm if an email address is already globally suppressed.** -If the email address you include in the URL path parameter `{email}` is alreayd globally suppressed, the response will include that email address. If the address you enter for `{email}` is not globally suppressed, an empty JSON object `{}` will be returned. +If the email address you include in the URL path parameter `{email}` is already globally suppressed, the response will include that email address. If the address you enter for `{email}` is not globally suppressed, an empty JSON object `{}` will be returned. A global suppression (or global unsubscribe) is an email address of a recipient who does not want to receive any of your messages. A globally suppressed recipient will be removed from any email you send. For more information, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Suppressions/global_unsubscribes.html). @@ -2018,7 +2018,7 @@ Valid operators for create and update depend on the type of the field you are se Segment conditions using "eq" or "ne" for email clicks and opens should provide a "field" of either *clicks.campaign_identifier* or *opens.campaign_identifier*. The condition value should be a string containing the id of a completed campaign. -Segments may contain multiple condtions, joined by an "and" or "or" in the "and_or" field. The first condition in the conditions list must have an empty "and_or", and subsequent conditions must all specify an "and_or". +Segments may contain multiple conditions, joined by an "and" or "or" in the "and_or" field. The first condition in the conditions list must have an empty "and_or", and subsequent conditions must all specify an "and_or". The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.com/docs/User_Guide/Marketing_Campaigns/index.html) recipients. @@ -2701,7 +2701,7 @@ This endpoint has a helper, check it out [here](https://github.com/sendgrid/send Request request = new Request(); request.setMethod(Method.POST); request.setEndpoint("mail/send"); - request.setBody("{\"custom_args\":{\"New Argument 1\":\"New Value 1\",\"activationAttempt\":\"1\",\"customerAccountNumber\":\")[CUSTOMER ACCOUNT NUMBER GOES HERE]\"},\"from\":{\"email\":\"sam.smith@example.com\",\"name\":\"Sam Smith\"},\"attachments\":[{\"name\":\"file1\",\"filename\":\"file1.jpg\",\"content\":\"[BASE64 encoded content block here]\",\"disposition\":\"inline\",\"content_id\":\"ii_139db99fdb5c3704\",\"type\":\"jpg\"}],\"personalizations\":[{\"to\":[{\"email\":\"john.doe@example.com\",\"name\":\"John Doe\"}],\"cc\":[{\"email\":\"jane.doe@example.com\",\"name\":\"Jane Doe\"}],\"bcc\":[{\"email\":\"sam.doe@example.com\",\"name\":\"Sam Doe\"}],\"custom_args\":{\"New Argument 1\":\"New Value 1\",\"activationAttempt\":\"1\",\"customerAccountNumber\":\"[CUSTOMER ACCOUNT NUMBER GOES HERE]\"},\"headers\":{\"X-Accept-Language\":\"en\",\"X-Mailer\":\"MyApp\"},\"send_at\":1409348513,\"substitutions\":{\"type\":\"object\",\"id\":\"substitutions\"},\"subject\":\"Hello, World!\"}],\"subject\":\"Hello, World!\",\"ip_pool_name\":\"[YOUR POOL NAME GOES HERE]\",\"content\":[{\"type\":\"text/html\",\"value\":\"

Hello, world!

\"}],\"headers\":{},\"asm\":{\"groups_to_display\":[1,2,3],\"group_id\":1},\"batch_id\":\"[YOUR BATCH ID GOES HERE]\",\"tracking_settings\":{\"subscription_tracking\":{\"text\":\"If you would like to unsubscribe and stop receiveing these emails <% click here %>.\",\"enable\":true,\"html\":\"If you would like to unsubscribe and stop receiving these emails <% clickhere %>.\",\"substitution_tag\":\"<%click here%>\"},\"open_tracking\":{\"enable\":true,\"substitution_tag\":\"%opentrack\"},\"click_tracking\":{\"enable\":true,\"enable_text\":true},\"ganalytics\":{\"utm_campaign\":\"[NAME OF YOUR REFERRER SOURCE]\",\"enable\":true,\"utm_name\":\"[NAME OF YOUR CAMPAIGN]\",\"utm_term\":\"[IDENTIFY PAID KEYWORDS HERE]\",\"utm_content\":\"[USE THIS SPACE TO DIFFERENTIATE YOUR EMAIL FROM ADS]\",\"utm_medium\":\"[NAME OF YOUR MARKETING MEDIUM e.g. email]\"}},\"mail_settings\":{\"footer\":{\"text\":\"Thanks,/n The SendGrid Team\",\"enable\":true,\"html\":\"

Thanks
The SendGrid Team

\"},\"spam_check\":{\"threshold\":3,\"post_to_url\":\"http://example.com/compliance\",\"enable\":true},\"bypass_list_management\":{\"enable\":true},\"sandbox_mode\":{\"enable\":false},\"bcc\":{\"enable\":true,\"email\":\"ben.doe@example.com\"}},\"reply_to\":{\"email\":\"sam.smith@example.com\",\"name\":\"Sam Smith\"},\"sections\":{\"section\":{\":sectionName2\":\"section 2 text\",\":sectionName1\":\"section 1 text\"}},\"template_id\":\"[YOUR TEMPLATE ID GOES HERE]\",\"categories\":[\"category1\",\"category2\"],\"send_at\":1409348513}"; + request.setBody("{\"custom_args\":{\"New Argument 1\":\"New Value 1\",\"activationAttempt\":\"1\",\"customerAccountNumber\":\")[CUSTOMER ACCOUNT NUMBER GOES HERE]\"},\"from\":{\"email\":\"sam.smith@example.com\",\"name\":\"Sam Smith\"},\"attachments\":[{\"name\":\"file1\",\"filename\":\"file1.jpg\",\"content\":\"[BASE64 encoded content block here]\",\"disposition\":\"inline\",\"content_id\":\"ii_139db99fdb5c3704\",\"type\":\"jpg\"}],\"personalizations\":[{\"to\":[{\"email\":\"john.doe@example.com\",\"name\":\"John Doe\"}],\"cc\":[{\"email\":\"jane.doe@example.com\",\"name\":\"Jane Doe\"}],\"bcc\":[{\"email\":\"sam.doe@example.com\",\"name\":\"Sam Doe\"}],\"custom_args\":{\"New Argument 1\":\"New Value 1\",\"activationAttempt\":\"1\",\"customerAccountNumber\":\"[CUSTOMER ACCOUNT NUMBER GOES HERE]\"},\"headers\":{\"X-Accept-Language\":\"en\",\"X-Mailer\":\"MyApp\"},\"send_at\":1409348513,\"substitutions\":{\"type\":\"object\",\"id\":\"substitutions\"},\"subject\":\"Hello, World!\"}],\"subject\":\"Hello, World!\",\"ip_pool_name\":\"[YOUR POOL NAME GOES HERE]\",\"content\":[{\"type\":\"text/html\",\"value\":\"

Hello, world!

\"}],\"headers\":{},\"asm\":{\"groups_to_display\":[1,2,3],\"group_id\":1},\"batch_id\":\"[YOUR BATCH ID GOES HERE]\",\"tracking_settings\":{\"subscription_tracking\":{\"text\":\"If you would like to unsubscribe and stop receiving these emails <% click here %>.\",\"enable\":true,\"html\":\"If you would like to unsubscribe and stop receiving these emails <% clickhere %>.\",\"substitution_tag\":\"<%click here%>\"},\"open_tracking\":{\"enable\":true,\"substitution_tag\":\"%opentrack\"},\"click_tracking\":{\"enable\":true,\"enable_text\":true},\"ganalytics\":{\"utm_campaign\":\"[NAME OF YOUR REFERRER SOURCE]\",\"enable\":true,\"utm_name\":\"[NAME OF YOUR CAMPAIGN]\",\"utm_term\":\"[IDENTIFY PAID KEYWORDS HERE]\",\"utm_content\":\"[USE THIS SPACE TO DIFFERENTIATE YOUR EMAIL FROM ADS]\",\"utm_medium\":\"[NAME OF YOUR MARKETING MEDIUM e.g. email]\"}},\"mail_settings\":{\"footer\":{\"text\":\"Thanks,/n The SendGrid Team\",\"enable\":true,\"html\":\"

Thanks
The SendGrid Team

\"},\"spam_check\":{\"threshold\":3,\"post_to_url\":\"http://example.com/compliance\",\"enable\":true},\"bypass_list_management\":{\"enable\":true},\"sandbox_mode\":{\"enable\":false},\"bcc\":{\"enable\":true,\"email\":\"ben.doe@example.com\"}},\"reply_to\":{\"email\":\"sam.smith@example.com\",\"name\":\"Sam Smith\"},\"sections\":{\"section\":{\":sectionName2\":\"section 2 text\",\":sectionName1\":\"section 1 text\"}},\"template_id\":\"[YOUR TEMPLATE ID GOES HERE]\",\"categories\":[\"category1\",\"category2\"],\"send_at\":1409348513}"; Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -4961,7 +4961,7 @@ For more information about your user profile: **This endpoint allows you to retrieve the current credit balance for your account.** -Your monthly credit allotment limits the number of emails you may send before incurring overage charges. For more information about credits and billing, please visit our [Clssroom](https://sendgrid.com/docs/Classroom/Basics/Billing/billing_info_and_faqs.html). +Your monthly credit allotment limits the number of emails you may send before incurring overage charges. For more information about credits and billing, please visit our [Classroom](https://sendgrid.com/docs/Classroom/Basics/Billing/billing_info_and_faqs.html). ### GET /user/credits @@ -5453,7 +5453,7 @@ The inbound parse webhook allows you to have incoming emails parsed, extracting **This endpoint allows you to retrieve all of your current inbound parse settings.** -The inbound parse webhook allows you to have incoming emails parsed, extracting some or all of the contnet, and then have that content POSTed by SendGrid to a URL of your choosing. For more information, please see our [User Guide](https://sendgrid.com/docs/API_Reference/Webhooks/parse.html). +The inbound parse webhook allows you to have incoming emails parsed, extracting some or all of the content, and then have that content POSTed by SendGrid to a URL of your choosing. For more information, please see our [User Guide](https://sendgrid.com/docs/API_Reference/Webhooks/parse.html). ### GET /user/webhooks/parse/settings @@ -5476,7 +5476,7 @@ The inbound parse webhook allows you to have incoming emails parsed, extracting **This endpoint allows you to update a specific inbound parse setting.** -The inbound parse webhook allows you to have incoming emails parsed, extracting some or all of the contnet, and then have that content POSTed by SendGrid to a URL of your choosing. For more information, please see our [User Guide](https://sendgrid.com/docs/API_Reference/Webhooks/parse.html). +The inbound parse webhook allows you to have incoming emails parsed, extracting some or all of the content, and then have that content POSTed by SendGrid to a URL of your choosing. For more information, please see our [User Guide](https://sendgrid.com/docs/API_Reference/Webhooks/parse.html). ### PATCH /user/webhooks/parse/settings/{hostname} @@ -5500,7 +5500,7 @@ The inbound parse webhook allows you to have incoming emails parsed, extracting **This endpoint allows you to retrieve a specific inbound parse setting.** -The inbound parse webhook allows you to have incoming emails parsed, extracting some or all of the contnet, and then have that content POSTed by SendGrid to a URL of your choosing. For more information, please see our [User Guide](https://sendgrid.com/docs/API_Reference/Webhooks/parse.html). +The inbound parse webhook allows you to have incoming emails parsed, extracting some or all of the content, and then have that content POSTed by SendGrid to a URL of your choosing. For more information, please see our [User Guide](https://sendgrid.com/docs/API_Reference/Webhooks/parse.html). ### GET /user/webhooks/parse/settings/{hostname} @@ -5523,7 +5523,7 @@ The inbound parse webhook allows you to have incoming emails parsed, extracting **This endpoint allows you to delete a specific inbound parse setting.** -The inbound parse webhook allows you to have incoming emails parsed, extracting some or all of the contnet, and then have that content POSTed by SendGrid to a URL of your choosing. For more information, please see our [User Guide](https://sendgrid.com/docs/API_Reference/Webhooks/parse.html). +The inbound parse webhook allows you to have incoming emails parsed, extracting some or all of the content, and then have that content POSTed by SendGrid to a URL of your choosing. For more information, please see our [User Guide](https://sendgrid.com/docs/API_Reference/Webhooks/parse.html). ### DELETE /user/webhooks/parse/settings/{hostname} @@ -5544,9 +5544,9 @@ The inbound parse webhook allows you to have incoming emails parsed, extracting ``` ## Retrieves Inbound Parse Webhook statistics. -**This endpoint allows you to retrieve the statistics for your Parse Webhook useage.** +**This endpoint allows you to retrieve the statistics for your Parse Webhook usage.** -SendGrid's Inbound Parse Webhook allows you to parse the contents and attachments of incomming emails. The Parse API can then POST the parsed emails to a URL that you specify. The Inbound Parse Webhook cannot parse messages greater than 20MB in size, including all attachments. +SendGrid's Inbound Parse Webhook allows you to parse the contents and attachments of incoming emails. The Parse API can then POST the parsed emails to a URL that you specify. The Inbound Parse Webhook cannot parse messages greater than 20MB in size, including all attachments. There are a number of pre-made integrations for the SendGrid Parse Webhook which make processing events easy. You can find these integrations in the [Library Index](https://sendgrid.com/docs/Integrate/libraries.html#-Webhook-Libraries). diff --git a/proposals/mail-helper-refactor.md b/proposals/mail-helper-refactor.md index b050491a..b06d2f1e 100644 --- a/proposals/mail-helper-refactor.md +++ b/proposals/mail-helper-refactor.md @@ -110,7 +110,7 @@ public class SendGridExample { tos, plainTextContent, htmlContent, - globalSubstition); // or globalSubstitutions + globalSubstitution); // or globalSubstitutions SendGrid sendgrid = new SendGrid(System.getenv("SENDGRID_API_KEY")); try { From a74a8dfe24d0161db01d30211cf2a4efd8aeb2c4 Mon Sep 17 00:00:00 2001 From: Shashank Sharma Date: Sat, 21 Oct 2017 21:05:55 -0400 Subject: [PATCH 054/345] Making ReadMe/Doc sections more SEO Friendly --- README.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 02725369..45abaabf 100644 --- a/README.md +++ b/README.md @@ -16,9 +16,9 @@ We appreciate your continued support, thank you! # Table of Contents * [Installation](#installation) -* [Quick Start](#quick_start) +* [Quick Start](#quick-start) * [Usage](#usage) -* [Use Cases](#use_cases) +* [Use Cases](#use-cases) * [Announcements](#announcements) * [Roadmap](#roadmap) * [How to Contribute](#contribute) @@ -79,7 +79,7 @@ You can just drop the jar file in. It's a fat jar - it has all the dependencies - [Java-HTTP-Client](https://github.com/sendgrid/java-http-client) - + # Quick Start ## Hello Email @@ -180,7 +180,7 @@ public class Example { - [v3 Web API Mail Send Helper](https://github.com/sendgrid/sendgrid-java/tree/master/src/main/java/com/sendgrid/helpers) - build a request object payload for a v3 /mail/send API call. - + # Use Cases [Examples of common API use cases](https://github.com/sendgrid/sendgrid-java/blob/master/USE_CASES.md), such as how to send an email with a transactional template. @@ -204,10 +204,10 @@ We encourage contribution to our libraries (you might even score some nifty swag Quick links: -- [Feature Request](https://github.com/sendgrid/sendgrid-java/blob/master/CONTRIBUTING.md#feature_request) -- [Bug Reports](https://github.com/sendgrid/sendgrid-java/blob/master/CONTRIBUTING.md#submit_a_bug_report) +- [Feature Request](https://github.com/sendgrid/sendgrid-java/blob/master/CONTRIBUTING.md#feature-request) +- [Bug Reports](https://github.com/sendgrid/sendgrid-java/blob/master/CONTRIBUTING.md#submit-a-bug-report) - [Sign the CLA to Create a Pull Request](https://github.com/sendgrid/sendgrid-java/blob/master/CONTRIBUTING.md#cla) -- [Improvements to the Codebase](https://github.com/sendgrid/sendgrid-java/blob/master/CONTRIBUTING.md#improvements_to_the_codebase) +- [Improvements to the Codebase](https://github.com/sendgrid/sendgrid-java/blob/master/CONTRIBUTING.md#improvements-to-the-codebase) # Troubleshooting From ab346685994c72b46924501c4423358a34f5ce25 Mon Sep 17 00:00:00 2001 From: Shashank Sharma Date: Sat, 21 Oct 2017 21:09:52 -0400 Subject: [PATCH 055/345] Making README/Doc sections more SEO friendly --- CONTRIBUTING.md | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 8cb8ea5c..8545e2f1 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -2,13 +2,13 @@ Hello! Thank you for choosing to help contribute to one of the SendGrid open sou - [CLAs and CCLAs](#cla) - [Roadmap & Milestones](#roadmap) -- [Feature Request](#feature_request) -- [Submit a Bug Report](#submit_a_bug_report) -- [Improvements to the Codebase](#improvements_to_the_codebase) -- [Understanding the Code Base](#understanding_the_codebase) +- [Feature Request](#feature-request) +- [Submit a Bug Report](#submit-a-bug-report) +- [Improvements to the Codebase](#improvements-to-the-codebase) +- [Understanding the Code Base](#understanding-the-codebase) - [Testing](#testing) -- [Style Guidelines & Naming Conventions](#style_guidelines_and_naming_conventions) -- [Creating a Pull Request](#creating_a_pull_request) +- [Style Guidelines & Naming Conventions](#style-guidelines-and-naming-conventions) +- [Creating a Pull Request](#creating-a-pull-request) We use [Milestones](https://github.com/sendgrid/sendgrid-java/milestones) to help define current roadmaps, please feel free to grab an issue from the current milestone. Please indicate that you have begun work on it to avoid collisions. Once a PR is made, community review, comments, suggestions and additional PRs are welcomed and encouraged. @@ -26,7 +26,7 @@ When you create a Pull Request, after a few seconds, a comment will appear with There are a few ways to contribute, which we'll enumerate below: - + ## Feature Request If you'd like to make a feature request, please read this section. @@ -36,7 +36,7 @@ The GitHub issue tracker is the preferred channel for library feature requests, - Please **search for existing issues** in order to ensure we don't have duplicate bugs/feature requests. - Please be respectful and considerate of others when commenting on issues - + ## Submit a Bug Report Note: DO NOT include your credentials in ANY code examples, descriptions, or media you make public. @@ -53,7 +53,7 @@ Before you decide to create a new issue, please try the following: In order to make the process easier, we've included a [sample bug report template](https://github.com/sendgrid/sendgrid-java/blob/master/.github/ISSUE_TEMPLATE) (borrowed from [Ghost](https://github.com/TryGhost/Ghost/)). The template uses [GitHub flavored markdown](https://help.github.com/articles/github-flavored-markdown/) for formatting. - + ## Improvements to the Codebase We welcome direct contributions to the sendgrid-java code base. Thank you! @@ -105,7 +105,7 @@ Add the example you want to test to Example.java, including the headers at the t javac -classpath ../repo/com/sendgrid/4.1.1/sendgrid-4.1.0-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.1.0/sendgrid-4.1.1-jar.jar:. Example ``` - + ## Understanding the Code Base **/examples** @@ -149,7 +149,7 @@ For the purposes of contributing to this repo, please update the [`SendGridTest. ./gradlew test -i ``` - + ## Style Guidelines & Naming Conventions Generally, we follow the style guidelines as suggested by the official language. However, we ask that you conform to the styles that already exist in the library. If you wish to deviate, please explain your reasoning. @@ -158,7 +158,7 @@ Please run your code through: - [FindBugs](http://findbugs.sourceforge.net/) - [CheckStyle](http://checkstyle.sourceforge.net/) with [Google's Java Style Guide](http://checkstyle.sourceforge.net/reports/google-java-style.html). -## Creating a Pull Request +## Creating a Pull Request 1. [Fork](https://help.github.com/fork-a-repo/) the project, clone your fork, and configure the remotes: From bbf0d51a4b8cbf4c5565ca49fa8fa43bb6ee121d Mon Sep 17 00:00:00 2001 From: Shashank Sharma Date: Sat, 21 Oct 2017 21:14:17 -0400 Subject: [PATCH 056/345] Making README/Doc sections more SEO friendly --- USAGE.md | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/USAGE.md b/USAGE.md index b29616d7..c014d11d 100644 --- a/USAGE.md +++ b/USAGE.md @@ -22,9 +22,9 @@ public class Example { # Table of Contents -* [ACCESS SETTINGS](#access_settings) +* [ACCESS SETTINGS](#access-settings) * [ALERTS](#alerts) -* [API KEYS](#api_keys) +* [API KEYS](#api-keys) * [ASM](#asm) * [BROWSERS](#browsers) * [CAMPAIGNS](#campaigns) @@ -35,21 +35,21 @@ public class Example { * [GEO](#geo) * [IPS](#ips) * [MAIL](#mail) -* [MAIL SETTINGS](#mail_settings) -* [MAILBOX PROVIDERS](#mailbox_providers) -* [PARTNER SETTINGS](#partner_settings) +* [MAIL SETTINGS](#mail-settings) +* [MAILBOX PROVIDERS](#mailbox-providers) +* [PARTNER SETTINGS](#partner-settings) * [SCOPES](#scopes) * [SENDERS](#senders) * [STATS](#stats) * [SUBUSERS](#subusers) * [SUPPRESSION](#suppression) * [TEMPLATES](#templates) -* [TRACKING SETTINGS](#tracking_settings) +* [TRACKING SETTINGS](#tracking-settings) * [USER](#user) * [WHITELABEL](#whitelabel) - + # ACCESS SETTINGS ## Retrieve all recent access attempts @@ -353,7 +353,7 @@ For more information about alerts, please see our [User Guide](https://sendgrid. throw ex; } ``` - + # API KEYS ## Create API keys @@ -2710,7 +2710,7 @@ This endpoint has a helper, check it out [here](https://github.com/sendgrid/send throw ex; } ``` - + # MAIL SETTINGS ## Retrieve all mail settings @@ -3201,7 +3201,7 @@ Mail settings allow you to tell SendGrid specific things to do to every email th throw ex; } ``` - + # MAILBOX PROVIDERS ## Retrieve email statistics by mailbox provider. @@ -3235,7 +3235,7 @@ Advanced Stats provide a more in-depth view of your email statistics and the act throw ex; } ``` - + # PARTNER SETTINGS ## Returns a list of all partner settings. @@ -4675,7 +4675,7 @@ For more information about transactional templates, please see our [User Guide]( throw ex; } ``` - + # TRACKING SETTINGS ## Retrieve Tracking Settings From 8000a368731d596c76025023b9d1d6b9cd560d12 Mon Sep 17 00:00:00 2001 From: Shashank Sharma Date: Sat, 21 Oct 2017 21:15:24 -0400 Subject: [PATCH 057/345] Making README/Doc sections more SEO friendly --- USE_CASES.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/USE_CASES.md b/USE_CASES.md index 1bfb62f0..de1613f3 100644 --- a/USE_CASES.md +++ b/USE_CASES.md @@ -2,9 +2,9 @@ This documentation provides examples for specific use cases. Please [open an iss # Table of Contents -* [Transactional Templates](#transactional_templates) +* [Transactional Templates](#transactional-templates) - + # Transactional Templates For this example, we assume you have created a [transactional template](https://sendgrid.com/docs/User_Guide/Transactional_Templates/index.html). Following is the template content we used for testing. @@ -98,4 +98,4 @@ public class Example { } } } -``` \ No newline at end of file +``` From ff37ee084ad4d907a5d63eec4a7720515cd899b0 Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Sat, 21 Oct 2017 18:32:07 -0700 Subject: [PATCH 058/345] Update .travis.yml --- .travis.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 9986d9a1..4fc4dbee 100644 --- a/.travis.yml +++ b/.travis.yml @@ -11,8 +11,6 @@ matrix: - os: linux jdk: oraclejdk8 before_script: -- echo TRAVIS $TRAVIS -- echo MOCK_HOST $MOCK_HOST - "./scripts/startPrism.sh &" - sleep 10 before_install: From 5671dcaf42155265e85b5d8e39a666752f58b2ff Mon Sep 17 00:00:00 2001 From: pushkyn Date: Sun, 22 Oct 2017 14:19:40 +0300 Subject: [PATCH 059/345] update readme - logo on separate line --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 82f67c59..2f8aed20 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,5 @@ ![SendGrid Logo](https://uiux.s3.amazonaws.com/2016-logos/email-logo%402x.png) + [![Travis Badge](https://travis-ci.org/sendgrid/sendgrid-java.svg?branch=master)](https://travis-ci.org/sendgrid/sendgrid-java) [![Maven Central](https://img.shields.io/maven-central/v/com.sendgrid/sendgrid-java.svg)](http://mvnrepository.com/artifact/com.sendgrid/sendgrid-java) [![Email Notifications Badge](https://dx.sendgrid.com/badge/java)](https://dx.sendgrid.com/newsletter/java) From f9b1b920b590e992bb2df201943ade47c65bf5df Mon Sep 17 00:00:00 2001 From: sccalabr Date: Sun, 22 Oct 2017 13:17:33 -0500 Subject: [PATCH 060/345] Addressing comments. --- src/main/java/com/sendgrid/SendGridAPI.java | 24 ++++++++++----------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/sendgrid/SendGridAPI.java b/src/main/java/com/sendgrid/SendGridAPI.java index d190675c..4f277cd7 100644 --- a/src/main/java/com/sendgrid/SendGridAPI.java +++ b/src/main/java/com/sendgrid/SendGridAPI.java @@ -13,17 +13,17 @@ public interface SendGridAPI { public void initializeSendGrid(String apiKey); /** - * Initializes SendGrid + * Returns the library version * * @param apiKey is your SendGrid API Key: https://app.sendgrid.com/settings/api_keys - * @return + * @return the library version. */ public String getLibraryVersion(); /** * Gets the version. * - * @return + * @return returns the version. */ public String getVersion(); @@ -36,16 +36,16 @@ public interface SendGridAPI { /** * Gets the request headers. - * @return + * @return returns a map of request headers. */ public Map getRequestHeaders(); /** * Adds a request headers. * - * @param keythe key - * @param valuethe value - * @return + * @param key the key + * @param value the value + * @return returns a map of request headers. */ public Map addRequestHeader(String key, String value); @@ -53,14 +53,14 @@ public interface SendGridAPI { * Removes a request headers. * * @param key the key - * @return + * @return returns a map of request headers. */ public Map removeRequestHeader(String key); /** * Gets the host. * - * @return + * @return returns the host. */ public String getHost(); @@ -76,8 +76,8 @@ public interface SendGridAPI { * testing. * * @param request - * @return - * @throws IOException + * @return returns a response. + * @throws IOException in case of network or marshal error. */ public Response makeCall(Request request) throws IOException; @@ -86,7 +86,7 @@ public interface SendGridAPI { * * @param request * @return - * @throws IOException + * @throws IOException in case of network or marshal error. */ public Response api(Request request) throws IOException; } From 65ce199f4da67991eccfd948caf36d6e8d0b27f3 Mon Sep 17 00:00:00 2001 From: shra1cumar Date: Mon, 23 Oct 2017 14:54:54 +0530 Subject: [PATCH 061/345] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 2f8aed20..c20e01fb 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ Version 3.X.X of this library provides full support for all SendGrid [Web API v3 This library represents the beginning of a new path for SendGrid. We want this library to be community driven and SendGrid led. We need your help to realize this goal. To help make sure we are building the right things in the right order, we ask that you create [issues](https://github.com/sendgrid/sendgrid-java/issues) and [pull requests](https://github.com/sendgrid/sendgrid-java/blob/master/CONTRIBUTING.md) or simply upvote or comment on existing issues or pull requests. -Please browse the rest of this README for further detail. +Please browse the rest of this README for further details. We appreciate your continued support, thank you! From ac1a990c7869e3fdb2a2a1a30ddff6b7a4623465 Mon Sep 17 00:00:00 2001 From: btrajkovski Date: Mon, 23 Oct 2017 18:32:47 +0200 Subject: [PATCH 062/345] Fix java package names Java packages were not corresponding to the actual location of classes, all packages were update to match class location. --- .../java/com/sendgrid/helpers/mail/Mail.java | 9 +---- .../sendgrid/helpers/mail/objects/ASM.java | 2 +- .../helpers/mail/objects/Attachments.java | 2 +- .../helpers/mail/objects/BccSettings.java | 2 +- .../mail/objects/ClickTrackingSetting.java | 2 +- .../helpers/mail/objects/Content.java | 2 +- .../sendgrid/helpers/mail/objects/Email.java | 2 +- .../helpers/mail/objects/FooterSetting.java | 2 +- .../mail/objects/GoogleAnalyticsSetting.java | 2 +- .../helpers/mail/objects/MailSettings.java | 38 +++++++++---------- .../mail/objects/OpenTrackingSetting.java | 2 +- .../helpers/mail/objects/Personalization.java | 2 +- .../helpers/mail/objects/Setting.java | 2 +- .../mail/objects/SpamCheckSetting.java | 2 +- .../objects/SubscriptionTrackingSetting.java | 2 +- .../mail/objects/TrackingSettings.java | 2 +- .../helpers/AttachmentBuilderTest.java | 2 +- .../java/com/sendgrid/helpers/MailTest.java | 5 ++- 18 files changed, 39 insertions(+), 43 deletions(-) diff --git a/src/main/java/com/sendgrid/helpers/mail/Mail.java b/src/main/java/com/sendgrid/helpers/mail/Mail.java index edf02a15..937b1e62 100644 --- a/src/main/java/com/sendgrid/helpers/mail/Mail.java +++ b/src/main/java/com/sendgrid/helpers/mail/Mail.java @@ -1,16 +1,11 @@ -package com.sendgrid; +package com.sendgrid.helpers.mail; -import com.fasterxml.jackson.annotation.JsonCreator; -import com.fasterxml.jackson.annotation.JsonIgnore; -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonInclude.Include; - import com.fasterxml.jackson.annotation.JsonProperty; -import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.ObjectWriter; import com.fasterxml.jackson.databind.SerializationFeature; +import com.sendgrid.helpers.mail.objects.*; import java.io.IOException; import java.util.ArrayList; diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/ASM.java b/src/main/java/com/sendgrid/helpers/mail/objects/ASM.java index 00763af7..c92a6243 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/ASM.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/ASM.java @@ -1,4 +1,4 @@ -package com.sendgrid; +package com.sendgrid.helpers.mail.objects; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonInclude.Include; diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/Attachments.java b/src/main/java/com/sendgrid/helpers/mail/objects/Attachments.java index 059fc835..cb075ed5 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/Attachments.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/Attachments.java @@ -1,4 +1,4 @@ -package com.sendgrid; +package com.sendgrid.helpers.mail.objects; import com.fasterxml.jackson.annotation.JsonIgnoreType; import com.fasterxml.jackson.annotation.JsonInclude; diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/BccSettings.java b/src/main/java/com/sendgrid/helpers/mail/objects/BccSettings.java index 37be0866..e1c2fa1b 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/BccSettings.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/BccSettings.java @@ -1,4 +1,4 @@ -package com.sendgrid; +package com.sendgrid.helpers.mail.objects; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonInclude.Include; diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/ClickTrackingSetting.java b/src/main/java/com/sendgrid/helpers/mail/objects/ClickTrackingSetting.java index e901e086..7e40b57d 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/ClickTrackingSetting.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/ClickTrackingSetting.java @@ -1,4 +1,4 @@ -package com.sendgrid; +package com.sendgrid.helpers.mail.objects; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonInclude.Include; diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/Content.java b/src/main/java/com/sendgrid/helpers/mail/objects/Content.java index f6621ac9..81994296 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/Content.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/Content.java @@ -1,4 +1,4 @@ -package com.sendgrid; +package com.sendgrid.helpers.mail.objects; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonInclude.Include; diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/Email.java b/src/main/java/com/sendgrid/helpers/mail/objects/Email.java index 5642e345..a1b22212 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/Email.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/Email.java @@ -1,4 +1,4 @@ -package com.sendgrid; +package com.sendgrid.helpers.mail.objects; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonInclude.Include; diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/FooterSetting.java b/src/main/java/com/sendgrid/helpers/mail/objects/FooterSetting.java index 1428b66b..ee033101 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/FooterSetting.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/FooterSetting.java @@ -1,4 +1,4 @@ -package com.sendgrid; +package com.sendgrid.helpers.mail.objects; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonInclude.Include; diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/GoogleAnalyticsSetting.java b/src/main/java/com/sendgrid/helpers/mail/objects/GoogleAnalyticsSetting.java index eac91899..0c6cf0f3 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/GoogleAnalyticsSetting.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/GoogleAnalyticsSetting.java @@ -1,4 +1,4 @@ -package com.sendgrid; +package com.sendgrid.helpers.mail.objects; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonInclude.Include; diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/MailSettings.java b/src/main/java/com/sendgrid/helpers/mail/objects/MailSettings.java index 1210eb08..76b21502 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/MailSettings.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/MailSettings.java @@ -1,12 +1,12 @@ -package com.sendgrid; +package com.sendgrid.helpers.mail.objects; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonInclude.Include; import com.fasterxml.jackson.annotation.JsonProperty; /** - * An object representing a collection of different mail - * settings that you can use to specify how you would + * An object representing a collection of different mail + * settings that you can use to specify how you would * like this email to be handled. */ @JsonInclude(Include.NON_DEFAULT) @@ -25,7 +25,7 @@ public class MailSettings { public BccSettings getBccSettings() { return bccSettings; } - + /** * Set the BCC settings. * @param bccSettings the BCC settings. @@ -33,12 +33,12 @@ public BccSettings getBccSettings() { public void setBccSettings(BccSettings bccSettings) { this.bccSettings = bccSettings; } - + /** - * A setting that allows you to bypass all unsubscribe - * groups and suppressions to ensure that the email is - * delivered to every single recipient. This should only - * be used in emergencies when it is absolutely necessary + * A setting that allows you to bypass all unsubscribe + * groups and suppressions to ensure that the email is + * delivered to every single recipient. This should only + * be used in emergencies when it is absolutely necessary * that every recipient receives your email. * @return the bypass list setting. */ @@ -54,7 +54,7 @@ public Setting getBypassListManagement() { public void setBypassListManagement(Setting bypassListManagement) { this.bypassListManagement = bypassListManagement; } - + /** * Get the the footer settings that you would like included on every email. * @return the setting. @@ -63,7 +63,7 @@ public void setBypassListManagement(Setting bypassListManagement) { public FooterSetting getFooterSetting() { return footerSetting; } - + /** * Set the the footer settings that you would like included on every email. * @param footerSetting the setting. @@ -71,9 +71,9 @@ public FooterSetting getFooterSetting() { public void setFooterSetting(FooterSetting footerSetting) { this.footerSetting = footerSetting; } - + /** - * Get sandbox mode. This allows you to send a test email to + * Get sandbox mode. This allows you to send a test email to * ensure that your request body is valid and formatted correctly. * @return the sandbox mode setting. */ @@ -81,18 +81,18 @@ public void setFooterSetting(FooterSetting footerSetting) { public Setting getSandBoxMode() { return sandBoxMode; } - + /** - * Set sandbox mode. + * Set sandbox mode. * @param sandBoxMode the sandbox mode setting. */ @JsonProperty("sandbox_mode") public void setSandboxMode(Setting sandBoxMode) { this.sandBoxMode = sandBoxMode; } - + /** - * Get the spam check setting. This allows you to test the + * Get the spam check setting. This allows you to test the * content of your email for spam. * @return the spam check setting. */ @@ -100,9 +100,9 @@ public void setSandboxMode(Setting sandBoxMode) { public SpamCheckSetting getSpamCheck() { return spamCheckSetting; } - + /** - * Set the spam check setting. This allows you to test the + * Set the spam check setting. This allows you to test the * content of your email for spam. * @param spamCheckSetting the spam check setting. */ diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/OpenTrackingSetting.java b/src/main/java/com/sendgrid/helpers/mail/objects/OpenTrackingSetting.java index deba6d33..a0dab662 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/OpenTrackingSetting.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/OpenTrackingSetting.java @@ -1,4 +1,4 @@ -package com.sendgrid; +package com.sendgrid.helpers.mail.objects; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonInclude.Include; diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/Personalization.java b/src/main/java/com/sendgrid/helpers/mail/objects/Personalization.java index 83bd9c56..67226059 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/Personalization.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/Personalization.java @@ -1,4 +1,4 @@ -package com.sendgrid; +package com.sendgrid.helpers.mail.objects; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonInclude.Include; diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/Setting.java b/src/main/java/com/sendgrid/helpers/mail/objects/Setting.java index 20b8d64e..c6157711 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/Setting.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/Setting.java @@ -1,4 +1,4 @@ -package com.sendgrid; +package com.sendgrid.helpers.mail.objects; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonInclude.Include; diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/SpamCheckSetting.java b/src/main/java/com/sendgrid/helpers/mail/objects/SpamCheckSetting.java index dbd43955..95f425b9 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/SpamCheckSetting.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/SpamCheckSetting.java @@ -1,4 +1,4 @@ -package com.sendgrid; +package com.sendgrid.helpers.mail.objects; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonInclude.Include; diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/SubscriptionTrackingSetting.java b/src/main/java/com/sendgrid/helpers/mail/objects/SubscriptionTrackingSetting.java index 304eb916..1280d440 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/SubscriptionTrackingSetting.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/SubscriptionTrackingSetting.java @@ -1,4 +1,4 @@ -package com.sendgrid; +package com.sendgrid.helpers.mail.objects; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonInclude.Include; diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/TrackingSettings.java b/src/main/java/com/sendgrid/helpers/mail/objects/TrackingSettings.java index 0e2a47bb..72be0747 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/TrackingSettings.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/TrackingSettings.java @@ -1,4 +1,4 @@ -package com.sendgrid; +package com.sendgrid.helpers.mail.objects; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonInclude.Include; diff --git a/src/test/java/com/sendgrid/helpers/AttachmentBuilderTest.java b/src/test/java/com/sendgrid/helpers/AttachmentBuilderTest.java index 824e8145..3ea3f379 100644 --- a/src/test/java/com/sendgrid/helpers/AttachmentBuilderTest.java +++ b/src/test/java/com/sendgrid/helpers/AttachmentBuilderTest.java @@ -1,6 +1,6 @@ package com.sendgrid.helpers; -import com.sendgrid.Attachments; +import com.sendgrid.helpers.mail.objects.Attachments; import org.apache.commons.codec.binary.Base64; import org.junit.Assert; import org.junit.Test; diff --git a/src/test/java/com/sendgrid/helpers/MailTest.java b/src/test/java/com/sendgrid/helpers/MailTest.java index e4eedd58..9476a1d5 100644 --- a/src/test/java/com/sendgrid/helpers/MailTest.java +++ b/src/test/java/com/sendgrid/helpers/MailTest.java @@ -1,7 +1,8 @@ -package com.sendgrid; +package com.sendgrid.helpers; +import com.sendgrid.helpers.mail.Mail; +import com.sendgrid.helpers.mail.objects.*; import org.junit.Assert; -import org.junit.Before; import org.junit.Test; import java.io.IOException; From a0a51afa4bb675fa706935843860a8e71ca8a901 Mon Sep 17 00:00:00 2001 From: Ajitesh Rai Date: Mon, 23 Oct 2017 23:36:08 +0530 Subject: [PATCH 063/345] Fix a typo Removed duplicate 'the'. --- USAGE.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/USAGE.md b/USAGE.md index 7d32bc39..a254fd98 100644 --- a/USAGE.md +++ b/USAGE.md @@ -5672,7 +5672,7 @@ For more information on whitelabeling, please see our [User Guide](https://sendg A domain whitelabel allows you to remove the via or sent on behalf of message that your recipients see when they read your emails. Whitelabeling a domain allows you to replace sendgrid.net with your personal sending domain. You will be required to create a subdomain so that SendGrid can generate the DNS records which you must give to your host provider. If you choose to use Automated Security, SendGrid will provide you with 3 CNAME records. If you turn Automated Security off, you will be given 2 TXT records and 1 MX record. -Domain whitelabels can be associated with (i.e. assigned to) subusers from a parent account. This functionality allows subusers to send mail using their parent's whitelabels. To associate a whitelabel with a subuser, the parent account must first create the whitelabel and validate it. The the parent may then associate the whitelabel via the subuser management tools. +Domain whitelabels can be associated with (i.e. assigned to) subusers from a parent account. This functionality allows subusers to send mail using their parent's whitelabels. To associate a whitelabel with a subuser, the parent account must first create the whitelabel and validate it. The parent may then associate the whitelabel via the subuser management tools. For more information on whitelabeling, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Settings/Whitelabel/index.html) @@ -5704,7 +5704,7 @@ For more information on whitelabeling, please see our [User Guide](https://sendg A domain whitelabel allows you to remove the via or sent on behalf of message that your recipients see when they read your emails. Whitelabeling a domain allows you to replace sendgrid.net with your personal sending domain. You will be required to create a subdomain so that SendGrid can generate the DNS records which you must give to your host provider. If you choose to use Automated Security, SendGrid will provide you with 3 CNAME records. If you turn Automated Security off, you will be given 2 TXT records and 1 MX record. -Domain whitelabels can be associated with (i.e. assigned to) subusers from a parent account. This functionality allows subusers to send mail using their parent's whitelabels. To associate a whitelabel with a subuser, the parent account must first create the whitelabel and validate it. The the parent may then associate the whitelabel via the subuser management tools. +Domain whitelabels can be associated with (i.e. assigned to) subusers from a parent account. This functionality allows subusers to send mail using their parent's whitelabels. To associate a whitelabel with a subuser, the parent account must first create the whitelabel and validate it. The parent may then associate the whitelabel via the subuser management tools. For more information on whitelabeling, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Settings/Whitelabel/index.html) @@ -5813,7 +5813,7 @@ For more information on whitelabeling, please see our [User Guide](https://sendg A domain whitelabel allows you to remove the via or sent on behalf of message that your recipients see when they read your emails. Whitelabeling a domain allows you to replace sendgrid.net with your personal sending domain. You will be required to create a subdomain so that SendGrid can generate the DNS records which you must give to your host provider. If you choose to use Automated Security, SendGrid will provide you with 3 CNAME records. If you turn Automated Security off, you will be given 2 TXT records and 1 MX record. -Domain whitelabels can be associated with (i.e. assigned to) subusers from a parent account. This functionality allows subusers to send mail using their parent's whitelabels. To associate a whitelabel with a subuser, the parent account must first create the whitelabel and validate it. The the parent may then associate the whitelabel via the subuser management tools. +Domain whitelabels can be associated with (i.e. assigned to) subusers from a parent account. This functionality allows subusers to send mail using their parent's whitelabels. To associate a whitelabel with a subuser, the parent account must first create the whitelabel and validate it. The parent may then associate the whitelabel via the subuser management tools. For more information on whitelabeling, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Settings/Whitelabel/index.html) From bd28104bf69f639d6e0329d99f72407a8e72827b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A1t=C3=A9=20Sz=C3=A9les?= Date: Mon, 23 Oct 2017 20:14:11 +0200 Subject: [PATCH 064/345] Remove redundant word 'the' from USAGE.md. Change the sentence 'The the parent may then associate the whitelabel via the subuser management tools.' to 'The parent may then associate the whitelabel via the subuser management tools.'. --- USAGE.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/USAGE.md b/USAGE.md index 7d32bc39..a254fd98 100644 --- a/USAGE.md +++ b/USAGE.md @@ -5672,7 +5672,7 @@ For more information on whitelabeling, please see our [User Guide](https://sendg A domain whitelabel allows you to remove the via or sent on behalf of message that your recipients see when they read your emails. Whitelabeling a domain allows you to replace sendgrid.net with your personal sending domain. You will be required to create a subdomain so that SendGrid can generate the DNS records which you must give to your host provider. If you choose to use Automated Security, SendGrid will provide you with 3 CNAME records. If you turn Automated Security off, you will be given 2 TXT records and 1 MX record. -Domain whitelabels can be associated with (i.e. assigned to) subusers from a parent account. This functionality allows subusers to send mail using their parent's whitelabels. To associate a whitelabel with a subuser, the parent account must first create the whitelabel and validate it. The the parent may then associate the whitelabel via the subuser management tools. +Domain whitelabels can be associated with (i.e. assigned to) subusers from a parent account. This functionality allows subusers to send mail using their parent's whitelabels. To associate a whitelabel with a subuser, the parent account must first create the whitelabel and validate it. The parent may then associate the whitelabel via the subuser management tools. For more information on whitelabeling, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Settings/Whitelabel/index.html) @@ -5704,7 +5704,7 @@ For more information on whitelabeling, please see our [User Guide](https://sendg A domain whitelabel allows you to remove the via or sent on behalf of message that your recipients see when they read your emails. Whitelabeling a domain allows you to replace sendgrid.net with your personal sending domain. You will be required to create a subdomain so that SendGrid can generate the DNS records which you must give to your host provider. If you choose to use Automated Security, SendGrid will provide you with 3 CNAME records. If you turn Automated Security off, you will be given 2 TXT records and 1 MX record. -Domain whitelabels can be associated with (i.e. assigned to) subusers from a parent account. This functionality allows subusers to send mail using their parent's whitelabels. To associate a whitelabel with a subuser, the parent account must first create the whitelabel and validate it. The the parent may then associate the whitelabel via the subuser management tools. +Domain whitelabels can be associated with (i.e. assigned to) subusers from a parent account. This functionality allows subusers to send mail using their parent's whitelabels. To associate a whitelabel with a subuser, the parent account must first create the whitelabel and validate it. The parent may then associate the whitelabel via the subuser management tools. For more information on whitelabeling, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Settings/Whitelabel/index.html) @@ -5813,7 +5813,7 @@ For more information on whitelabeling, please see our [User Guide](https://sendg A domain whitelabel allows you to remove the via or sent on behalf of message that your recipients see when they read your emails. Whitelabeling a domain allows you to replace sendgrid.net with your personal sending domain. You will be required to create a subdomain so that SendGrid can generate the DNS records which you must give to your host provider. If you choose to use Automated Security, SendGrid will provide you with 3 CNAME records. If you turn Automated Security off, you will be given 2 TXT records and 1 MX record. -Domain whitelabels can be associated with (i.e. assigned to) subusers from a parent account. This functionality allows subusers to send mail using their parent's whitelabels. To associate a whitelabel with a subuser, the parent account must first create the whitelabel and validate it. The the parent may then associate the whitelabel via the subuser management tools. +Domain whitelabels can be associated with (i.e. assigned to) subusers from a parent account. This functionality allows subusers to send mail using their parent's whitelabels. To associate a whitelabel with a subuser, the parent account must first create the whitelabel and validate it. The parent may then associate the whitelabel via the subuser management tools. For more information on whitelabeling, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Settings/Whitelabel/index.html) From 22aee8718c90caa87fbc55eb62471574f4227378 Mon Sep 17 00:00:00 2001 From: Pooja Bharadwaj Date: Tue, 24 Oct 2017 17:40:20 +0530 Subject: [PATCH 065/345] correction of typo in USAGE.md replaced "visible by recipient" by "visible to recipient" --- USAGE.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/USAGE.md b/USAGE.md index a254fd98..cf25b2c6 100644 --- a/USAGE.md +++ b/USAGE.md @@ -533,7 +533,7 @@ The API Keys feature allows customers to be able to generate an API Key credenti Suppression groups, or unsubscribe groups, are specific types or categories of email that you would like your recipients to be able to unsubscribe from. For example: Daily Newsletters, Invoices, System Alerts. -The **name** and **description** of the unsubscribe group will be visible by recipients when they are managing their subscriptions. +The **name** and **description** of the unsubscribe group will be visible to recipients when they are managing their subscriptions. Each user can create up to 25 different suppression groups. @@ -589,7 +589,7 @@ Suppression groups, or [unsubscribe groups](https://sendgrid.com/docs/API_Refere Suppression groups, or unsubscribe groups, are specific types or categories of email that you would like your recipients to be able to unsubscribe from. For example: Daily Newsletters, Invoices, System Alerts. -The **name** and **description** of the unsubscribe group will be visible by recipients when they are managing their subscriptions. +The **name** and **description** of the unsubscribe group will be visible to recipients when they are managing their subscriptions. Each user can create up to 25 different suppression groups. @@ -617,7 +617,7 @@ Each user can create up to 25 different suppression groups. Suppression groups, or unsubscribe groups, are specific types or categories of email that you would like your recipients to be able to unsubscribe from. For example: Daily Newsletters, Invoices, System Alerts. -The **name** and **description** of the unsubscribe group will be visible by recipients when they are managing their subscriptions. +The **name** and **description** of the unsubscribe group will be visible to recipients when they are managing their subscriptions. Each user can create up to 25 different suppression groups. @@ -646,7 +646,7 @@ You can only delete groups that have not been attached to sent mail in the last Suppression groups, or unsubscribe groups, are specific types or categories of email that you would like your recipients to be able to unsubscribe from. For example: Daily Newsletters, Invoices, System Alerts. -The **name** and **description** of the unsubscribe group will be visible by recipients when they are managing their subscriptions. +The **name** and **description** of the unsubscribe group will be visible to recipients when they are managing their subscriptions. Each user can create up to 25 different suppression groups. From e6b838a9c0d1a0f55cb8cb6b27af94d81e83c1a4 Mon Sep 17 00:00:00 2001 From: Nishith Shah Date: Fri, 27 Oct 2017 01:56:19 +0530 Subject: [PATCH 066/345] Create PULL_REQUEST_TEMPLATE Add a template for describing the change(s) being done. --- .github/PULL_REQUEST_TEMPLATE | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 .github/PULL_REQUEST_TEMPLATE diff --git a/.github/PULL_REQUEST_TEMPLATE b/.github/PULL_REQUEST_TEMPLATE new file mode 100644 index 00000000..e4059635 --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE @@ -0,0 +1,19 @@ + +Closes: #[Issue number] + +**Description of the change**: + +If you have questions, please send an email [Sendgrid](mailto:dx@sendgrid.com), or file a Github Issue in this repository. + From b9ddb85b2e2c5f4856d2bc8eed9215af7715f66d Mon Sep 17 00:00:00 2001 From: Thiago Barbato Date: Thu, 26 Oct 2017 23:12:06 -0200 Subject: [PATCH 067/345] Add .env_sample file --- .env_sample | 1 + .gitignore | 3 ++- README.md | 8 +++++--- 3 files changed, 8 insertions(+), 4 deletions(-) create mode 100644 .env_sample diff --git a/.env_sample b/.env_sample new file mode 100644 index 00000000..937e999d --- /dev/null +++ b/.env_sample @@ -0,0 +1 @@ +export SENDGRID_API_KEY='' diff --git a/.gitignore b/.gitignore index 009d149a..2c5dd118 100644 --- a/.gitignore +++ b/.gitignore @@ -12,4 +12,5 @@ target examples/Example.java .settings .classpath -.project \ No newline at end of file +.project +.env diff --git a/README.md b/README.md index 9155acd6..009eeb0b 100644 --- a/README.md +++ b/README.md @@ -44,11 +44,13 @@ We appreciate your continued support, thank you! Update the development environment with your [SENDGRID_API_KEY](https://app.sendgrid.com/settings/api_keys), for example: +1. Copy the sample environment file to a new file ```bash -echo "export SENDGRID_API_KEY='YOUR_API_KEY'" > sendgrid.env -echo "sendgrid.env" >> .gitignore -source ./sendgrid.env +cp .env_sample .env ``` +2. Edit the new `.env` to add your API key +3. Source the `.env` file to set rhe variable in the current session + ## Install Package Choose your installation method - Maven w/ Gradle (recommended), Maven or Jar file. From 2f198a23eb62af443f4dbe3fa471e5573c02cdca Mon Sep 17 00:00:00 2001 From: teisena Date: Sat, 28 Oct 2017 02:14:57 +0300 Subject: [PATCH 068/345] split examples by endpoint --- examples/contactdb/contactdb.java | 717 ------------------------- examples/contactdb/customfields.java | 97 ++++ examples/contactdb/lists.java | 240 +++++++++ examples/contactdb/recipients.java | 305 +++++++++++ examples/contactdb/reservedfields.java | 30 ++ examples/contactdb/segments.java | 147 +++++ 6 files changed, 819 insertions(+), 717 deletions(-) delete mode 100644 examples/contactdb/contactdb.java create mode 100644 examples/contactdb/customfields.java create mode 100644 examples/contactdb/lists.java create mode 100644 examples/contactdb/recipients.java create mode 100644 examples/contactdb/reservedfields.java create mode 100644 examples/contactdb/segments.java diff --git a/examples/contactdb/contactdb.java b/examples/contactdb/contactdb.java deleted file mode 100644 index 1f971c8f..00000000 --- a/examples/contactdb/contactdb.java +++ /dev/null @@ -1,717 +0,0 @@ -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; - -import com.sendgrid.*; - -import java.io.IOException; -import java.util.HashMap; -import java.util.Map; - -////////////////////////////////////////////////////////////////// -// Create a Custom Field -// POST /contactdb/custom_fields - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.POST); - request.setEndpoint("contactdb/custom_fields"); - request.setBody("{\"type\":\"text\",\"name\":\"pet\"}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve all custom fields -// GET /contactdb/custom_fields - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("contactdb/custom_fields"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve a Custom Field -// GET /contactdb/custom_fields/{custom_field_id} - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("contactdb/custom_fields/{custom_field_id}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Delete a Custom Field -// DELETE /contactdb/custom_fields/{custom_field_id} - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.DELETE); - request.setEndpoint("contactdb/custom_fields/{custom_field_id}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Create a List -// POST /contactdb/lists - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.POST); - request.setEndpoint("contactdb/lists"); - request.setBody("{\"name\":\"your list name\"}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve all lists -// GET /contactdb/lists - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("contactdb/lists"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Delete Multiple lists -// DELETE /contactdb/lists - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.DELETE); - request.setEndpoint("contactdb/lists"); - request.setBody("[1,2,3,4]"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Update a List -// PATCH /contactdb/lists/{list_id} - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.PATCH); - request.setEndpoint("contactdb/lists/{list_id}"); - request.setBody("{\"name\":\"newlistname\"}"); - request.addQueryParam("list_id", "1"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve a single list -// GET /contactdb/lists/{list_id} - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("contactdb/lists/{list_id}"); - request.addQueryParam("list_id", "1"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Delete a List -// DELETE /contactdb/lists/{list_id} - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.DELETE); - request.setEndpoint("contactdb/lists/{list_id}"); - request.addQueryParam("delete_contacts", "true"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Add Multiple Recipients to a List -// POST /contactdb/lists/{list_id}/recipients - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.POST); - request.setEndpoint("contactdb/lists/{list_id}/recipients"); - request.setBody("[\"recipient_id1\",\"recipient_id2\"]"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve all recipients on a List -// GET /contactdb/lists/{list_id}/recipients - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("contactdb/lists/{list_id}/recipients"); - request.addQueryParam("page", "1"); - request.addQueryParam("page_size", "1"); - request.addQueryParam("list_id", "1"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Add a Single Recipient to a List -// POST /contactdb/lists/{list_id}/recipients/{recipient_id} - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.POST); - request.setEndpoint("contactdb/lists/{list_id}/recipients/{recipient_id}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Delete a Single Recipient from a Single List -// DELETE /contactdb/lists/{list_id}/recipients/{recipient_id} - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.DELETE); - request.setEndpoint("contactdb/lists/{list_id}/recipients/{recipient_id}"); - request.addQueryParam("recipient_id", "1"); - request.addQueryParam("list_id", "1"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Update Recipient -// PATCH /contactdb/recipients - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.PATCH); - request.setEndpoint("contactdb/recipients"); - request.setBody("[{\"first_name\":\"Guy\",\"last_name\":\"Jones\",\"email\":\"jones@example.com\"}]"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Add recipients -// POST /contactdb/recipients - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.POST); - request.setEndpoint("contactdb/recipients"); - request.setBody("[{\"age\":25,\"last_name\":\"User\",\"email\":\"example@example.com\",\"first_name\":\"\"},{\"age\":25,\"last_name\":\"User\",\"email\":\"example2@example.com\",\"first_name\":\"Example\"}]"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve recipients -// GET /contactdb/recipients - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("contactdb/recipients"); - request.addQueryParam("page", "1"); - request.addQueryParam("page_size", "1"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Delete Recipient -// DELETE /contactdb/recipients - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.DELETE); - request.setEndpoint("contactdb/recipients"); - request.setBody("[\"recipient_id1\",\"recipient_id2\"]"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve the count of billable recipients -// GET /contactdb/recipients/billable_count - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("contactdb/recipients/billable_count"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve a Count of Recipients -// GET /contactdb/recipients/count - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("contactdb/recipients/count"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve recipients matching search criteria -// GET /contactdb/recipients/search - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("contactdb/recipients/search"); - request.addQueryParam("{field_name}", "test_string"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve a single recipient -// GET /contactdb/recipients/{recipient_id} - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("contactdb/recipients/{recipient_id}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Delete a Recipient -// DELETE /contactdb/recipients/{recipient_id} - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.DELETE); - request.setEndpoint("contactdb/recipients/{recipient_id}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve the lists that a recipient is on -// GET /contactdb/recipients/{recipient_id}/lists - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("contactdb/recipients/{recipient_id}/lists"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve reserved fields -// GET /contactdb/reserved_fields - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("contactdb/reserved_fields"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Create a Segment -// POST /contactdb/segments - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.POST); - request.setEndpoint("contactdb/segments"); - request.setBody("{\"conditions\":[{\"operator\":\"eq\",\"field\":\"last_name\",\"and_or\":\"\",\"value\":\"Miller\"},{\"operator\":\"gt\",\"field\":\"last_clicked\",\"and_or\":\"and\",\"value\":\"01/02/2015\"},{\"operator\":\"eq\",\"field\":\"clicks.campaign_identifier\",\"and_or\":\"or\",\"value\":\"513\"}],\"name\":\"Last Name Miller\",\"list_id\":4}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve all segments -// GET /contactdb/segments - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("contactdb/segments"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Update a segment -// PATCH /contactdb/segments/{segment_id} - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.PATCH); - request.setEndpoint("contactdb/segments/{segment_id}"); - request.setBody("{\"conditions\":[{\"operator\":\"eq\",\"field\":\"last_name\",\"and_or\":\"\",\"value\":\"Miller\"}],\"name\":\"The Millers\",\"list_id\":5}"); - request.addQueryParam("segment_id", "test_string"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve a segment -// GET /contactdb/segments/{segment_id} - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("contactdb/segments/{segment_id}"); - request.addQueryParam("segment_id", "1"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Delete a segment -// DELETE /contactdb/segments/{segment_id} - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.DELETE); - request.setEndpoint("contactdb/segments/{segment_id}"); - request.addQueryParam("delete_contacts", "true"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve recipients on a segment -// GET /contactdb/segments/{segment_id}/recipients - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("contactdb/segments/{segment_id}/recipients"); - request.addQueryParam("page", "1"); - request.addQueryParam("page_size", "1"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - diff --git a/examples/contactdb/customfields.java b/examples/contactdb/customfields.java new file mode 100644 index 00000000..e4ce5c58 --- /dev/null +++ b/examples/contactdb/customfields.java @@ -0,0 +1,97 @@ +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.*; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +////////////////////////////////////////////////////////////////// +// Create a Custom Field +// POST /contactdb/custom_fields + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.POST); + request.setEndpoint("contactdb/custom_fields"); + request.setBody("{\"type\":\"text\",\"name\":\"pet\"}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// Retrieve all custom fields +// GET /contactdb/custom_fields + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("contactdb/custom_fields"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// Retrieve a Custom Field +// GET /contactdb/custom_fields/{custom_field_id} + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("contactdb/custom_fields/{custom_field_id}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// Delete a Custom Field +// DELETE /contactdb/custom_fields/{custom_field_id} + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.DELETE); + request.setEndpoint("contactdb/custom_fields/{custom_field_id}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} diff --git a/examples/contactdb/lists.java b/examples/contactdb/lists.java new file mode 100644 index 00000000..534a739c --- /dev/null +++ b/examples/contactdb/lists.java @@ -0,0 +1,240 @@ +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.*; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +////////////////////////////////////////////////////////////////// +// Create a List +// POST /contactdb/lists + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.POST); + request.setEndpoint("contactdb/lists"); + request.setBody("{\"name\":\"your list name\"}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// Retrieve all lists +// GET /contactdb/lists + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("contactdb/lists"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// Delete Multiple lists +// DELETE /contactdb/lists + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.DELETE); + request.setEndpoint("contactdb/lists"); + request.setBody("[1,2,3,4]"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// Update a List +// PATCH /contactdb/lists/{list_id} + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.PATCH); + request.setEndpoint("contactdb/lists/{list_id}"); + request.setBody("{\"name\":\"newlistname\"}"); + request.addQueryParam("list_id", "1"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// Retrieve a single list +// GET /contactdb/lists/{list_id} + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("contactdb/lists/{list_id}"); + request.addQueryParam("list_id", "1"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// Delete a List +// DELETE /contactdb/lists/{list_id} + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.DELETE); + request.setEndpoint("contactdb/lists/{list_id}"); + request.addQueryParam("delete_contacts", "true"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// Add Multiple Recipients to a List +// POST /contactdb/lists/{list_id}/recipients + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.POST); + request.setEndpoint("contactdb/lists/{list_id}/recipients"); + request.setBody("[\"recipient_id1\",\"recipient_id2\"]"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// Retrieve all recipients on a List +// GET /contactdb/lists/{list_id}/recipients + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("contactdb/lists/{list_id}/recipients"); + request.addQueryParam("page", "1"); + request.addQueryParam("page_size", "1"); + request.addQueryParam("list_id", "1"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// Add a Single Recipient to a List +// POST /contactdb/lists/{list_id}/recipients/{recipient_id} + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.POST); + request.setEndpoint("contactdb/lists/{list_id}/recipients/{recipient_id}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// Delete a Single Recipient from a Single List +// DELETE /contactdb/lists/{list_id}/recipients/{recipient_id} + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.DELETE); + request.setEndpoint("contactdb/lists/{list_id}/recipients/{recipient_id}"); + request.addQueryParam("recipient_id", "1"); + request.addQueryParam("list_id", "1"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} diff --git a/examples/contactdb/recipients.java b/examples/contactdb/recipients.java new file mode 100644 index 00000000..255a8e97 --- /dev/null +++ b/examples/contactdb/recipients.java @@ -0,0 +1,305 @@ +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.*; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +////////////////////////////////////////////////////////////////// +// Retrieve all recipients on a List +// GET /contactdb/lists/{list_id}/recipients + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("contactdb/lists/{list_id}/recipients"); + request.addQueryParam("page", "1"); + request.addQueryParam("page_size", "1"); + request.addQueryParam("list_id", "1"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// Add a Single Recipient to a List +// POST /contactdb/lists/{list_id}/recipients/{recipient_id} + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.POST); + request.setEndpoint("contactdb/lists/{list_id}/recipients/{recipient_id}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// Delete a Single Recipient from a Single List +// DELETE /contactdb/lists/{list_id}/recipients/{recipient_id} + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.DELETE); + request.setEndpoint("contactdb/lists/{list_id}/recipients/{recipient_id}"); + request.addQueryParam("recipient_id", "1"); + request.addQueryParam("list_id", "1"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// Update Recipient +// PATCH /contactdb/recipients + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.PATCH); + request.setEndpoint("contactdb/recipients"); + request.setBody("[{\"first_name\":\"Guy\",\"last_name\":\"Jones\",\"email\":\"jones@example.com\"}]"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// Add recipients +// POST /contactdb/recipients + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.POST); + request.setEndpoint("contactdb/recipients"); + request.setBody("[{\"age\":25,\"last_name\":\"User\",\"email\":\"example@example.com\",\"first_name\":\"\"},{\"age\":25,\"last_name\":\"User\",\"email\":\"example2@example.com\",\"first_name\":\"Example\"}]"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// Retrieve recipients +// GET /contactdb/recipients + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("contactdb/recipients"); + request.addQueryParam("page", "1"); + request.addQueryParam("page_size", "1"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// Delete Recipient +// DELETE /contactdb/recipients + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.DELETE); + request.setEndpoint("contactdb/recipients"); + request.setBody("[\"recipient_id1\",\"recipient_id2\"]"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// Retrieve the count of billable recipients +// GET /contactdb/recipients/billable_count + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("contactdb/recipients/billable_count"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// Retrieve a Count of Recipients +// GET /contactdb/recipients/count + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("contactdb/recipients/count"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// Retrieve recipients matching search criteria +// GET /contactdb/recipients/search + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("contactdb/recipients/search"); + request.addQueryParam("{field_name}", "test_string"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// Retrieve a single recipient +// GET /contactdb/recipients/{recipient_id} + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("contactdb/recipients/{recipient_id}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// Delete a Recipient +// DELETE /contactdb/recipients/{recipient_id} + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.DELETE); + request.setEndpoint("contactdb/recipients/{recipient_id}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// Retrieve the lists that a recipient is on +// GET /contactdb/recipients/{recipient_id}/lists + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("contactdb/recipients/{recipient_id}/lists"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} diff --git a/examples/contactdb/reservedfields.java b/examples/contactdb/reservedfields.java new file mode 100644 index 00000000..e9ceafa9 --- /dev/null +++ b/examples/contactdb/reservedfields.java @@ -0,0 +1,30 @@ +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.*; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +////////////////////////////////////////////////////////////////// +// Retrieve reserved fields +// GET /contactdb/reserved_fields + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("contactdb/reserved_fields"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} diff --git a/examples/contactdb/segments.java b/examples/contactdb/segments.java new file mode 100644 index 00000000..84c60027 --- /dev/null +++ b/examples/contactdb/segments.java @@ -0,0 +1,147 @@ +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.*; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +////////////////////////////////////////////////////////////////// +// Create a Segment +// POST /contactdb/segments + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.POST); + request.setEndpoint("contactdb/segments"); + request.setBody("{\"conditions\":[{\"operator\":\"eq\",\"field\":\"last_name\",\"and_or\":\"\",\"value\":\"Miller\"},{\"operator\":\"gt\",\"field\":\"last_clicked\",\"and_or\":\"and\",\"value\":\"01/02/2015\"},{\"operator\":\"eq\",\"field\":\"clicks.campaign_identifier\",\"and_or\":\"or\",\"value\":\"513\"}],\"name\":\"Last Name Miller\",\"list_id\":4}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// Retrieve all segments +// GET /contactdb/segments + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("contactdb/segments"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// Update a segment +// PATCH /contactdb/segments/{segment_id} + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.PATCH); + request.setEndpoint("contactdb/segments/{segment_id}"); + request.setBody("{\"conditions\":[{\"operator\":\"eq\",\"field\":\"last_name\",\"and_or\":\"\",\"value\":\"Miller\"}],\"name\":\"The Millers\",\"list_id\":5}"); + request.addQueryParam("segment_id", "test_string"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// Retrieve a segment +// GET /contactdb/segments/{segment_id} + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("contactdb/segments/{segment_id}"); + request.addQueryParam("segment_id", "1"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// Delete a segment +// DELETE /contactdb/segments/{segment_id} + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.DELETE); + request.setEndpoint("contactdb/segments/{segment_id}"); + request.addQueryParam("delete_contacts", "true"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// Retrieve recipients on a segment +// GET /contactdb/segments/{segment_id}/recipients + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("contactdb/segments/{segment_id}/recipients"); + request.addQueryParam("page", "1"); + request.addQueryParam("page_size", "1"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} From 711217924795279c26787302ea6d3d1313e03208 Mon Sep 17 00:00:00 2001 From: teisena Date: Sat, 28 Oct 2017 02:21:13 +0300 Subject: [PATCH 069/345] split lists/recipients endpoint --- examples/contactdb/listrecipients.java | 102 +++++++++++++++++++++++++ examples/contactdb/lists.java | 94 ----------------------- examples/contactdb/recipients.java | 71 ----------------- 3 files changed, 102 insertions(+), 165 deletions(-) create mode 100644 examples/contactdb/listrecipients.java diff --git a/examples/contactdb/listrecipients.java b/examples/contactdb/listrecipients.java new file mode 100644 index 00000000..cfe621e7 --- /dev/null +++ b/examples/contactdb/listrecipients.java @@ -0,0 +1,102 @@ +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.*; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +////////////////////////////////////////////////////////////////// +// Add Multiple Recipients to a List +// POST /contactdb/lists/{list_id}/recipients + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.POST); + request.setEndpoint("contactdb/lists/{list_id}/recipients"); + request.setBody("[\"recipient_id1\",\"recipient_id2\"]"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// Retrieve all recipients on a List +// GET /contactdb/lists/{list_id}/recipients + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("contactdb/lists/{list_id}/recipients"); + request.addQueryParam("page", "1"); + request.addQueryParam("page_size", "1"); + request.addQueryParam("list_id", "1"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// Add a Single Recipient to a List +// POST /contactdb/lists/{list_id}/recipients/{recipient_id} + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.POST); + request.setEndpoint("contactdb/lists/{list_id}/recipients/{recipient_id}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// Delete a Single Recipient from a Single List +// DELETE /contactdb/lists/{list_id}/recipients/{recipient_id} + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.DELETE); + request.setEndpoint("contactdb/lists/{list_id}/recipients/{recipient_id}"); + request.addQueryParam("recipient_id", "1"); + request.addQueryParam("list_id", "1"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} diff --git a/examples/contactdb/lists.java b/examples/contactdb/lists.java index 534a739c..1e55fd29 100644 --- a/examples/contactdb/lists.java +++ b/examples/contactdb/lists.java @@ -144,97 +144,3 @@ public static void main(String[] args) throws IOException { } } } - -////////////////////////////////////////////////////////////////// -// Add Multiple Recipients to a List -// POST /contactdb/lists/{list_id}/recipients - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.POST); - request.setEndpoint("contactdb/lists/{list_id}/recipients"); - request.setBody("[\"recipient_id1\",\"recipient_id2\"]"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve all recipients on a List -// GET /contactdb/lists/{list_id}/recipients - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("contactdb/lists/{list_id}/recipients"); - request.addQueryParam("page", "1"); - request.addQueryParam("page_size", "1"); - request.addQueryParam("list_id", "1"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Add a Single Recipient to a List -// POST /contactdb/lists/{list_id}/recipients/{recipient_id} - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.POST); - request.setEndpoint("contactdb/lists/{list_id}/recipients/{recipient_id}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Delete a Single Recipient from a Single List -// DELETE /contactdb/lists/{list_id}/recipients/{recipient_id} - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.DELETE); - request.setEndpoint("contactdb/lists/{list_id}/recipients/{recipient_id}"); - request.addQueryParam("recipient_id", "1"); - request.addQueryParam("list_id", "1"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} diff --git a/examples/contactdb/recipients.java b/examples/contactdb/recipients.java index 255a8e97..ebba8d90 100644 --- a/examples/contactdb/recipients.java +++ b/examples/contactdb/recipients.java @@ -7,77 +7,6 @@ import java.util.HashMap; import java.util.Map; -////////////////////////////////////////////////////////////////// -// Retrieve all recipients on a List -// GET /contactdb/lists/{list_id}/recipients - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("contactdb/lists/{list_id}/recipients"); - request.addQueryParam("page", "1"); - request.addQueryParam("page_size", "1"); - request.addQueryParam("list_id", "1"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Add a Single Recipient to a List -// POST /contactdb/lists/{list_id}/recipients/{recipient_id} - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.POST); - request.setEndpoint("contactdb/lists/{list_id}/recipients/{recipient_id}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Delete a Single Recipient from a Single List -// DELETE /contactdb/lists/{list_id}/recipients/{recipient_id} - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.DELETE); - request.setEndpoint("contactdb/lists/{list_id}/recipients/{recipient_id}"); - request.addQueryParam("recipient_id", "1"); - request.addQueryParam("list_id", "1"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - ////////////////////////////////////////////////////////////////// // Update Recipient // PATCH /contactdb/recipients From 1ca8320d332ec293c9f87e823ed55e24a5a0c541 Mon Sep 17 00:00:00 2001 From: teisena Date: Sat, 28 Oct 2017 02:43:28 +0300 Subject: [PATCH 070/345] split whitelabel examples by endpoint --- examples/whitelabel/domains.java | 281 +++++++++++++ examples/whitelabel/ips.java | 122 ++++++ examples/whitelabel/links.java | 238 +++++++++++ examples/whitelabel/whitelabel.java | 625 ---------------------------- 4 files changed, 641 insertions(+), 625 deletions(-) create mode 100644 examples/whitelabel/domains.java create mode 100644 examples/whitelabel/ips.java create mode 100644 examples/whitelabel/links.java delete mode 100644 examples/whitelabel/whitelabel.java diff --git a/examples/whitelabel/domains.java b/examples/whitelabel/domains.java new file mode 100644 index 00000000..26a0d0a2 --- /dev/null +++ b/examples/whitelabel/domains.java @@ -0,0 +1,281 @@ +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.*; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +////////////////////////////////////////////////////////////////// +// Create a domain whitelabel. +// POST /whitelabel/domains + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.POST); + request.setEndpoint("whitelabel/domains"); + request.setBody("{\"automatic_security\":false,\"username\":\"john@example.com\",\"domain\":\"example.com\",\"default\":true,\"custom_spf\":true,\"ips\":[\"192.168.1.1\",\"192.168.1.2\"],\"subdomain\":\"news\"}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// List all domain whitelabels. +// GET /whitelabel/domains + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("whitelabel/domains"); + request.addQueryParam("username", "test_string"); + request.addQueryParam("domain", "test_string"); + request.addQueryParam("exclude_subusers", "true"); + request.addQueryParam("limit", "1"); + request.addQueryParam("offset", "1"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// Get the default domain whitelabel. +// GET /whitelabel/domains/default + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("whitelabel/domains/default"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// List the domain whitelabel associated with the given user. +// GET /whitelabel/domains/subuser + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("whitelabel/domains/subuser"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// Disassociate a domain whitelabel from a given user. +// DELETE /whitelabel/domains/subuser + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.DELETE); + request.setEndpoint("whitelabel/domains/subuser"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// Update a domain whitelabel. +// PATCH /whitelabel/domains/{domain_id} + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.PATCH); + request.setEndpoint("whitelabel/domains/{domain_id}"); + request.setBody("{\"default\":false,\"custom_spf\":true}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// Retrieve a domain whitelabel. +// GET /whitelabel/domains/{domain_id} + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("whitelabel/domains/{domain_id}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// Delete a domain whitelabel. +// DELETE /whitelabel/domains/{domain_id} + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.DELETE); + request.setEndpoint("whitelabel/domains/{domain_id}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// Associate a domain whitelabel with a given user. +// POST /whitelabel/domains/{domain_id}/subuser + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.POST); + request.setEndpoint("whitelabel/domains/{domain_id}/subuser"); + request.setBody("{\"username\":\"jane@example.com\"}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// Add an IP to a domain whitelabel. +// POST /whitelabel/domains/{id}/ips + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.POST); + request.setEndpoint("whitelabel/domains/{id}/ips"); + request.setBody("{\"ip\":\"192.168.0.1\"}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// Remove an IP from a domain whitelabel. +// DELETE /whitelabel/domains/{id}/ips/{ip} + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.DELETE); + request.setEndpoint("whitelabel/domains/{id}/ips/{ip}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// Validate a domain whitelabel. +// POST /whitelabel/domains/{id}/validate + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.POST); + request.setEndpoint("whitelabel/domains/{id}/validate"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} diff --git a/examples/whitelabel/ips.java b/examples/whitelabel/ips.java new file mode 100644 index 00000000..54cb2af3 --- /dev/null +++ b/examples/whitelabel/ips.java @@ -0,0 +1,122 @@ +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.*; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +////////////////////////////////////////////////////////////////// +// Create an IP whitelabel +// POST /whitelabel/ips + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.POST); + request.setEndpoint("whitelabel/ips"); + request.setBody("{\"ip\":\"192.168.1.1\",\"domain\":\"example.com\",\"subdomain\":\"email\"}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// Retrieve all IP whitelabels +// GET /whitelabel/ips + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("whitelabel/ips"); + request.addQueryParam("ip", "test_string"); + request.addQueryParam("limit", "1"); + request.addQueryParam("offset", "1"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// Retrieve an IP whitelabel +// GET /whitelabel/ips/{id} + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("whitelabel/ips/{id}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// Delete an IP whitelabel +// DELETE /whitelabel/ips/{id} + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.DELETE); + request.setEndpoint("whitelabel/ips/{id}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// Validate an IP whitelabel +// POST /whitelabel/ips/{id}/validate + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.POST); + request.setEndpoint("whitelabel/ips/{id}/validate"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} diff --git a/examples/whitelabel/links.java b/examples/whitelabel/links.java new file mode 100644 index 00000000..ca7218ff --- /dev/null +++ b/examples/whitelabel/links.java @@ -0,0 +1,238 @@ +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.*; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +////////////////////////////////////////////////////////////////// +// Create a Link Whitelabel +// POST /whitelabel/links + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.POST); + request.setEndpoint("whitelabel/links"); + request.setBody("{\"default\":true,\"domain\":\"example.com\",\"subdomain\":\"mail\"}"); + request.addQueryParam("limit", "1"); + request.addQueryParam("offset", "1"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// Retrieve all link whitelabels +// GET /whitelabel/links + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("whitelabel/links"); + request.addQueryParam("limit", "1"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// Retrieve a Default Link Whitelabel +// GET /whitelabel/links/default + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("whitelabel/links/default"); + request.addQueryParam("domain", "test_string"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// Retrieve Associated Link Whitelabel +// GET /whitelabel/links/subuser + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("whitelabel/links/subuser"); + request.addQueryParam("username", "test_string"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// Disassociate a Link Whitelabel +// DELETE /whitelabel/links/subuser + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.DELETE); + request.setEndpoint("whitelabel/links/subuser"); + request.addQueryParam("username", "test_string"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// Update a Link Whitelabel +// PATCH /whitelabel/links/{id} + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.PATCH); + request.setEndpoint("whitelabel/links/{id}"); + request.setBody("{\"default\":true}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// Retrieve a Link Whitelabel +// GET /whitelabel/links/{id} + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("whitelabel/links/{id}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// Delete a Link Whitelabel +// DELETE /whitelabel/links/{id} + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.DELETE); + request.setEndpoint("whitelabel/links/{id}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// Validate a Link Whitelabel +// POST /whitelabel/links/{id}/validate + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.POST); + request.setEndpoint("whitelabel/links/{id}/validate"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} + +////////////////////////////////////////////////////////////////// +// Associate a Link Whitelabel +// POST /whitelabel/links/{link_id}/subuser + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.POST); + request.setEndpoint("whitelabel/links/{link_id}/subuser"); + request.setBody("{\"username\":\"jane@example.com\"}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} + diff --git a/examples/whitelabel/whitelabel.java b/examples/whitelabel/whitelabel.java deleted file mode 100644 index 4c668de5..00000000 --- a/examples/whitelabel/whitelabel.java +++ /dev/null @@ -1,625 +0,0 @@ -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; - -import com.sendgrid.*; - -import java.io.IOException; -import java.util.HashMap; -import java.util.Map; - -////////////////////////////////////////////////////////////////// -// Create a domain whitelabel. -// POST /whitelabel/domains - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.POST); - request.setEndpoint("whitelabel/domains"); - request.setBody("{\"automatic_security\":false,\"username\":\"john@example.com\",\"domain\":\"example.com\",\"default\":true,\"custom_spf\":true,\"ips\":[\"192.168.1.1\",\"192.168.1.2\"],\"subdomain\":\"news\"}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// List all domain whitelabels. -// GET /whitelabel/domains - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("whitelabel/domains"); - request.addQueryParam("username", "test_string"); - request.addQueryParam("domain", "test_string"); - request.addQueryParam("exclude_subusers", "true"); - request.addQueryParam("limit", "1"); - request.addQueryParam("offset", "1"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Get the default domain whitelabel. -// GET /whitelabel/domains/default - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("whitelabel/domains/default"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// List the domain whitelabel associated with the given user. -// GET /whitelabel/domains/subuser - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("whitelabel/domains/subuser"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Disassociate a domain whitelabel from a given user. -// DELETE /whitelabel/domains/subuser - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.DELETE); - request.setEndpoint("whitelabel/domains/subuser"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Update a domain whitelabel. -// PATCH /whitelabel/domains/{domain_id} - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.PATCH); - request.setEndpoint("whitelabel/domains/{domain_id}"); - request.setBody("{\"default\":false,\"custom_spf\":true}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve a domain whitelabel. -// GET /whitelabel/domains/{domain_id} - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("whitelabel/domains/{domain_id}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Delete a domain whitelabel. -// DELETE /whitelabel/domains/{domain_id} - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.DELETE); - request.setEndpoint("whitelabel/domains/{domain_id}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Associate a domain whitelabel with a given user. -// POST /whitelabel/domains/{domain_id}/subuser - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.POST); - request.setEndpoint("whitelabel/domains/{domain_id}/subuser"); - request.setBody("{\"username\":\"jane@example.com\"}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Add an IP to a domain whitelabel. -// POST /whitelabel/domains/{id}/ips - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.POST); - request.setEndpoint("whitelabel/domains/{id}/ips"); - request.setBody("{\"ip\":\"192.168.0.1\"}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Remove an IP from a domain whitelabel. -// DELETE /whitelabel/domains/{id}/ips/{ip} - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.DELETE); - request.setEndpoint("whitelabel/domains/{id}/ips/{ip}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Validate a domain whitelabel. -// POST /whitelabel/domains/{id}/validate - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.POST); - request.setEndpoint("whitelabel/domains/{id}/validate"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Create an IP whitelabel -// POST /whitelabel/ips - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.POST); - request.setEndpoint("whitelabel/ips"); - request.setBody("{\"ip\":\"192.168.1.1\",\"domain\":\"example.com\",\"subdomain\":\"email\"}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve all IP whitelabels -// GET /whitelabel/ips - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("whitelabel/ips"); - request.addQueryParam("ip", "test_string"); - request.addQueryParam("limit", "1"); - request.addQueryParam("offset", "1"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve an IP whitelabel -// GET /whitelabel/ips/{id} - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("whitelabel/ips/{id}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Delete an IP whitelabel -// DELETE /whitelabel/ips/{id} - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.DELETE); - request.setEndpoint("whitelabel/ips/{id}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Validate an IP whitelabel -// POST /whitelabel/ips/{id}/validate - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.POST); - request.setEndpoint("whitelabel/ips/{id}/validate"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Create a Link Whitelabel -// POST /whitelabel/links - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.POST); - request.setEndpoint("whitelabel/links"); - request.setBody("{\"default\":true,\"domain\":\"example.com\",\"subdomain\":\"mail\"}"); - request.addQueryParam("limit", "1"); - request.addQueryParam("offset", "1"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve all link whitelabels -// GET /whitelabel/links - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("whitelabel/links"); - request.addQueryParam("limit", "1"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve a Default Link Whitelabel -// GET /whitelabel/links/default - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("whitelabel/links/default"); - request.addQueryParam("domain", "test_string"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve Associated Link Whitelabel -// GET /whitelabel/links/subuser - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("whitelabel/links/subuser"); - request.addQueryParam("username", "test_string"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Disassociate a Link Whitelabel -// DELETE /whitelabel/links/subuser - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.DELETE); - request.setEndpoint("whitelabel/links/subuser"); - request.addQueryParam("username", "test_string"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Update a Link Whitelabel -// PATCH /whitelabel/links/{id} - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.PATCH); - request.setEndpoint("whitelabel/links/{id}"); - request.setBody("{\"default\":true}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve a Link Whitelabel -// GET /whitelabel/links/{id} - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("whitelabel/links/{id}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Delete a Link Whitelabel -// DELETE /whitelabel/links/{id} - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.DELETE); - request.setEndpoint("whitelabel/links/{id}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Validate a Link Whitelabel -// POST /whitelabel/links/{id}/validate - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.POST); - request.setEndpoint("whitelabel/links/{id}/validate"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Associate a Link Whitelabel -// POST /whitelabel/links/{link_id}/subuser - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.POST); - request.setEndpoint("whitelabel/links/{link_id}/subuser"); - request.setBody("{\"username\":\"jane@example.com\"}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - From 61de103f6df7b786bf477e519e96c90767ccf70a Mon Sep 17 00:00:00 2001 From: Luan Cestari Date: Fri, 27 Oct 2017 22:44:41 -0200 Subject: [PATCH 071/345] [issue#336] Possible fix the duplciated code --- .../java/com/sendgrid/helpers/mail/Mail.java | 71 ++++++++----------- 1 file changed, 29 insertions(+), 42 deletions(-) diff --git a/src/main/java/com/sendgrid/helpers/mail/Mail.java b/src/main/java/com/sendgrid/helpers/mail/Mail.java index edf02a15..034e768c 100644 --- a/src/main/java/com/sendgrid/helpers/mail/Mail.java +++ b/src/main/java/com/sendgrid/helpers/mail/Mail.java @@ -200,12 +200,7 @@ public List getPersonalization() { * @param personalization a personalization. */ public void addPersonalization(Personalization personalization) { - if (this.personalization == null) { - this.personalization = new ArrayList(); - this.personalization.add(personalization); - } else { - this.personalization.add(personalization); - } + this.personalization = addToList(personalization, this.personalization); } /** @@ -226,12 +221,7 @@ public void addContent(Content content) { Content newContent = new Content(); newContent.setType(content.getType()); newContent.setValue(content.getValue()); - if (this.content == null) { - this.content = new ArrayList(); - this.content.add(newContent); - } else { - this.content.add(newContent); - } + this.content = addToList(newContent, this.content); } /** @@ -255,12 +245,7 @@ public void addAttachments(Attachments attachments) { newAttachment.setFilename(attachments.getFilename()); newAttachment.setDisposition(attachments.getDisposition()); newAttachment.setContentId(attachments.getContentId()); - if (this.attachments == null) { - this.attachments = new ArrayList(); - this.attachments.add(newAttachment); - } else { - this.attachments.add(newAttachment); - } + this.attachments = addToList(newAttachment, this.attachments); } /** @@ -296,12 +281,7 @@ public Map getSections() { * @param value the section's value. */ public void addSection(String key, String value) { - if (sections == null) { - sections = new HashMap(); - sections.put(key, value); - } else { - sections.put(key, value); - } + this.sections = addToMap(key, value, this.sections); } /** @@ -320,12 +300,7 @@ public Map getHeaders() { * @param value the header's value. */ public void addHeader(String key, String value) { - if (headers == null) { - headers = new HashMap(); - headers.put(key, value); - } else { - headers.put(key, value); - } + this.headers = addToMap(key, value, this.headers); } /** @@ -343,12 +318,7 @@ public List getCategories() { * @param category the category. */ public void addCategory(String category) { - if (categories == null) { - categories = new ArrayList(); - categories.add(category); - } else { - categories.add(category); - } + this.categories = addToList(category, this.categories); } /** @@ -367,12 +337,7 @@ public Map getCustomArgs() { * @param value the argument's value. */ public void addCustomArg(String key, String value) { - if (customArgs == null) { - customArgs = new HashMap(); - customArgs.put(key, value); - } else { - customArgs.put(key, value); - } + this.customArgs = addToMap(key, value, this.customArgs); } /** @@ -504,4 +469,26 @@ public String buildPretty() throws IOException { throw ex; } } + + private List addToList(T element, List defaultList) { + if (defaultList != null) { + defaultList.add(element); + return defaultList; + } else { + List list = new ArrayList(); + list.add(element); + return list; + } + } + + private Map addToMap(K key, V value, Map defaultMap) { + if (defaultMap != null) { + defaultMap.put(key, value); + return defaultMap; + } else { + Map map = new HashMap(); + map.put(key, value); + return map; + } + } } From 7cb6fb1d03e16fa24337159f75ec4e52d73df1f3 Mon Sep 17 00:00:00 2001 From: Luan Cestari Date: Fri, 27 Oct 2017 22:50:37 -0200 Subject: [PATCH 072/345] [issue#336] Fix a generic type mismatch --- src/main/java/com/sendgrid/helpers/mail/Mail.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/sendgrid/helpers/mail/Mail.java b/src/main/java/com/sendgrid/helpers/mail/Mail.java index 034e768c..a1af2c2b 100644 --- a/src/main/java/com/sendgrid/helpers/mail/Mail.java +++ b/src/main/java/com/sendgrid/helpers/mail/Mail.java @@ -486,7 +486,7 @@ private Map addToMap(K key, V value, Map defaultMap) { defaultMap.put(key, value); return defaultMap; } else { - Map map = new HashMap(); + Map map = new HashMap(); map.put(key, value); return map; } From aaa28b33bf49c22a3ac3d121b4a530f93d90f855 Mon Sep 17 00:00:00 2001 From: Luan Cestari Date: Fri, 27 Oct 2017 22:53:43 -0200 Subject: [PATCH 073/345] [issue#336] Fix a generic type mismatch --- src/main/java/com/sendgrid/helpers/mail/Mail.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/sendgrid/helpers/mail/Mail.java b/src/main/java/com/sendgrid/helpers/mail/Mail.java index a1af2c2b..b34d7294 100644 --- a/src/main/java/com/sendgrid/helpers/mail/Mail.java +++ b/src/main/java/com/sendgrid/helpers/mail/Mail.java @@ -481,7 +481,7 @@ private List addToList(T element, List defaultList) { } } - private Map addToMap(K key, V value, Map defaultMap) { + private Map addToMap(K key, V value, Map defaultMap) { if (defaultMap != null) { defaultMap.put(key, value); return defaultMap; From dc40bc981ae458184cf27d30b1b3dab8f1295d06 Mon Sep 17 00:00:00 2001 From: sccalabr Date: Fri, 27 Oct 2017 20:15:10 -0500 Subject: [PATCH 074/345] Addressing comments. --- src/main/java/com/sendgrid/SendGridAPI.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/sendgrid/SendGridAPI.java b/src/main/java/com/sendgrid/SendGridAPI.java index 4f277cd7..32998459 100644 --- a/src/main/java/com/sendgrid/SendGridAPI.java +++ b/src/main/java/com/sendgrid/SendGridAPI.java @@ -75,7 +75,7 @@ public interface SendGridAPI { * Class makeCall makes the call to the SendGrid API, override this method for * testing. * - * @param request + * @param request the request * @return returns a response. * @throws IOException in case of network or marshal error. */ @@ -84,8 +84,8 @@ public interface SendGridAPI { /** * Class api sets up the request to the SendGrid API, this is main interface. * - * @param request - * @return + * @param request the request + * @return returns a response. * @throws IOException in case of network or marshal error. */ public Response api(Request request) throws IOException; From 1844839842351239990442d9ced274311660884a Mon Sep 17 00:00:00 2001 From: Raja Sekhar Karanam Date: Sat, 28 Oct 2017 15:59:04 +0530 Subject: [PATCH 075/345] Update CONTRIBUTING.md While I was reading the CONTRIBUTING section to learn how to contribute, I stumbled upon these broken links and typos. Hope this helps! --- CONTRIBUTING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index c818c473..8c70abe1 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -129,7 +129,7 @@ All test files are in the [`tests`](https://github.com/sendgrid/sendgrid-java/tr For the purposes of contributing to this repo, please update the [`SendGridTest.java`](https://github.com/sendgrid/sendgrid-java/tree/master/src/test/java/com/sendgrid/SendGridTest.java) file with unit tests as you modify the code. -1. Download [prism](https://stoplight.io/prism/) for your platform ([Mac OS X](https://github.com/stoplightio/prism/releases/download/v0.1.5/prism_darwin_amd64)) and save the binary to the sendgrid-ruby directory (or any directory you would like. The sendgrid-ruby directory is chosen mostly for convenience.) +1. Download [prism](http://stoplight.io/platform/prism/) for your platform ([Mac OS X](https://github.com/stoplightio/prism/releases/download/v0.6.21/prism_darwin_amd64), [Linux](https://github.com/stoplightio/prism/releases/download/v0.6.21/prism_linux_amd64), [Windows](https://github.com/stoplightio/prism/releases/download/v0.6.21/prism_windows_amd64.exe)) and save the binary to the sendgrid-java directory (or any directory you would like. The sendgrid-java directory is chosen mostly for convenience.) 1. Add execute permissions From ccad505444c9da3df3c8dd8848c8d020242b684d Mon Sep 17 00:00:00 2001 From: "Julian J. Maurer" Date: Sat, 28 Oct 2017 16:37:46 +0200 Subject: [PATCH 076/345] Fix for issue #335 Created seperate files for each example --- examples/ips/README.md | 5 + examples/ips/RetrieveAllIPs.java | 34 +++ examples/ips/addiptowarmup.java | 33 +++ examples/ips/addtopool.java | 32 +++ examples/ips/createpool.java | 32 +++ examples/ips/deletepool.java | 31 +++ examples/ips/ips.java | 326 ------------------------- examples/ips/removefromwarmup.java | 32 +++ examples/ips/removeipfrompool.java | 31 +++ examples/ips/retrieveallpools.java | 30 +++ examples/ips/retrieveassignedips.java | 31 +++ examples/ips/retrieveipsinpool.java | 31 +++ examples/ips/retrieveipsinwarmup.java | 32 +++ examples/ips/retrievepoolsforip.java | 33 +++ examples/ips/retrievewarmupstatus.java | 32 +++ examples/ips/updatepoolname.java | 32 +++ 16 files changed, 451 insertions(+), 326 deletions(-) create mode 100644 examples/ips/README.md create mode 100644 examples/ips/RetrieveAllIPs.java create mode 100644 examples/ips/addiptowarmup.java create mode 100644 examples/ips/addtopool.java create mode 100644 examples/ips/createpool.java create mode 100644 examples/ips/deletepool.java delete mode 100644 examples/ips/ips.java create mode 100644 examples/ips/removefromwarmup.java create mode 100644 examples/ips/removeipfrompool.java create mode 100644 examples/ips/retrieveallpools.java create mode 100644 examples/ips/retrieveassignedips.java create mode 100644 examples/ips/retrieveipsinpool.java create mode 100644 examples/ips/retrieveipsinwarmup.java create mode 100644 examples/ips/retrievepoolsforip.java create mode 100644 examples/ips/retrievewarmupstatus.java create mode 100644 examples/ips/updatepoolname.java diff --git a/examples/ips/README.md b/examples/ips/README.md new file mode 100644 index 00000000..e4358848 --- /dev/null +++ b/examples/ips/README.md @@ -0,0 +1,5 @@ +![SendGrid Logo](https://uiux.s3.amazonaws.com/2016-logos/email-logo%402x.png) + +This folder contains various examples on using the IPs endpoint of SendGrid with Java: + +* [Retrieve all IP addresses (GET /ips)](retrieveallips.java) \ No newline at end of file diff --git a/examples/ips/RetrieveAllIPs.java b/examples/ips/RetrieveAllIPs.java new file mode 100644 index 00000000..14845939 --- /dev/null +++ b/examples/ips/RetrieveAllIPs.java @@ -0,0 +1,34 @@ +import com.sendgrid.Method; +import com.sendgrid.Request; +import com.sendgrid.Response; +import com.sendgrid.SendGrid; + +import java.io.IOException; + + +////////////////////////////////////////////////////////////////// +// Retrieve all IP addresses +// GET /ips + + +public class RetrieveAllIPs { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("ips"); + request.addQueryParam("subuser", "test_string"); + request.addQueryParam("ip", "test_string"); + request.addQueryParam("limit", "1"); + request.addQueryParam("exclude_whitelabels", "true"); + request.addQueryParam("offset", "1"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/ips/addiptowarmup.java b/examples/ips/addiptowarmup.java new file mode 100644 index 00000000..89ebaad1 --- /dev/null +++ b/examples/ips/addiptowarmup.java @@ -0,0 +1,33 @@ +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.*; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + + + +////////////////////////////////////////////////////////////////// +// Add an IP to warmup +// POST /ips/warmup + + +public class AddIPToWarmup { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.POST); + request.setEndpoint("ips/warmup"); + request.setBody("{\"ip\":\"0.0.0.0\"}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/ips/addtopool.java b/examples/ips/addtopool.java new file mode 100644 index 00000000..01e6b16b --- /dev/null +++ b/examples/ips/addtopool.java @@ -0,0 +1,32 @@ +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.*; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + + +////////////////////////////////////////////////////////////////// +// Add an IP address to a pool +// POST /ips/pools/{pool_name}/ips + + +public class AddIPToPool { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.POST); + request.setEndpoint("ips/pools/{pool_name}/ips"); + request.setBody("{\"ip\":\"0.0.0.0\"}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/ips/createpool.java b/examples/ips/createpool.java new file mode 100644 index 00000000..c91d82f0 --- /dev/null +++ b/examples/ips/createpool.java @@ -0,0 +1,32 @@ +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.*; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + + +////////////////////////////////////////////////////////////////// +// Create an IP pool. +// POST /ips/pools + + +public class CreateIPPool { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.POST); + request.setEndpoint("ips/pools"); + request.setBody("{\"name\":\"marketing\"}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/ips/deletepool.java b/examples/ips/deletepool.java new file mode 100644 index 00000000..51c50249 --- /dev/null +++ b/examples/ips/deletepool.java @@ -0,0 +1,31 @@ +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.*; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + + +////////////////////////////////////////////////////////////////// +// Delete an IP pool. +// DELETE /ips/pools/{pool_name} + + +public class DeletePool { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.DELETE); + request.setEndpoint("ips/pools/{pool_name}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/ips/ips.java b/examples/ips/ips.java deleted file mode 100644 index 55c97644..00000000 --- a/examples/ips/ips.java +++ /dev/null @@ -1,326 +0,0 @@ -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; - -import com.sendgrid.*; - -import java.io.IOException; -import java.util.HashMap; -import java.util.Map; - -////////////////////////////////////////////////////////////////// -// Retrieve all IP addresses -// GET /ips - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("ips"); - request.addQueryParam("subuser", "test_string"); - request.addQueryParam("ip", "test_string"); - request.addQueryParam("limit", "1"); - request.addQueryParam("exclude_whitelabels", "true"); - request.addQueryParam("offset", "1"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve all assigned IPs -// GET /ips/assigned - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("ips/assigned"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Create an IP pool. -// POST /ips/pools - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.POST); - request.setEndpoint("ips/pools"); - request.setBody("{\"name\":\"marketing\"}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve all IP pools. -// GET /ips/pools - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("ips/pools"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Update an IP pools name. -// PUT /ips/pools/{pool_name} - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.PUT); - request.setEndpoint("ips/pools/{pool_name}"); - request.setBody("{\"name\":\"new_pool_name\"}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve all IPs in a specified pool. -// GET /ips/pools/{pool_name} - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("ips/pools/{pool_name}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Delete an IP pool. -// DELETE /ips/pools/{pool_name} - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.DELETE); - request.setEndpoint("ips/pools/{pool_name}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Add an IP address to a pool -// POST /ips/pools/{pool_name}/ips - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.POST); - request.setEndpoint("ips/pools/{pool_name}/ips"); - request.setBody("{\"ip\":\"0.0.0.0\"}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Remove an IP address from a pool. -// DELETE /ips/pools/{pool_name}/ips/{ip} - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.DELETE); - request.setEndpoint("ips/pools/{pool_name}/ips/{ip}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Add an IP to warmup -// POST /ips/warmup - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.POST); - request.setEndpoint("ips/warmup"); - request.setBody("{\"ip\":\"0.0.0.0\"}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve all IPs currently in warmup -// GET /ips/warmup - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("ips/warmup"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve warmup status for a specific IP address -// GET /ips/warmup/{ip_address} - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("ips/warmup/{ip_address}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Remove an IP from warmup -// DELETE /ips/warmup/{ip_address} - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.DELETE); - request.setEndpoint("ips/warmup/{ip_address}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve all IP pools an IP address belongs to -// GET /ips/{ip_address} - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("ips/{ip_address}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - diff --git a/examples/ips/removefromwarmup.java b/examples/ips/removefromwarmup.java new file mode 100644 index 00000000..b99229de --- /dev/null +++ b/examples/ips/removefromwarmup.java @@ -0,0 +1,32 @@ +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.*; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + + + +////////////////////////////////////////////////////////////////// +// Remove an IP from warmup +// DELETE /ips/warmup/{ip_address} + + +public class RemoveFromWarmup { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.DELETE); + request.setEndpoint("ips/warmup/{ip_address}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/ips/removeipfrompool.java b/examples/ips/removeipfrompool.java new file mode 100644 index 00000000..ceb5f2be --- /dev/null +++ b/examples/ips/removeipfrompool.java @@ -0,0 +1,31 @@ +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + + + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + + +////////////////////////////////////////////////////////////////// +// Remove an IP address from a pool. +// DELETE /ips/pools/{pool_name}/ips/{ip} + + +public class RemoveIPFromPool { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.DELETE); + request.setEndpoint("ips/pools/{pool_name}/ips/{ip}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/ips/retrieveallpools.java b/examples/ips/retrieveallpools.java new file mode 100644 index 00000000..a4362ce0 --- /dev/null +++ b/examples/ips/retrieveallpools.java @@ -0,0 +1,30 @@ +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.*; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + + +////////////////////////////////////////////////////////////////// +// Retrieve all IP pools. +// GET /ips/pools + + +public class RetieveAllIPPools { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("ips/pools"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } \ No newline at end of file diff --git a/examples/ips/retrieveassignedips.java b/examples/ips/retrieveassignedips.java new file mode 100644 index 00000000..968834cc --- /dev/null +++ b/examples/ips/retrieveassignedips.java @@ -0,0 +1,31 @@ +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.*; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + + +////////////////////////////////////////////////////////////////// +// Retrieve all assigned IPs +// GET /ips/assigned + + +public class RetrieveAllAssignedIPs { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("ips/assigned"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/ips/retrieveipsinpool.java b/examples/ips/retrieveipsinpool.java new file mode 100644 index 00000000..72330c3f --- /dev/null +++ b/examples/ips/retrieveipsinpool.java @@ -0,0 +1,31 @@ +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.*; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + + +////////////////////////////////////////////////////////////////// +// Retrieve all IPs in a specified pool. +// GET /ips/pools/{pool_name} + + +public class RetrieveIPsInPool { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("ips/pools/{pool_name}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/ips/retrieveipsinwarmup.java b/examples/ips/retrieveipsinwarmup.java new file mode 100644 index 00000000..3767656b --- /dev/null +++ b/examples/ips/retrieveipsinwarmup.java @@ -0,0 +1,32 @@ +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.*; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + + + +////////////////////////////////////////////////////////////////// +// Retrieve all IPs currently in warmup +// GET /ips/warmup + + +public class RetrieveIPsInWarmup { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("ips/warmup"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/ips/retrievepoolsforip.java b/examples/ips/retrievepoolsforip.java new file mode 100644 index 00000000..8f19b7a7 --- /dev/null +++ b/examples/ips/retrievepoolsforip.java @@ -0,0 +1,33 @@ +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.*; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + + + +////////////////////////////////////////////////////////////////// +// Retrieve all IP pools an IP address belongs to +// GET /ips/{ip_address} + + +public class RetrieveAllPoolsForIP { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("ips/{ip_address}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} + diff --git a/examples/ips/retrievewarmupstatus.java b/examples/ips/retrievewarmupstatus.java new file mode 100644 index 00000000..5d315b8f --- /dev/null +++ b/examples/ips/retrievewarmupstatus.java @@ -0,0 +1,32 @@ +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.*; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + + + +////////////////////////////////////////////////////////////////// +// Retrieve warmup status for a specific IP address +// GET /ips/warmup/{ip_address} + + +public class RetrieveIPsWarmupStatus { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("ips/warmup/{ip_address}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/ips/updatepoolname.java b/examples/ips/updatepoolname.java new file mode 100644 index 00000000..4e9c2a26 --- /dev/null +++ b/examples/ips/updatepoolname.java @@ -0,0 +1,32 @@ +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.*; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + + +////////////////////////////////////////////////////////////////// +// Update an IP pools name. +// PUT /ips/pools/{pool_name} + + +public class UpdateIPPoolName { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.PUT); + request.setEndpoint("ips/pools/{pool_name}"); + request.setBody("{\"name\":\"new_pool_name\"}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file From b02c534f777854baf9ba57ca3f7fa8c2412dea13 Mon Sep 17 00:00:00 2001 From: "Julian J. Maurer" Date: Sat, 28 Oct 2017 16:54:13 +0200 Subject: [PATCH 077/345] Added README.md --- examples/ips/README.md | 15 ++++++++++++++- .../ips/{addiptowarmup.java => addtowarmup.java} | 0 ...{removeipfrompool.java => removefrompool.java} | 0 .../{RetrieveAllIPs.java => retrieveallips.java} | 0 4 files changed, 14 insertions(+), 1 deletion(-) rename examples/ips/{addiptowarmup.java => addtowarmup.java} (100%) rename examples/ips/{removeipfrompool.java => removefrompool.java} (100%) rename examples/ips/{RetrieveAllIPs.java => retrieveallips.java} (100%) diff --git a/examples/ips/README.md b/examples/ips/README.md index e4358848..f8a9780b 100644 --- a/examples/ips/README.md +++ b/examples/ips/README.md @@ -2,4 +2,17 @@ This folder contains various examples on using the IPs endpoint of SendGrid with Java: -* [Retrieve all IP addresses (GET /ips)](retrieveallips.java) \ No newline at end of file +* [Retrieve all IP addresses (GET /ips)](retrieveallips.java) +* [Retrieve all assigned IPs (GET /ips/assigned)](retrieveassignedips.java) +* [Create an IP pool (POST /ips/pools)](createpool.java) +* [Retrieve all IP pools (GET /ips/pools)](retrieveallpools.java) +* [Update an IP pools name (PUT /ips/pools/{pool_name})](updatepoolname.java) +* [Retrieve all IPs in a specified pool (GET /ips/pools/{pool_name})](retrieveipsinpool.java) +* [Delete an IP pool. (DELETE /ips/pools/{pool_name})](deletepool.java) +* [Add an IP address to a pool (POST /ips/pools/{pool_name}/ips)](addtopool.java) +* [Remove an IP address from a pool (DELETE /ips/pools/{pool_name}/ips/{ip}](removefrompool.java) +* [Add an IP to warmup (POST /ips/warmup)](addtowarmup.java) +* [Retrieve all IPs currently in warmup (GET /ips/warmup)](retrieveipsinwarmup.java) +* [Retrieve warmup status for a specific IP address (GET /ips/warmup/{ip_address})](retrievewarmupstatus.java) +* [Remove an IP from warmup (DELETE /ips/warmup/{ip_address})](removefromwarmup.java) +* [Retrieve all IP pools an IP address belongs to (GET /ips/{ip_address})](retrievepoolsforip.java) \ No newline at end of file diff --git a/examples/ips/addiptowarmup.java b/examples/ips/addtowarmup.java similarity index 100% rename from examples/ips/addiptowarmup.java rename to examples/ips/addtowarmup.java diff --git a/examples/ips/removeipfrompool.java b/examples/ips/removefrompool.java similarity index 100% rename from examples/ips/removeipfrompool.java rename to examples/ips/removefrompool.java diff --git a/examples/ips/RetrieveAllIPs.java b/examples/ips/retrieveallips.java similarity index 100% rename from examples/ips/RetrieveAllIPs.java rename to examples/ips/retrieveallips.java From b845405921903e45bcc884367ed6fa3da2ac8731 Mon Sep 17 00:00:00 2001 From: pushkyn Date: Sat, 28 Oct 2017 18:56:10 +0300 Subject: [PATCH 078/345] update LICENSE - fix year --- LICENSE.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/LICENSE.txt b/LICENSE.txt index 3e9812c6..84a49643 100644 --- a/LICENSE.txt +++ b/LICENSE.txt @@ -1,6 +1,6 @@ The MIT License (MIT) -Copyright (c) 2013-2016 SendGrid +Copyright (c) 2013-2017 SendGrid Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal From 6a32211f480cd91ccd314c93fc0f32c91409a568 Mon Sep 17 00:00:00 2001 From: Julian Jacques Maurer Date: Sat, 28 Oct 2017 19:48:18 +0200 Subject: [PATCH 079/345] Changed file names Made the file names more readable --- .../ips/{addtopool.java => AddToPool.java} | 0 .../{addtowarmup.java => AddToWarmup.java} | 0 .../ips/{createpool.java => CreatePool.java} | 0 .../ips/{deletepool.java => DeletePool.java} | 0 examples/ips/README.md | 28 +++++++++---------- ...emovefrompool.java => RemoveFromPool.java} | 0 ...efromwarmup.java => RemoveFromWarmup.java} | 0 ...etrieveallips.java => RetrieveAllIPs.java} | 0 ...eveallpools.java => RetrieveAllPools.java} | 0 ...ignedips.java => RetrieveAssignedIPs.java} | 0 ...eipsinpool.java => RetrieveIPsInPool.java} | 0 ...inwarmup.java => RetrieveIPsInWarmup.java} | 0 ...oolsforip.java => RetrievePoolsForIP.java} | 0 ...pstatus.java => RetrieveWarmupStatus.java} | 0 ...pdatepoolname.java => UpdatePoolName.java} | 0 15 files changed, 14 insertions(+), 14 deletions(-) rename examples/ips/{addtopool.java => AddToPool.java} (100%) rename examples/ips/{addtowarmup.java => AddToWarmup.java} (100%) rename examples/ips/{createpool.java => CreatePool.java} (100%) rename examples/ips/{deletepool.java => DeletePool.java} (100%) rename examples/ips/{removefrompool.java => RemoveFromPool.java} (100%) rename examples/ips/{removefromwarmup.java => RemoveFromWarmup.java} (100%) rename examples/ips/{retrieveallips.java => RetrieveAllIPs.java} (100%) rename examples/ips/{retrieveallpools.java => RetrieveAllPools.java} (100%) rename examples/ips/{retrieveassignedips.java => RetrieveAssignedIPs.java} (100%) rename examples/ips/{retrieveipsinpool.java => RetrieveIPsInPool.java} (100%) rename examples/ips/{retrieveipsinwarmup.java => RetrieveIPsInWarmup.java} (100%) rename examples/ips/{retrievepoolsforip.java => RetrievePoolsForIP.java} (100%) rename examples/ips/{retrievewarmupstatus.java => RetrieveWarmupStatus.java} (100%) rename examples/ips/{updatepoolname.java => UpdatePoolName.java} (100%) diff --git a/examples/ips/addtopool.java b/examples/ips/AddToPool.java similarity index 100% rename from examples/ips/addtopool.java rename to examples/ips/AddToPool.java diff --git a/examples/ips/addtowarmup.java b/examples/ips/AddToWarmup.java similarity index 100% rename from examples/ips/addtowarmup.java rename to examples/ips/AddToWarmup.java diff --git a/examples/ips/createpool.java b/examples/ips/CreatePool.java similarity index 100% rename from examples/ips/createpool.java rename to examples/ips/CreatePool.java diff --git a/examples/ips/deletepool.java b/examples/ips/DeletePool.java similarity index 100% rename from examples/ips/deletepool.java rename to examples/ips/DeletePool.java diff --git a/examples/ips/README.md b/examples/ips/README.md index f8a9780b..6b558ce2 100644 --- a/examples/ips/README.md +++ b/examples/ips/README.md @@ -2,17 +2,17 @@ This folder contains various examples on using the IPs endpoint of SendGrid with Java: -* [Retrieve all IP addresses (GET /ips)](retrieveallips.java) -* [Retrieve all assigned IPs (GET /ips/assigned)](retrieveassignedips.java) -* [Create an IP pool (POST /ips/pools)](createpool.java) -* [Retrieve all IP pools (GET /ips/pools)](retrieveallpools.java) -* [Update an IP pools name (PUT /ips/pools/{pool_name})](updatepoolname.java) -* [Retrieve all IPs in a specified pool (GET /ips/pools/{pool_name})](retrieveipsinpool.java) -* [Delete an IP pool. (DELETE /ips/pools/{pool_name})](deletepool.java) -* [Add an IP address to a pool (POST /ips/pools/{pool_name}/ips)](addtopool.java) -* [Remove an IP address from a pool (DELETE /ips/pools/{pool_name}/ips/{ip}](removefrompool.java) -* [Add an IP to warmup (POST /ips/warmup)](addtowarmup.java) -* [Retrieve all IPs currently in warmup (GET /ips/warmup)](retrieveipsinwarmup.java) -* [Retrieve warmup status for a specific IP address (GET /ips/warmup/{ip_address})](retrievewarmupstatus.java) -* [Remove an IP from warmup (DELETE /ips/warmup/{ip_address})](removefromwarmup.java) -* [Retrieve all IP pools an IP address belongs to (GET /ips/{ip_address})](retrievepoolsforip.java) \ No newline at end of file +* [Retrieve all IP addresses (GET /ips)](RetrieveAllIPs.java) +* [Retrieve all assigned IPs (GET /ips/assigned)](RetrieveAssignedIPs.java) +* [Create an IP pool (POST /ips/pools)](CreatePool.java) +* [Retrieve all IP pools (GET /ips/pools)](RetrieveAllPools.java) +* [Update an IP pools name (PUT /ips/pools/{pool_name})](UpdatePoolName.java) +* [Retrieve all IPs in a specified pool (GET /ips/pools/{pool_name})](RetrieveIPsInPool.java) +* [Delete an IP pool. (DELETE /ips/pools/{pool_name})](DeletePool.java) +* [Add an IP address to a pool (POST /ips/pools/{pool_name}/ips)](AddToPool.java) +* [Remove an IP address from a pool (DELETE /ips/pools/{pool_name}/ips/{ip}](RemoveFromPool.java) +* [Add an IP to warmup (POST /ips/warmup)](AddToWarmup.java) +* [Retrieve all IPs currently in warmup (GET /ips/warmup)](RetrieveIPsInWarmup.java) +* [Retrieve warmup status for a specific IP address (GET /ips/warmup/{ip_address})](RetrieveWarmupStatus.java) +* [Remove an IP from warmup (DELETE /ips/warmup/{ip_address})](RemoveFromwarmup.java) +* [Retrieve all IP pools an IP address belongs to (GET /ips/{ip_address})](RetrievePoolsForIP.java) \ No newline at end of file diff --git a/examples/ips/removefrompool.java b/examples/ips/RemoveFromPool.java similarity index 100% rename from examples/ips/removefrompool.java rename to examples/ips/RemoveFromPool.java diff --git a/examples/ips/removefromwarmup.java b/examples/ips/RemoveFromWarmup.java similarity index 100% rename from examples/ips/removefromwarmup.java rename to examples/ips/RemoveFromWarmup.java diff --git a/examples/ips/retrieveallips.java b/examples/ips/RetrieveAllIPs.java similarity index 100% rename from examples/ips/retrieveallips.java rename to examples/ips/RetrieveAllIPs.java diff --git a/examples/ips/retrieveallpools.java b/examples/ips/RetrieveAllPools.java similarity index 100% rename from examples/ips/retrieveallpools.java rename to examples/ips/RetrieveAllPools.java diff --git a/examples/ips/retrieveassignedips.java b/examples/ips/RetrieveAssignedIPs.java similarity index 100% rename from examples/ips/retrieveassignedips.java rename to examples/ips/RetrieveAssignedIPs.java diff --git a/examples/ips/retrieveipsinpool.java b/examples/ips/RetrieveIPsInPool.java similarity index 100% rename from examples/ips/retrieveipsinpool.java rename to examples/ips/RetrieveIPsInPool.java diff --git a/examples/ips/retrieveipsinwarmup.java b/examples/ips/RetrieveIPsInWarmup.java similarity index 100% rename from examples/ips/retrieveipsinwarmup.java rename to examples/ips/RetrieveIPsInWarmup.java diff --git a/examples/ips/retrievepoolsforip.java b/examples/ips/RetrievePoolsForIP.java similarity index 100% rename from examples/ips/retrievepoolsforip.java rename to examples/ips/RetrievePoolsForIP.java diff --git a/examples/ips/retrievewarmupstatus.java b/examples/ips/RetrieveWarmupStatus.java similarity index 100% rename from examples/ips/retrievewarmupstatus.java rename to examples/ips/RetrieveWarmupStatus.java diff --git a/examples/ips/updatepoolname.java b/examples/ips/UpdatePoolName.java similarity index 100% rename from examples/ips/updatepoolname.java rename to examples/ips/UpdatePoolName.java From f638e77d117bcd8f09d907835c4834fc6ccc084d Mon Sep 17 00:00:00 2001 From: Julian Jacques Maurer Date: Sat, 28 Oct 2017 19:50:39 +0200 Subject: [PATCH 080/345] Fixed Typo in README.md --- examples/ips/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/ips/README.md b/examples/ips/README.md index 6b558ce2..7ded4310 100644 --- a/examples/ips/README.md +++ b/examples/ips/README.md @@ -14,5 +14,5 @@ This folder contains various examples on using the IPs endpoint of SendGrid with * [Add an IP to warmup (POST /ips/warmup)](AddToWarmup.java) * [Retrieve all IPs currently in warmup (GET /ips/warmup)](RetrieveIPsInWarmup.java) * [Retrieve warmup status for a specific IP address (GET /ips/warmup/{ip_address})](RetrieveWarmupStatus.java) -* [Remove an IP from warmup (DELETE /ips/warmup/{ip_address})](RemoveFromwarmup.java) +* [Remove an IP from warmup (DELETE /ips/warmup/{ip_address})](RemoveFromWarmup.java) * [Retrieve all IP pools an IP address belongs to (GET /ips/{ip_address})](RetrievePoolsForIP.java) \ No newline at end of file From c81edde5517910007403d7154f3ee0ab859f2ae6 Mon Sep 17 00:00:00 2001 From: mptap Date: Sat, 28 Oct 2017 13:27:46 -0700 Subject: [PATCH 081/345] Added unittest to check for specific repo files --- .../com/sendgrid/TestRequiredFilesExist.java | 92 +++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 src/test/java/com/sendgrid/TestRequiredFilesExist.java diff --git a/src/test/java/com/sendgrid/TestRequiredFilesExist.java b/src/test/java/com/sendgrid/TestRequiredFilesExist.java new file mode 100644 index 00000000..eb044941 --- /dev/null +++ b/src/test/java/com/sendgrid/TestRequiredFilesExist.java @@ -0,0 +1,92 @@ +import org.junit.Test; + +import java.io.File; + +import static org.junit.Assert.assertTrue; + +public class TestRequiredFilesExist { + + // ./Docker or docker/Docker + @Test public void checkDockerExists() { + boolean dockerExists = new File("./Docker").exists() || + new File("./docker/Docker").exists(); + assertTrue(dockerExists); + } + + // ./docker-compose.yml or ./docker/docker-compose.yml + @Test public void checkDockerComposeExists() { + boolean dockerComposeExists = new File("./docker-compose.yml").exists() || + new File("./docker/docker-compose.yml").exists(); + assertTrue(dockerComposeExists); + } + + // ./.env_sample + @Test public void checkEnvSampleExists() { + assertTrue(new File("./.env_sample").exists()); + } + + // ./.gitignore + @Test public void checkGitIgnoreExists() { + assertTrue(new File("./.gitignore").exists()); + } + + // ./.travis.yml + @Test public void checkTravisExists() { + assertTrue(new File("./.travis.yml").exists()); + } + + // ./.codeclimate.yml + @Test public void checkCodeClimateExists() { + assertTrue(new File("./.codeclimate.yml").exists()); + } + + // ./CHANGELOG.md + @Test public void checkChangelogExists() { + assertTrue(new File("./CHANGELOG.md").exists()); + } + + // ./CODE_OF_CONDUCT.md + @Test public void checkCodeOfConductExists() { + assertTrue(new File("./CODE_OF_CONDUCT.md").exists()); + } + + // ./CONTRIBUTING.md + @Test public void checkContributingGuideExists() { + assertTrue(new File("./CONTRIBUTING.md").exists()); + } + + // ./.github/ISSUE_TEMPLATE + @Test public void checkIssuesTemplateExists() { + assertTrue(new File("./.github/ISSUE_TEMPLATE").exists()); + } + + // ./LICENSE.md + @Test public void checkLicenseExists() { + assertTrue(new File("./LICENSE.md").exists()); + } + + // ./.github/PULL_REQUEST_TEMPLATE + @Test public void checkPullRequestExists() { + assertTrue(new File("./.github/PULL_REQUEST_TEMPLATE").exists()); + } + + // ./README.md + @Test public void checkReadMeExists() { + assertTrue(new File("./README.md").exists()); + } + + // ./TROUBLESHOOTING.md + @Test public void checkTroubleShootingGuideExists() { + assertTrue(new File("./TROUBLESHOOTING.md").exists()); + } + + // ./USAGE.md + @Test public void checkUsageGuideExists() { + assertTrue(new File("./USAGE.md").exists()); + } + + // ./USE_CASES.md + @Test public void checkUseCases() { + assertTrue(new File("./USE_CASES.md").exists()); + } +} From 6380cec03a26ff7dc06dc42a494763f7fa8ff833 Mon Sep 17 00:00:00 2001 From: Matt Bernier Date: Sat, 28 Oct 2017 17:05:08 -0600 Subject: [PATCH 082/345] Quick and dirty changes to wait for prism --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 4fc4dbee..d3048eb5 100644 --- a/.travis.yml +++ b/.travis.yml @@ -12,7 +12,7 @@ matrix: jdk: oraclejdk8 before_script: - "./scripts/startPrism.sh &" -- sleep 10 +- sleep 20 before_install: - cat /etc/hosts # optionally check the content *before* - sudo hostname "$(hostname | cut -c1-63)" From dd5ef8c541eda21e7b39da0df494181da39a1efc Mon Sep 17 00:00:00 2001 From: Andy Trimble Date: Sat, 28 Oct 2017 17:32:05 -0600 Subject: [PATCH 083/345] Updating fix for https://github.com/travis-ci/travis-ci/issues/5227 --- .travis.yml | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/.travis.yml b/.travis.yml index d3048eb5..8a09eb63 100644 --- a/.travis.yml +++ b/.travis.yml @@ -14,14 +14,15 @@ before_script: - "./scripts/startPrism.sh &" - sleep 20 before_install: -- cat /etc/hosts # optionally check the content *before* -- sudo hostname "$(hostname | cut -c1-63)" -- sed -e "s/^\\(127\\.0\\.0\\.1.*\\)/\\1 $(hostname | cut -c1-63)/" /etc/hosts | sudo tee /etc/hosts -- cat /etc/hosts # optionally check the content *after* + - cat /etc/hosts # optionally check the content *before* + - sudo hostname "$(hostname | cut -c1-63)" + - sed -e "s/^\\(127\\.0\\.0\\.1.*\\)/\\1 $(hostname | cut -c1-63)/" /etc/hosts > /tmp/hosts + - sudo mv /tmp/hosts /etc/hosts + - cat /etc/hosts # optionally check the content *after* after_script: -- lsof -i :4010 -S # adds some debugging statements -- "./gradlew build" -- "./scripts/upload.sh" + - lsof -i :4010 -S # adds some debugging statements + - "./gradlew build" + - "./scripts/upload.sh" env: global: - S3_POLICY: ewogICJleHBpcmF0aW9uIjogIjIxMDAtMDEtMDFUMTI6MDA6MDAuMDAwWiIsCiAgImNvbmRpdGlvbnMiOiBbCiAgICB7ImFjbCI6ICJwdWJsaWMtcmVhZCIgfSwKICAgIHsiYnVja2V0IjogInNlbmRncmlkLW9wZW4tc291cmNlIiB9LAogICAgWyJzdGFydHMtd2l0aCIsICIka2V5IiwgInNlbmRncmlkLWphdmEvIl0sCiAgICBbImNvbnRlbnQtbGVuZ3RoLXJhbmdlIiwgMjA0OCwgMjY4NDM1NDU2XSwKICAgIFsiZXEiLCAiJENvbnRlbnQtVHlwZSIsICJhcHBsaWNhdGlvbi96aXAiXQogIF0KfQo= From 36a23610bfd722bb2c605e9992ba7849e0a89764 Mon Sep 17 00:00:00 2001 From: Aditya Patil Date: Sun, 29 Oct 2017 11:23:49 +0530 Subject: [PATCH 084/345] remove sudo: false to make prism work --- .travis.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 8a09eb63..55ad5ae2 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,5 +1,4 @@ language: java -sudo: false matrix: include: - os: linux From 2a716727efecdd5c508d659469c4464dd680e850 Mon Sep 17 00:00:00 2001 From: Aditya Patil Date: Sun, 29 Oct 2017 11:27:28 +0530 Subject: [PATCH 085/345] update travis.yml to change openjdk7 to openjdk8 --- .travis.yml | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/.travis.yml b/.travis.yml index 55ad5ae2..944f6df3 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,14 +1,8 @@ language: java matrix: include: - - os: linux - dist: precise - jdk: openjdk7 - - os: linux - dist: precise - jdk: oraclejdk7 - - os: linux - jdk: oraclejdk8 + - jdk: openjdk8 + - jdk: oraclejdk8 before_script: - "./scripts/startPrism.sh &" - sleep 20 From 06b381efb4a7ea5eef79775e3f3a4650728d109a Mon Sep 17 00:00:00 2001 From: Bhargodev Arya Date: Sun, 29 Oct 2017 00:30:42 +0530 Subject: [PATCH 086/345] Fix similar-code issue in examples/accesssettings/accesssettings.java --- .../accesssettings/CreateAccessSettings.java | 30 ++++ .../accesssettings/DeleteAccessSettings.java | 30 ++++ .../DeleteIPFromAccessSettings.java | 29 ++++ examples/accesssettings/Example.java | 31 ++++ .../accesssettings/GetAccessSettings.java | 30 ++++ .../GetAccessSettingsActivity.java | 33 ++++ .../GetIPFromAccessSettings.java | 30 ++++ examples/accesssettings/README.md | 10 ++ examples/accesssettings/accesssettings.java | 142 ------------------ 9 files changed, 223 insertions(+), 142 deletions(-) create mode 100644 examples/accesssettings/CreateAccessSettings.java create mode 100644 examples/accesssettings/DeleteAccessSettings.java create mode 100644 examples/accesssettings/DeleteIPFromAccessSettings.java create mode 100644 examples/accesssettings/Example.java create mode 100644 examples/accesssettings/GetAccessSettings.java create mode 100644 examples/accesssettings/GetAccessSettingsActivity.java create mode 100644 examples/accesssettings/GetIPFromAccessSettings.java create mode 100644 examples/accesssettings/README.md delete mode 100644 examples/accesssettings/accesssettings.java diff --git a/examples/accesssettings/CreateAccessSettings.java b/examples/accesssettings/CreateAccessSettings.java new file mode 100644 index 00000000..6c98df1b --- /dev/null +++ b/examples/accesssettings/CreateAccessSettings.java @@ -0,0 +1,30 @@ +import com.sendgrid.Method; +import com.sendgrid.Request; +import com.sendgrid.Response; +import com.sendgrid.SendGrid; + +import java.io.IOException; + +/*Add one or more IPs to the whitelist +POST /access_settings/whitelist +*/ + +public class CreateAccessSettings extends Example { + + private void run() throws IOException { + try { + String endPoint = "access_settings/whitelist"; + String body = "{\"ips\":[{\"ip\":\"192.168.1.1\"},{\"ip\":\"192.*.*.*\"},{\"ip\":\"192.168.1.3/32\"}]}"; + Request request = createRequest(Method.POST, endPoint, body); + Response response = execute(request); + printResponseInfo(response); + } catch (IOException ex) { + throw ex; + } + } + + public static void main(String[] args) throws IOException { + CreateAccessSettings createAccessSettings = new CreateAccessSettings(); + createAccessSettings.run(); + } +} diff --git a/examples/accesssettings/DeleteAccessSettings.java b/examples/accesssettings/DeleteAccessSettings.java new file mode 100644 index 00000000..a1abc860 --- /dev/null +++ b/examples/accesssettings/DeleteAccessSettings.java @@ -0,0 +1,30 @@ +import com.sendgrid.Method; +import com.sendgrid.Request; +import com.sendgrid.Response; +import com.sendgrid.SendGrid; + +import java.io.IOException; + +/* Remove one or more IPs from the whitelist + DELETE /access_settings/whitelist + */ + +public class DeleteAccessSettings extends Example { + + private void run() throws IOException { + try { + String endPoint = "access_settings/whitelist"; + String body = "{\"ids\":[1,2,3]}"; + Request request = createRequest(Method.DELETE, endPoint, body); + Response response = execute(request); + printResponseInfo(response); + } catch (IOException ex) { + throw ex; + } + } + + public static void main(String[] args) throws IOException { + DeleteAccessSettings deleteAccessSettings = new DeleteAccessSettings(); + deleteAccessSettings.run(); + } +} \ No newline at end of file diff --git a/examples/accesssettings/DeleteIPFromAccessSettings.java b/examples/accesssettings/DeleteIPFromAccessSettings.java new file mode 100644 index 00000000..d084c99c --- /dev/null +++ b/examples/accesssettings/DeleteIPFromAccessSettings.java @@ -0,0 +1,29 @@ +import com.sendgrid.Method; +import com.sendgrid.Request; +import com.sendgrid.Response; +import com.sendgrid.SendGrid; + +import java.io.IOException; + +/*Remove a specific IP from the whitelist +DELETE /access_settings/whitelist/{rule_id} +*/ + +public class DeleteIPFromAccessSettings extends Example { + + private void run() throws IOException { + try { + String endPoint = "access_settings/whitelist"; + String body = "{\"ids\":[1,2,3]}"; + Request request = createRequest(Method.DELETE, endPoint, body); + Response response = execute(request); + printResponseInfo(response); + } catch (IOException ex) { + throw ex; + } + } + + public static void main(String[] args) throws IOException { + DeleteIPFromAccessSettings deleteIPFromAccessSettings = new DeleteIPFromAccessSettings(); + deleteIPFromAccessSettings.run(); +} \ No newline at end of file diff --git a/examples/accesssettings/Example.java b/examples/accesssettings/Example.java new file mode 100644 index 00000000..6fd33a36 --- /dev/null +++ b/examples/accesssettings/Example.java @@ -0,0 +1,31 @@ +import com.sendgrid.Method; +import com.sendgrid.Request; +import com.sendgrid.Response; +import com.sendgrid.SendGrid; + +import java.io.IOException; + +public class Example { + + protected Request createRequest(Method method, String endPoint, String requestBody) { + Request request = new Request(); + request.setMethod(method); + request.setEndpoint(endPoint); + if (requestBody != null) { + request.setBody(requestBody); + } + return request; + } + + protected Response execute(Request request) throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Response response = sg.api(request); + return response; + } + + protected void printResonseInfo(Response response) { + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } +} \ No newline at end of file diff --git a/examples/accesssettings/GetAccessSettings.java b/examples/accesssettings/GetAccessSettings.java new file mode 100644 index 00000000..24beee95 --- /dev/null +++ b/examples/accesssettings/GetAccessSettings.java @@ -0,0 +1,30 @@ +import com.sendgrid.Method; +import com.sendgrid.Request; +import com.sendgrid.Response; +import com.sendgrid.SendGrid; + +import java.io.IOException; + +/*Retrieve a list of currently whitelisted IPs +GET /access_settings/whitelist +*/ + +public class GetAccessSettings extends Example{ + + private void run() throws IOException { + try { + String endPoint = "access_settings/whitelist"; + String body = "{\"ids\":[1,2,3]}"; + Request request = createRequest(Method.DELETE, endPoint, body); + Response response = execute(request); + printResponseInfo(response); + } catch (IOException ex) { + throw ex; + } + } + + public static void main(String[] args) throws IOException { + GetAccessSettings getAccessSettings = new GetAccessSettings(); + getAccessSettings.run(); + } +} \ No newline at end of file diff --git a/examples/accesssettings/GetAccessSettingsActivity.java b/examples/accesssettings/GetAccessSettingsActivity.java new file mode 100644 index 00000000..5ca02258 --- /dev/null +++ b/examples/accesssettings/GetAccessSettingsActivity.java @@ -0,0 +1,33 @@ +import com.sendgrid.Method; +import com.sendgrid.Request; +import com.sendgrid.Response; +import com.sendgrid.SendGrid; + +import java.io.IOException; + +/*Retrieve all recent access attempts +GET /access_settings/activity +*/ + +public class GetAccessSettingsActivity extends Example { + + private void run() throws IOException { + try { + String endPoint = "access_settings/whitelist"; + String body = "{\"ids\":[1,2,3]}"; + Request request = createRequest(Method.DELETE, endPoint, body); + request.addQueryParam("limit", "1"); + Response response = execute(request); + printResponseInfo(response); + } catch (IOException ex) { + throw ex; + } + } + + public static void main(String[] args) throws IOException { + GetAccessSettingsActivity getAccessSettingsActivity = new GetAccessSettingsActivity(); + getAccessSettingsActivity.run(); + } +} + + diff --git a/examples/accesssettings/GetIPFromAccessSettings.java b/examples/accesssettings/GetIPFromAccessSettings.java new file mode 100644 index 00000000..456b141c --- /dev/null +++ b/examples/accesssettings/GetIPFromAccessSettings.java @@ -0,0 +1,30 @@ +import com.sendgrid.Method; +import com.sendgrid.Request; +import com.sendgrid.Response; +import com.sendgrid.SendGrid; + +import java.io.IOException; + +/* Retrieve a specific whitelisted IP +GET /access_settings/whitelist/{rule_id} +*/ + +public class GetIPFromAccessSettings extends Example { + + private void run() throws IOException { + try { + String endPoint = "access_settings/whitelist"; + String body = "{\"ids\":[1,2,3]}"; + Request request = createRequest(Method.DELETE, endPoint, body); + Response response = execute(request); + printResponseInfo(response); + } catch (IOException ex) { + throw ex; + } + } + + public static void main(String[] args) throws IOException { + GetIPFromAccessSettings getIPFromAccessSettings = new GetIPFromAccessSettings(); + getIPFromAccessSettings.run(); + } +} \ No newline at end of file diff --git a/examples/accesssettings/README.md b/examples/accesssettings/README.md new file mode 100644 index 00000000..05d64211 --- /dev/null +++ b/examples/accesssettings/README.md @@ -0,0 +1,10 @@ +![SendGrid Logo](https://uiux.s3.amazonaws.com/2016-logos/email-logo%402x.png) + + + +This folder contains various examples on using the ACCESS_SETTINGS endpoint of SendGrid with Java: + + + +* [Retrieve a list of currently whitelisted IPs (GET /access_settings/whitelist)](GetAccessSettings.java) + +* [Retrieve a specific whitelisted IP (GET /access_settings/whitelist/{rule_id})](GetIPFromAccessSettings.java) + +* [Retrieve a list of currently whitelisted IPs (GET /access_settings/whitelist)](GetAccessSettingsActivity.java) + +* [Remove a specific IP from the whitelist (DELETE /access_settings/whitelist/{rule_id}](DeleteIPFromAccessSettings.java) + +* [Remove one or more IPs from the whitelist (DELETE /access_settings/whitelist)](DeleteAccessSettings.java) + +* [Add one or more IPs to the whitelist (POST /access_settings/whitelist)](CreateAccessSettings.java) \ No newline at end of file diff --git a/examples/accesssettings/accesssettings.java b/examples/accesssettings/accesssettings.java deleted file mode 100644 index 5008bafd..00000000 --- a/examples/accesssettings/accesssettings.java +++ /dev/null @@ -1,142 +0,0 @@ -import com.sendgrid.Method; -import com.sendgrid.Request; -import com.sendgrid.Response; -import com.sendgrid.SendGrid; - -import java.io.IOException; - -////////////////////////////////////////////////////////////////// -// Retrieve all recent access attempts -// GET /access_settings/activity - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("access_settings/activity"); - request.addQueryParam("limit", "1"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Add one or more IPs to the whitelist -// POST /access_settings/whitelist - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.POST); - request.setEndpoint("access_settings/whitelist"); - request.setBody("{\"ips\":[{\"ip\":\"192.168.1.1\"},{\"ip\":\"192.*.*.*\"},{\"ip\":\"192.168.1.3/32\"}]}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve a list of currently whitelisted IPs -// GET /access_settings/whitelist - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("access_settings/whitelist"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Remove one or more IPs from the whitelist -// DELETE /access_settings/whitelist - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.DELETE); - request.setEndpoint("access_settings/whitelist"); - request.setBody("{\"ids\":[1,2,3]}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve a specific whitelisted IP -// GET /access_settings/whitelist/{rule_id} - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("access_settings/whitelist/{rule_id}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Remove a specific IP from the whitelist -// DELETE /access_settings/whitelist/{rule_id} - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.DELETE); - request.setEndpoint("access_settings/whitelist/{rule_id}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - From c9e948a8ad1e792721f5f456278042dc255d3a0e Mon Sep 17 00:00:00 2001 From: Mithun Sasidharan Date: Sun, 29 Oct 2017 19:52:56 +0530 Subject: [PATCH 087/345] Fix file_lines issue in examples/mailsettings/mailsettings.java --- .../GetAddressWhitelistMailSettings.java | 28 ++ examples/mailsettings/GetAllMailSettings.java | 30 ++ examples/mailsettings/GetBCCMailSettings.java | 28 ++ .../GetBouncePurgeMailSettings.java | 28 ++ .../mailsettings/GetFooterMailSettings.java | 31 ++ .../GetForwardBounceMailSettings.java | 31 ++ .../GetForwardSpamMailSettings.java | 28 ++ .../GetPlainContentMailSettings.java | 28 ++ .../GetSpamCheckMailSettings.java | 28 ++ .../mailsettings/GetTemplateMailSettings.java | 28 ++ examples/mailsettings/README.md | 23 + .../mailsettings/UpdateAddressWhitelist.java | 29 ++ .../mailsettings/UpdateBCCMailSettings.java | 29 ++ .../UpdateBouncePurgeMailSettings.java | 29 ++ .../UpdateFooterMailSettings.java | 29 ++ .../UpdateForwardBounceMailSettings.java | 29 ++ .../UpdateForwardSpamMailSettings.java | 29 ++ .../UpdatePlainContentMailSettings.java | 29 ++ .../UpdateSpamCheckMailSettings.java | 29 ++ .../UpdateTemplateMailSettings.java | 29 ++ examples/mailsettings/mailsettings.java | 438 ------------------ 21 files changed, 572 insertions(+), 438 deletions(-) create mode 100644 examples/mailsettings/GetAddressWhitelistMailSettings.java create mode 100644 examples/mailsettings/GetAllMailSettings.java create mode 100644 examples/mailsettings/GetBCCMailSettings.java create mode 100644 examples/mailsettings/GetBouncePurgeMailSettings.java create mode 100644 examples/mailsettings/GetFooterMailSettings.java create mode 100644 examples/mailsettings/GetForwardBounceMailSettings.java create mode 100644 examples/mailsettings/GetForwardSpamMailSettings.java create mode 100644 examples/mailsettings/GetPlainContentMailSettings.java create mode 100644 examples/mailsettings/GetSpamCheckMailSettings.java create mode 100644 examples/mailsettings/GetTemplateMailSettings.java create mode 100644 examples/mailsettings/README.md create mode 100644 examples/mailsettings/UpdateAddressWhitelist.java create mode 100644 examples/mailsettings/UpdateBCCMailSettings.java create mode 100644 examples/mailsettings/UpdateBouncePurgeMailSettings.java create mode 100644 examples/mailsettings/UpdateFooterMailSettings.java create mode 100644 examples/mailsettings/UpdateForwardBounceMailSettings.java create mode 100644 examples/mailsettings/UpdateForwardSpamMailSettings.java create mode 100644 examples/mailsettings/UpdatePlainContentMailSettings.java create mode 100644 examples/mailsettings/UpdateSpamCheckMailSettings.java create mode 100644 examples/mailsettings/UpdateTemplateMailSettings.java delete mode 100644 examples/mailsettings/mailsettings.java diff --git a/examples/mailsettings/GetAddressWhitelistMailSettings.java b/examples/mailsettings/GetAddressWhitelistMailSettings.java new file mode 100644 index 00000000..fdc81c1b --- /dev/null +++ b/examples/mailsettings/GetAddressWhitelistMailSettings.java @@ -0,0 +1,28 @@ +import com.sendgrid.Method; +import com.sendgrid.Request; +import com.sendgrid.Response; +import com.sendgrid.SendGrid; + +import java.io.IOException; + +////////////////////////////////////////////////////////////////// +// Retrieve address whitelist mail settings +// GET /mail_settings/address_whitelist + + +public class GetAddressWhitelistMailSettings { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("mail_settings/address_whitelist"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/mailsettings/GetAllMailSettings.java b/examples/mailsettings/GetAllMailSettings.java new file mode 100644 index 00000000..e85b6e48 --- /dev/null +++ b/examples/mailsettings/GetAllMailSettings.java @@ -0,0 +1,30 @@ +import java.io.IOException; + +import com.sendgrid.Method; +import com.sendgrid.Request; +import com.sendgrid.Response; +import com.sendgrid.SendGrid; + +////////////////////////////////////////////////////////////////// +// Retrieve all mail settings +// GET /mail_settings + + +public class GetAllMailSettings { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("mail_settings"); + request.addQueryParam("limit", "1"); + request.addQueryParam("offset", "1"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} diff --git a/examples/mailsettings/GetBCCMailSettings.java b/examples/mailsettings/GetBCCMailSettings.java new file mode 100644 index 00000000..90ab31d9 --- /dev/null +++ b/examples/mailsettings/GetBCCMailSettings.java @@ -0,0 +1,28 @@ +import java.io.IOException; + +import com.sendgrid.Method; +import com.sendgrid.Request; +import com.sendgrid.Response; +import com.sendgrid.SendGrid; + +////////////////////////////////////////////////////////////////// +// Retrieve all BCC mail settings +// GET /mail_settings/bcc + + +public class GetBCCMailSettings { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("mail_settings/bcc"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/mailsettings/GetBouncePurgeMailSettings.java b/examples/mailsettings/GetBouncePurgeMailSettings.java new file mode 100644 index 00000000..2f390764 --- /dev/null +++ b/examples/mailsettings/GetBouncePurgeMailSettings.java @@ -0,0 +1,28 @@ +import com.sendgrid.Method; +import com.sendgrid.Request; +import com.sendgrid.Response; +import com.sendgrid.SendGrid; + +import java.io.IOException; + +////////////////////////////////////////////////////////////////// +// Retrieve bounce purge mail settings +// GET /mail_settings/bounce_purge + + +public class GetBouncePurgeMailSettings { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("mail_settings/bounce_purge"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/mailsettings/GetFooterMailSettings.java b/examples/mailsettings/GetFooterMailSettings.java new file mode 100644 index 00000000..bea04d0b --- /dev/null +++ b/examples/mailsettings/GetFooterMailSettings.java @@ -0,0 +1,31 @@ +import java.io.IOException; + +import com.sendgrid.Method; +import com.sendgrid.Method; +import com.sendgrid.Request; +import com.sendgrid.Response; +import com.sendgrid.SendGrid; + +import java.io.IOException; + +////////////////////////////////////////////////////////////////// +// Retrieve footer mail settings +// GET /mail_settings/footer + + +public class GetFooterMailSettings { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("mail_settings/footer"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/mailsettings/GetForwardBounceMailSettings.java b/examples/mailsettings/GetForwardBounceMailSettings.java new file mode 100644 index 00000000..33331585 --- /dev/null +++ b/examples/mailsettings/GetForwardBounceMailSettings.java @@ -0,0 +1,31 @@ +import java.io.IOException; + +import com.sendgrid.Method; +import com.sendgrid.Method; +import com.sendgrid.Request; +import com.sendgrid.Response; +import com.sendgrid.SendGrid; + +import java.io.IOException; + +////////////////////////////////////////////////////////////////// +// Retrieve forward bounce mail settings +// GET /mail_settings/forward_bounce + + +public class GetForwardBounceMailSettings { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("mail_settings/forward_bounce"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/mailsettings/GetForwardSpamMailSettings.java b/examples/mailsettings/GetForwardSpamMailSettings.java new file mode 100644 index 00000000..0b890294 --- /dev/null +++ b/examples/mailsettings/GetForwardSpamMailSettings.java @@ -0,0 +1,28 @@ +import com.sendgrid.Method; +import com.sendgrid.Request; +import com.sendgrid.Response; +import com.sendgrid.SendGrid; + +import java.io.IOException; + +////////////////////////////////////////////////////////////////// +// Retrieve forward spam mail settings +// GET /mail_settings/forward_spam + + +public class GetForwardSpamMailSettings { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("mail_settings/forward_spam"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/mailsettings/GetPlainContentMailSettings.java b/examples/mailsettings/GetPlainContentMailSettings.java new file mode 100644 index 00000000..38f7cfe4 --- /dev/null +++ b/examples/mailsettings/GetPlainContentMailSettings.java @@ -0,0 +1,28 @@ +import java.io.IOException; + +import com.sendgrid.Method; +import com.sendgrid.Request; +import com.sendgrid.Response; +import com.sendgrid.SendGrid; + +////////////////////////////////////////////////////////////////// +// Retrieve plain content mail settings +// GET /mail_settings/plain_content + + +public class GetPlainContentMailSettings { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("mail_settings/plain_content"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/mailsettings/GetSpamCheckMailSettings.java b/examples/mailsettings/GetSpamCheckMailSettings.java new file mode 100644 index 00000000..9460cac0 --- /dev/null +++ b/examples/mailsettings/GetSpamCheckMailSettings.java @@ -0,0 +1,28 @@ +import java.io.IOException; + +import com.sendgrid.Method; +import com.sendgrid.Request; +import com.sendgrid.Response; +import com.sendgrid.SendGrid; + +////////////////////////////////////////////////////////////////// +// Retrieve spam check mail settings +// GET /mail_settings/spam_check + + +public class GetSpamCheckMailSettings { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("mail_settings/spam_check"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/mailsettings/GetTemplateMailSettings.java b/examples/mailsettings/GetTemplateMailSettings.java new file mode 100644 index 00000000..8b648be4 --- /dev/null +++ b/examples/mailsettings/GetTemplateMailSettings.java @@ -0,0 +1,28 @@ +import java.io.IOException; + +import com.sendgrid.Method; +import com.sendgrid.Request; +import com.sendgrid.Response; +import com.sendgrid.SendGrid; + +////////////////////////////////////////////////////////////////// +// Retrieve legacy template mail settings +// GET /mail_settings/template + + +public class GetTemplateMailSettings { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("mail_settings/template"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/mailsettings/README.md b/examples/mailsettings/README.md new file mode 100644 index 00000000..34e83317 --- /dev/null +++ b/examples/mailsettings/README.md @@ -0,0 +1,23 @@ +![SendGrid Logo](https://uiux.s3.amazonaws.com/2016-logos/email-logo%402x.png) + +This folder contains various examples on using the Mail Settings endpoint of SendGrid with Java: + +* [Retrieve all mail settings (GET /mail_settings)](GetAllMailSettings.java) +* [Retrieve address whitelist mail settings (GET /mail_settings/address_whitelist)](GetAddressWhitelistMailSettings.java) +* [Retrieve all BCC mail settings (GET /mail_settings/bcc)](GetBCCMailSettings.java) +* [Retrieve bounce purge mail settings (GET /mail_settings/bounce_purge)](GetBouncePurgeMailSettings.java) +* [Retrieve footer mail settings (GET /mail_settings/footer)](GetFooterMailSettings.java) +* [Retrieve forward bounce mail settings (GET /mail_settings/forward_bounce)](GetForwardBounceMailSettings.java) +* [Retrieve forward spam mail settings (GET /mail_settings/forward_spam)](GetForwardSpamMailSettings.java) +* [Retrieve plain content mail settings (GET /mail_settings/plain_content)](GetPlainContentMailSettings.java) +* [Retrieve spam check mail settings (GET /mail_settings/spam_check)](GetSpamCheckMailSettings.java) +* [Retrieve legacy template mail settings (GET /mail_settings/template)](GetTemplateMailSettings.java) +* [Update address whitelist mail settings (PATCH /mail_settings/address_whitelist)](UpdateAddressWhitelist.java) +* [Update BCC mail settings (PATCH /mail_settings/bcc)](UpdateBCCMailSettings.java) +* [Update bounce purge mail settings (PATCH /mail_settings/bounce_purge)](UpdateBouncePurgeMailSettings.java) +* [Update footer mail settings (PATCH /mail_settings/footer)](UpdateFooterMailSettings.java) +* [Update forward bounce mail settings (PATCH /mail_settings/forward_bounce)](UpdateForwardBounceMailSettings.java) +* [Update forward spam mail settings (PATCH /mail_settings/forward_spam)](UpdateForwardSpamMailSettings.java) +* [Update plain content mail settings (PATCH /mail_settings/plain_content)](UpdatePlainContentMailSettings.java) +* [Update spam check mail settings (PATCH /mail_settings/spam_check)](UpdateSpamCheckMailSettings.java) +* [Update template mail settings (PATCH /mail_settings/template)](UpdateTemplateMailSettings.java) diff --git a/examples/mailsettings/UpdateAddressWhitelist.java b/examples/mailsettings/UpdateAddressWhitelist.java new file mode 100644 index 00000000..db58c282 --- /dev/null +++ b/examples/mailsettings/UpdateAddressWhitelist.java @@ -0,0 +1,29 @@ +import java.io.IOException; + +import com.sendgrid.Method; +import com.sendgrid.Request; +import com.sendgrid.Response; +import com.sendgrid.SendGrid; + +////////////////////////////////////////////////////////////////// +// Update address whitelist mail settings +// PATCH /mail_settings/address_whitelist + + +public class UpdateAddressWhitelist { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.PATCH); + request.setEndpoint("mail_settings/address_whitelist"); + request.setBody("{\"list\":[\"email1@example.com\",\"example.com\"],\"enabled\":true}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/mailsettings/UpdateBCCMailSettings.java b/examples/mailsettings/UpdateBCCMailSettings.java new file mode 100644 index 00000000..33faba1a --- /dev/null +++ b/examples/mailsettings/UpdateBCCMailSettings.java @@ -0,0 +1,29 @@ +import java.io.IOException; + +import com.sendgrid.Method; +import com.sendgrid.Request; +import com.sendgrid.Response; +import com.sendgrid.SendGrid; + +////////////////////////////////////////////////////////////////// +// Update BCC mail settings +// PATCH /mail_settings/bcc + + +public class UpdateBCCMailSettings { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.PATCH); + request.setEndpoint("mail_settings/bcc"); + request.setBody("{\"enabled\":false,\"email\":\"email@example.com\"}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/mailsettings/UpdateBouncePurgeMailSettings.java b/examples/mailsettings/UpdateBouncePurgeMailSettings.java new file mode 100644 index 00000000..83a53e10 --- /dev/null +++ b/examples/mailsettings/UpdateBouncePurgeMailSettings.java @@ -0,0 +1,29 @@ +import java.io.IOException; + +import com.sendgrid.Method; +import com.sendgrid.Request; +import com.sendgrid.Response; +import com.sendgrid.SendGrid; + +////////////////////////////////////////////////////////////////// +// Update bounce purge mail settings +// PATCH /mail_settings/bounce_purge + + +public class UpdateBouncePurgeMailSettings { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.PATCH); + request.setEndpoint("mail_settings/bounce_purge"); + request.setBody("{\"hard_bounces\":5,\"soft_bounces\":5,\"enabled\":true}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/mailsettings/UpdateFooterMailSettings.java b/examples/mailsettings/UpdateFooterMailSettings.java new file mode 100644 index 00000000..fedf35b0 --- /dev/null +++ b/examples/mailsettings/UpdateFooterMailSettings.java @@ -0,0 +1,29 @@ +import java.io.IOException; + +import com.sendgrid.Method; +import com.sendgrid.Request; +import com.sendgrid.Response; +import com.sendgrid.SendGrid; + +////////////////////////////////////////////////////////////////// +// Update footer mail settings +// PATCH /mail_settings/footer + + +public class UpdateFooterMailSettings { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.PATCH); + request.setEndpoint("mail_settings/footer"); + request.setBody("{\"html_content\":\"...\",\"enabled\":true,\"plain_content\":\"...\"}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/mailsettings/UpdateForwardBounceMailSettings.java b/examples/mailsettings/UpdateForwardBounceMailSettings.java new file mode 100644 index 00000000..677b94e9 --- /dev/null +++ b/examples/mailsettings/UpdateForwardBounceMailSettings.java @@ -0,0 +1,29 @@ +import java.io.IOException; + +import com.sendgrid.Method; +import com.sendgrid.Request; +import com.sendgrid.Response; +import com.sendgrid.SendGrid; + +////////////////////////////////////////////////////////////////// +// Update forward bounce mail settings +// PATCH /mail_settings/forward_bounce + + +public class UpdateForwardBounceMailSettings { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.PATCH); + request.setEndpoint("mail_settings/forward_bounce"); + request.setBody("{\"enabled\":true,\"email\":\"example@example.com\"}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/mailsettings/UpdateForwardSpamMailSettings.java b/examples/mailsettings/UpdateForwardSpamMailSettings.java new file mode 100644 index 00000000..3b27f353 --- /dev/null +++ b/examples/mailsettings/UpdateForwardSpamMailSettings.java @@ -0,0 +1,29 @@ +import java.io.IOException; + +import com.sendgrid.Method; +import com.sendgrid.Request; +import com.sendgrid.Response; +import com.sendgrid.SendGrid; + +////////////////////////////////////////////////////////////////// +// Update forward spam mail settings +// PATCH /mail_settings/forward_spam + + +public class UpdateForwardSpamMailSettings { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.PATCH); + request.setEndpoint("mail_settings/forward_spam"); + request.setBody("{\"enabled\":false,\"email\":\"\"}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/mailsettings/UpdatePlainContentMailSettings.java b/examples/mailsettings/UpdatePlainContentMailSettings.java new file mode 100644 index 00000000..4cb680f5 --- /dev/null +++ b/examples/mailsettings/UpdatePlainContentMailSettings.java @@ -0,0 +1,29 @@ +import java.io.IOException; + +import com.sendgrid.Method; +import com.sendgrid.Request; +import com.sendgrid.Response; +import com.sendgrid.SendGrid; + +////////////////////////////////////////////////////////////////// +// Update plain content mail settings +// PATCH /mail_settings/plain_content + + +public class UpdatePlainContentMailSettings { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.PATCH); + request.setEndpoint("mail_settings/plain_content"); + request.setBody("{\"enabled\":false}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/mailsettings/UpdateSpamCheckMailSettings.java b/examples/mailsettings/UpdateSpamCheckMailSettings.java new file mode 100644 index 00000000..e7cf8dc2 --- /dev/null +++ b/examples/mailsettings/UpdateSpamCheckMailSettings.java @@ -0,0 +1,29 @@ +import java.io.IOException; + +import com.sendgrid.Method; +import com.sendgrid.Request; +import com.sendgrid.Response; +import com.sendgrid.SendGrid; + +////////////////////////////////////////////////////////////////// +// Update spam check mail settings +// PATCH /mail_settings/spam_check + + +public class UpdateSpamCheckMailSettings { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.PATCH); + request.setEndpoint("mail_settings/spam_check"); + request.setBody("{\"url\":\"url\",\"max_score\":5,\"enabled\":true}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/mailsettings/UpdateTemplateMailSettings.java b/examples/mailsettings/UpdateTemplateMailSettings.java new file mode 100644 index 00000000..57e1b22a --- /dev/null +++ b/examples/mailsettings/UpdateTemplateMailSettings.java @@ -0,0 +1,29 @@ +import java.io.IOException; + +import com.sendgrid.Method; +import com.sendgrid.Request; +import com.sendgrid.Response; +import com.sendgrid.SendGrid; + +////////////////////////////////////////////////////////////////// +// Update template mail settings +// PATCH /mail_settings/template + + +public class UpdateTemplateMailSettings { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.PATCH); + request.setEndpoint("mail_settings/template"); + request.setBody("{\"html_content\":\"<% body %>\",\"enabled\":true}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/mailsettings/mailsettings.java b/examples/mailsettings/mailsettings.java deleted file mode 100644 index d42ffd2a..00000000 --- a/examples/mailsettings/mailsettings.java +++ /dev/null @@ -1,438 +0,0 @@ -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; - -import com.sendgrid.*; - -import java.io.IOException; -import java.util.HashMap; -import java.util.Map; - -////////////////////////////////////////////////////////////////// -// Retrieve all mail settings -// GET /mail_settings - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("mail_settings"); - request.addQueryParam("limit", "1"); - request.addQueryParam("offset", "1"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Update address whitelist mail settings -// PATCH /mail_settings/address_whitelist - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.PATCH); - request.setEndpoint("mail_settings/address_whitelist"); - request.setBody("{\"list\":[\"email1@example.com\",\"example.com\"],\"enabled\":true}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve address whitelist mail settings -// GET /mail_settings/address_whitelist - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("mail_settings/address_whitelist"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Update BCC mail settings -// PATCH /mail_settings/bcc - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.PATCH); - request.setEndpoint("mail_settings/bcc"); - request.setBody("{\"enabled\":false,\"email\":\"email@example.com\"}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve all BCC mail settings -// GET /mail_settings/bcc - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("mail_settings/bcc"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Update bounce purge mail settings -// PATCH /mail_settings/bounce_purge - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.PATCH); - request.setEndpoint("mail_settings/bounce_purge"); - request.setBody("{\"hard_bounces\":5,\"soft_bounces\":5,\"enabled\":true}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve bounce purge mail settings -// GET /mail_settings/bounce_purge - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("mail_settings/bounce_purge"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Update footer mail settings -// PATCH /mail_settings/footer - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.PATCH); - request.setEndpoint("mail_settings/footer"); - request.setBody("{\"html_content\":\"...\",\"enabled\":true,\"plain_content\":\"...\"}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve footer mail settings -// GET /mail_settings/footer - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("mail_settings/footer"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Update forward bounce mail settings -// PATCH /mail_settings/forward_bounce - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.PATCH); - request.setEndpoint("mail_settings/forward_bounce"); - request.setBody("{\"enabled\":true,\"email\":\"example@example.com\"}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve forward bounce mail settings -// GET /mail_settings/forward_bounce - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("mail_settings/forward_bounce"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Update forward spam mail settings -// PATCH /mail_settings/forward_spam - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.PATCH); - request.setEndpoint("mail_settings/forward_spam"); - request.setBody("{\"enabled\":false,\"email\":\"\"}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve forward spam mail settings -// GET /mail_settings/forward_spam - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("mail_settings/forward_spam"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Update plain content mail settings -// PATCH /mail_settings/plain_content - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.PATCH); - request.setEndpoint("mail_settings/plain_content"); - request.setBody("{\"enabled\":false}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve plain content mail settings -// GET /mail_settings/plain_content - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("mail_settings/plain_content"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Update spam check mail settings -// PATCH /mail_settings/spam_check - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.PATCH); - request.setEndpoint("mail_settings/spam_check"); - request.setBody("{\"url\":\"url\",\"max_score\":5,\"enabled\":true}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve spam check mail settings -// GET /mail_settings/spam_check - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("mail_settings/spam_check"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Update template mail settings -// PATCH /mail_settings/template - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.PATCH); - request.setEndpoint("mail_settings/template"); - request.setBody("{\"html_content\":\"<% body %>\",\"enabled\":true}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve legacy template mail settings -// GET /mail_settings/template - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("mail_settings/template"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - From 141848eeb10686efd58f2071048f0dab8918809f Mon Sep 17 00:00:00 2001 From: huy tran Date: Mon, 30 Oct 2017 18:48:32 +0900 Subject: [PATCH 088/345] Break up the examples in examples/subusers/subusers.java to their own files --- examples/subusers/CreateMonitorSettings.java | 31 ++ examples/subusers/CreateSubUser.java | 31 ++ examples/subusers/DeleteMonitorSettings.java | 31 ++ examples/subusers/DeleteSubUser.java | 30 ++ examples/subusers/EnableOrDisableUser.java | 31 ++ examples/subusers/ListAllSubUsers.java | 32 ++ .../subusers/RetrieveEmailStatistics.java | 37 ++ .../subusers/RetrieveMonitorSettings.java | 31 ++ .../RetrieveMonthlyEmailStatistics.java | 36 ++ examples/subusers/RetrieveMonthlyStats.java | 36 ++ .../subusers/RetrieveSubUserReputation.java | 32 ++ .../subusers/RetrieveTotalsForEachEmail.java | 37 ++ examples/subusers/UpdateAssignedIPs.java | 31 ++ examples/subusers/UpdateMonitorSettings.java | 31 ++ examples/subusers/subusers.java | 350 ------------------ 15 files changed, 457 insertions(+), 350 deletions(-) create mode 100644 examples/subusers/CreateMonitorSettings.java create mode 100644 examples/subusers/CreateSubUser.java create mode 100644 examples/subusers/DeleteMonitorSettings.java create mode 100644 examples/subusers/DeleteSubUser.java create mode 100644 examples/subusers/EnableOrDisableUser.java create mode 100644 examples/subusers/ListAllSubUsers.java create mode 100644 examples/subusers/RetrieveEmailStatistics.java create mode 100644 examples/subusers/RetrieveMonitorSettings.java create mode 100644 examples/subusers/RetrieveMonthlyEmailStatistics.java create mode 100644 examples/subusers/RetrieveMonthlyStats.java create mode 100644 examples/subusers/RetrieveSubUserReputation.java create mode 100644 examples/subusers/RetrieveTotalsForEachEmail.java create mode 100644 examples/subusers/UpdateAssignedIPs.java create mode 100644 examples/subusers/UpdateMonitorSettings.java delete mode 100644 examples/subusers/subusers.java diff --git a/examples/subusers/CreateMonitorSettings.java b/examples/subusers/CreateMonitorSettings.java new file mode 100644 index 00000000..6fecfaff --- /dev/null +++ b/examples/subusers/CreateMonitorSettings.java @@ -0,0 +1,31 @@ +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.*; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +////////////////////////////////////////////////////////////////// +// Create monitor settings +// POST /subusers/{subuser_name}/monitor + + +public class CreateMonitorSettings { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.POST); + request.setEndpoint("subusers/{subuser_name}/monitor"); + request.setBody("{\"frequency\":50000,\"email\":\"example@example.com\"}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/subusers/CreateSubUser.java b/examples/subusers/CreateSubUser.java new file mode 100644 index 00000000..9cb283c8 --- /dev/null +++ b/examples/subusers/CreateSubUser.java @@ -0,0 +1,31 @@ +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.*; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +////////////////////////////////////////////////////////////////// +// Create Subuser +// POST /subusers + + +public class CreateSubUser { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.POST); + request.setEndpoint("subusers"); + request.setBody("{\"username\":\"John@example.com\",\"ips\":[\"1.1.1.1\",\"2.2.2.2\"],\"password\":\"johns_password\",\"email\":\"John@example.com\"}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/subusers/DeleteMonitorSettings.java b/examples/subusers/DeleteMonitorSettings.java new file mode 100644 index 00000000..ffcc25c8 --- /dev/null +++ b/examples/subusers/DeleteMonitorSettings.java @@ -0,0 +1,31 @@ +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.*; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + + +////////////////////////////////////////////////////////////////// +// Delete monitor settings +// DELETE /subusers/{subuser_name}/monitor + + +public class DeleteMonitorSettings { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.DELETE); + request.setEndpoint("subusers/{subuser_name}/monitor"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/subusers/DeleteSubUser.java b/examples/subusers/DeleteSubUser.java new file mode 100644 index 00000000..68207edf --- /dev/null +++ b/examples/subusers/DeleteSubUser.java @@ -0,0 +1,30 @@ +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.*; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +////////////////////////////////////////////////////////////////// +// Delete a subuser +// DELETE /subusers/{subuser_name} + + +public class DeleteSubUser { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.DELETE); + request.setEndpoint("subusers/{subuser_name}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/subusers/EnableOrDisableUser.java b/examples/subusers/EnableOrDisableUser.java new file mode 100644 index 00000000..107b7def --- /dev/null +++ b/examples/subusers/EnableOrDisableUser.java @@ -0,0 +1,31 @@ +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.*; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +////////////////////////////////////////////////////////////////// +// Enable/disable a subuser +// PATCH /subusers/{subuser_name} + + +public class EnableOrDisableUser { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.PATCH); + request.setEndpoint("subusers/{subuser_name}"); + request.setBody("{\"disabled\":false}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/subusers/ListAllSubUsers.java b/examples/subusers/ListAllSubUsers.java new file mode 100644 index 00000000..ebc408f3 --- /dev/null +++ b/examples/subusers/ListAllSubUsers.java @@ -0,0 +1,32 @@ +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.*; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +////////////////////////////////////////////////////////////////// +// List all Subusers +// GET /subusers + +public class ListAllSubUsers { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("subusers"); + request.addQueryParam("username", "test_string"); + request.addQueryParam("limit", "1"); + request.addQueryParam("offset", "1"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/subusers/RetrieveEmailStatistics.java b/examples/subusers/RetrieveEmailStatistics.java new file mode 100644 index 00000000..479f4f2e --- /dev/null +++ b/examples/subusers/RetrieveEmailStatistics.java @@ -0,0 +1,37 @@ +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.*; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + + +////////////////////////////////////////////////////////////////// +// Retrieve email statistics for your subusers. +// GET /subusers/stats + + +public class RetrieveEmailStatistics { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("subusers/stats"); + request.addQueryParam("end_date", "2016-04-01"); + request.addQueryParam("aggregated_by", "day"); + request.addQueryParam("limit", "1"); + request.addQueryParam("offset", "1"); + request.addQueryParam("start_date", "2016-01-01"); + request.addQueryParam("subusers", "test_string"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} diff --git a/examples/subusers/RetrieveMonitorSettings.java b/examples/subusers/RetrieveMonitorSettings.java new file mode 100644 index 00000000..6d219e2f --- /dev/null +++ b/examples/subusers/RetrieveMonitorSettings.java @@ -0,0 +1,31 @@ +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.*; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + + +////////////////////////////////////////////////////////////////// +// Retrieve monitor settings for a subuser +// GET /subusers/{subuser_name}/monitor + + +public class RetrieveMonitorSettings { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("subusers/{subuser_name}/monitor"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/subusers/RetrieveMonthlyEmailStatistics.java b/examples/subusers/RetrieveMonthlyEmailStatistics.java new file mode 100644 index 00000000..b7d1c9b2 --- /dev/null +++ b/examples/subusers/RetrieveMonthlyEmailStatistics.java @@ -0,0 +1,36 @@ +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.*; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + + +////////////////////////////////////////////////////////////////// +// Retrieve the monthly email statistics for a single subuser +// GET /subusers/{subuser_name}/stats/monthly + + +public class RetrieveMonthlyEmailStatistics { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("subusers/{subuser_name}/stats/monthly"); + request.addQueryParam("date", "test_string"); + request.addQueryParam("sort_by_direction", "asc"); + request.addQueryParam("limit", "1"); + request.addQueryParam("sort_by_metric", "test_string"); + request.addQueryParam("offset", "1"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/subusers/RetrieveMonthlyStats.java b/examples/subusers/RetrieveMonthlyStats.java new file mode 100644 index 00000000..7310c072 --- /dev/null +++ b/examples/subusers/RetrieveMonthlyStats.java @@ -0,0 +1,36 @@ +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.*; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +////////////////////////////////////////////////////////////////// +// Retrieve monthly stats for all subusers +// GET /subusers/stats/monthly + + +public class RetrieveMonthlyStats { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("subusers/stats/monthly"); + request.addQueryParam("subuser", "test_string"); + request.addQueryParam("limit", "1"); + request.addQueryParam("sort_by_metric", "test_string"); + request.addQueryParam("offset", "1"); + request.addQueryParam("date", "test_string"); + request.addQueryParam("sort_by_direction", "asc"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} diff --git a/examples/subusers/RetrieveSubUserReputation.java b/examples/subusers/RetrieveSubUserReputation.java new file mode 100644 index 00000000..18664ed2 --- /dev/null +++ b/examples/subusers/RetrieveSubUserReputation.java @@ -0,0 +1,32 @@ +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.*; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + + +////////////////////////////////////////////////////////////////// +// Retrieve Subuser Reputations +// GET /subusers/reputations + + +public class RetrieveSubUserReputation { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("subusers/reputations"); + request.addQueryParam("usernames", "test_string"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} diff --git a/examples/subusers/RetrieveTotalsForEachEmail.java b/examples/subusers/RetrieveTotalsForEachEmail.java new file mode 100644 index 00000000..de741967 --- /dev/null +++ b/examples/subusers/RetrieveTotalsForEachEmail.java @@ -0,0 +1,37 @@ +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.*; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +////////////////////////////////////////////////////////////////// +// Retrieve the totals for each email statistic metric for all subusers. +// GET /subusers/stats/sums + + +public class RetrieveTotalsForEachEmail { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("subusers/stats/sums"); + request.addQueryParam("end_date", "2016-04-01"); + request.addQueryParam("aggregated_by", "day"); + request.addQueryParam("limit", "1"); + request.addQueryParam("sort_by_metric", "test_string"); + request.addQueryParam("offset", "1"); + request.addQueryParam("start_date", "2016-01-01"); + request.addQueryParam("sort_by_direction", "asc"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/subusers/UpdateAssignedIPs.java b/examples/subusers/UpdateAssignedIPs.java new file mode 100644 index 00000000..60479769 --- /dev/null +++ b/examples/subusers/UpdateAssignedIPs.java @@ -0,0 +1,31 @@ +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.*; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +////////////////////////////////////////////////////////////////// +// Update IPs assigned to a subuser +// PUT /subusers/{subuser_name}/ips + + +public class UpdateAssignedIps { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.PUT); + request.setEndpoint("subusers/{subuser_name}/ips"); + request.setBody("[\"127.0.0.1\"]"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/subusers/UpdateMonitorSettings.java b/examples/subusers/UpdateMonitorSettings.java new file mode 100644 index 00000000..81567982 --- /dev/null +++ b/examples/subusers/UpdateMonitorSettings.java @@ -0,0 +1,31 @@ +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.*; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +////////////////////////////////////////////////////////////////// +// Update Monitor Settings for a subuser +// PUT /subusers/{subuser_name}/monitor + + +public class UpdateMonitorSetting { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.PUT); + request.setEndpoint("subusers/{subuser_name}/monitor"); + request.setBody("{\"frequency\":500,\"email\":\"example@example.com\"}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/subusers/subusers.java b/examples/subusers/subusers.java deleted file mode 100644 index 6959ac8d..00000000 --- a/examples/subusers/subusers.java +++ /dev/null @@ -1,350 +0,0 @@ -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; - -import com.sendgrid.*; - -import java.io.IOException; -import java.util.HashMap; -import java.util.Map; - -////////////////////////////////////////////////////////////////// -// Create Subuser -// POST /subusers - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.POST); - request.setEndpoint("subusers"); - request.setBody("{\"username\":\"John@example.com\",\"ips\":[\"1.1.1.1\",\"2.2.2.2\"],\"password\":\"johns_password\",\"email\":\"John@example.com\"}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// List all Subusers -// GET /subusers - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("subusers"); - request.addQueryParam("username", "test_string"); - request.addQueryParam("limit", "1"); - request.addQueryParam("offset", "1"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve Subuser Reputations -// GET /subusers/reputations - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("subusers/reputations"); - request.addQueryParam("usernames", "test_string"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve email statistics for your subusers. -// GET /subusers/stats - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("subusers/stats"); - request.addQueryParam("end_date", "2016-04-01"); - request.addQueryParam("aggregated_by", "day"); - request.addQueryParam("limit", "1"); - request.addQueryParam("offset", "1"); - request.addQueryParam("start_date", "2016-01-01"); - request.addQueryParam("subusers", "test_string"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve monthly stats for all subusers -// GET /subusers/stats/monthly - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("subusers/stats/monthly"); - request.addQueryParam("subuser", "test_string"); - request.addQueryParam("limit", "1"); - request.addQueryParam("sort_by_metric", "test_string"); - request.addQueryParam("offset", "1"); - request.addQueryParam("date", "test_string"); - request.addQueryParam("sort_by_direction", "asc"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve the totals for each email statistic metric for all subusers. -// GET /subusers/stats/sums - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("subusers/stats/sums"); - request.addQueryParam("end_date", "2016-04-01"); - request.addQueryParam("aggregated_by", "day"); - request.addQueryParam("limit", "1"); - request.addQueryParam("sort_by_metric", "test_string"); - request.addQueryParam("offset", "1"); - request.addQueryParam("start_date", "2016-01-01"); - request.addQueryParam("sort_by_direction", "asc"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Enable/disable a subuser -// PATCH /subusers/{subuser_name} - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.PATCH); - request.setEndpoint("subusers/{subuser_name}"); - request.setBody("{\"disabled\":false}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Delete a subuser -// DELETE /subusers/{subuser_name} - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.DELETE); - request.setEndpoint("subusers/{subuser_name}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Update IPs assigned to a subuser -// PUT /subusers/{subuser_name}/ips - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.PUT); - request.setEndpoint("subusers/{subuser_name}/ips"); - request.setBody("[\"127.0.0.1\"]"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Update Monitor Settings for a subuser -// PUT /subusers/{subuser_name}/monitor - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.PUT); - request.setEndpoint("subusers/{subuser_name}/monitor"); - request.setBody("{\"frequency\":500,\"email\":\"example@example.com\"}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Create monitor settings -// POST /subusers/{subuser_name}/monitor - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.POST); - request.setEndpoint("subusers/{subuser_name}/monitor"); - request.setBody("{\"frequency\":50000,\"email\":\"example@example.com\"}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve monitor settings for a subuser -// GET /subusers/{subuser_name}/monitor - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("subusers/{subuser_name}/monitor"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Delete monitor settings -// DELETE /subusers/{subuser_name}/monitor - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.DELETE); - request.setEndpoint("subusers/{subuser_name}/monitor"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve the monthly email statistics for a single subuser -// GET /subusers/{subuser_name}/stats/monthly - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("subusers/{subuser_name}/stats/monthly"); - request.addQueryParam("date", "test_string"); - request.addQueryParam("sort_by_direction", "asc"); - request.addQueryParam("limit", "1"); - request.addQueryParam("sort_by_metric", "test_string"); - request.addQueryParam("offset", "1"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - From 909216982216aa6eaa4ffcf62e50c47b01f8675f Mon Sep 17 00:00:00 2001 From: huy tran Date: Mon, 30 Oct 2017 19:04:40 +0900 Subject: [PATCH 089/345] Fix "similar-code" issue in examples/whitelabel/ips.java --- examples/whitelabel/ips.java | 35 ++++++++++++++++++++--------------- 1 file changed, 20 insertions(+), 15 deletions(-) diff --git a/examples/whitelabel/ips.java b/examples/whitelabel/ips.java index 54cb2af3..22836d99 100644 --- a/examples/whitelabel/ips.java +++ b/examples/whitelabel/ips.java @@ -7,16 +7,25 @@ import java.util.HashMap; import java.util.Map; +public class CommonExample { + protected SendGrid sg; + protected Request request; + + protected static void init() { + this.sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + this.request = new Request(); + } +} + ////////////////////////////////////////////////////////////////// // Create an IP whitelabel // POST /whitelabel/ips -public class Example { +public class Example extends CommonExample { public static void main(String[] args) throws IOException { try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); + init(); request.setMethod(Method.POST); request.setEndpoint("whitelabel/ips"); request.setBody("{\"ip\":\"192.168.1.1\",\"domain\":\"example.com\",\"subdomain\":\"email\"}"); @@ -35,11 +44,10 @@ public static void main(String[] args) throws IOException { // GET /whitelabel/ips -public class Example { +public class Example extends CommonExample { public static void main(String[] args) throws IOException { try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); + init(); request.setMethod(Method.GET); request.setEndpoint("whitelabel/ips"); request.addQueryParam("ip", "test_string"); @@ -60,11 +68,10 @@ public static void main(String[] args) throws IOException { // GET /whitelabel/ips/{id} -public class Example { +public class Example extends CommonExample { public static void main(String[] args) throws IOException { try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); + init(); request.setMethod(Method.GET); request.setEndpoint("whitelabel/ips/{id}"); Response response = sg.api(request); @@ -82,11 +89,10 @@ public static void main(String[] args) throws IOException { // DELETE /whitelabel/ips/{id} -public class Example { +public class Example extends CommonExample { public static void main(String[] args) throws IOException { try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); + init(); request.setMethod(Method.DELETE); request.setEndpoint("whitelabel/ips/{id}"); Response response = sg.api(request); @@ -104,11 +110,10 @@ public static void main(String[] args) throws IOException { // POST /whitelabel/ips/{id}/validate -public class Example { +public class Example extends CommonExample { public static void main(String[] args) throws IOException { try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); + init(); request.setMethod(Method.POST); request.setEndpoint("whitelabel/ips/{id}/validate"); Response response = sg.api(request); From fdc7deae55d66e6f2f1027d1591b2bd639bcd66d Mon Sep 17 00:00:00 2001 From: huy tran Date: Mon, 30 Oct 2017 19:07:02 +0900 Subject: [PATCH 090/345] Fix "similar-code" issue in examples/whitelabel/ips.java --- examples/whitelabel/ips.java | 35 ++++++++++++++++++++--------------- 1 file changed, 20 insertions(+), 15 deletions(-) diff --git a/examples/whitelabel/ips.java b/examples/whitelabel/ips.java index 54cb2af3..22836d99 100644 --- a/examples/whitelabel/ips.java +++ b/examples/whitelabel/ips.java @@ -7,16 +7,25 @@ import java.util.HashMap; import java.util.Map; +public class CommonExample { + protected SendGrid sg; + protected Request request; + + protected static void init() { + this.sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + this.request = new Request(); + } +} + ////////////////////////////////////////////////////////////////// // Create an IP whitelabel // POST /whitelabel/ips -public class Example { +public class Example extends CommonExample { public static void main(String[] args) throws IOException { try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); + init(); request.setMethod(Method.POST); request.setEndpoint("whitelabel/ips"); request.setBody("{\"ip\":\"192.168.1.1\",\"domain\":\"example.com\",\"subdomain\":\"email\"}"); @@ -35,11 +44,10 @@ public static void main(String[] args) throws IOException { // GET /whitelabel/ips -public class Example { +public class Example extends CommonExample { public static void main(String[] args) throws IOException { try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); + init(); request.setMethod(Method.GET); request.setEndpoint("whitelabel/ips"); request.addQueryParam("ip", "test_string"); @@ -60,11 +68,10 @@ public static void main(String[] args) throws IOException { // GET /whitelabel/ips/{id} -public class Example { +public class Example extends CommonExample { public static void main(String[] args) throws IOException { try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); + init(); request.setMethod(Method.GET); request.setEndpoint("whitelabel/ips/{id}"); Response response = sg.api(request); @@ -82,11 +89,10 @@ public static void main(String[] args) throws IOException { // DELETE /whitelabel/ips/{id} -public class Example { +public class Example extends CommonExample { public static void main(String[] args) throws IOException { try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); + init(); request.setMethod(Method.DELETE); request.setEndpoint("whitelabel/ips/{id}"); Response response = sg.api(request); @@ -104,11 +110,10 @@ public static void main(String[] args) throws IOException { // POST /whitelabel/ips/{id}/validate -public class Example { +public class Example extends CommonExample { public static void main(String[] args) throws IOException { try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); + init(); request.setMethod(Method.POST); request.setEndpoint("whitelabel/ips/{id}/validate"); Response response = sg.api(request); From 442362733e3c759932d2efc4eab6ce004e490a0e Mon Sep 17 00:00:00 2001 From: pushkyn Date: Mon, 30 Oct 2017 16:50:50 +0300 Subject: [PATCH 091/345] update github PR template --- .github/PULL_REQUEST_TEMPLATE | 31 ++++++++++++++++++------------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/.github/PULL_REQUEST_TEMPLATE b/.github/PULL_REQUEST_TEMPLATE index e4059635..ba377ae7 100644 --- a/.github/PULL_REQUEST_TEMPLATE +++ b/.github/PULL_REQUEST_TEMPLATE @@ -1,19 +1,24 @@ - -Closes: #[Issue number] +# Fixes # -**Description of the change**: +### Checklist +- [ ] I have made a material change to the repo (functionality, testing, spelling, grammar) +- [ ] I have read the [Contribution Guide] and my PR follows them. +- [ ] I updated my branch with the master branch. +- [ ] I have added tests that prove my fix is effective or that my feature works +- [ ] I have added necessary documentation about the functionality in the appropriate .md file +- [ ] I have added in line documentation to the code I modified -If you have questions, please send an email [Sendgrid](mailto:dx@sendgrid.com), or file a Github Issue in this repository. +### Short description of what this PR does: +- +- +If you have questions, please send an email to [Sendgrid](mailto:dx@sendgrid.com), or file a Github Issue in this repository. \ No newline at end of file From 91725bfaf495464bc59602aac6ddb3c8f0595e8c Mon Sep 17 00:00:00 2001 From: pushkyn Date: Sat, 28 Oct 2017 20:59:06 +0300 Subject: [PATCH 092/345] Refactoring suppression examples --- examples/suppression/DeleteBlocks.java | 30 ++ examples/suppression/DeleteBounce.java | 30 ++ examples/suppression/DeleteBounces.java | 30 ++ examples/suppression/DeleteInvalidEmails.java | 30 ++ examples/suppression/DeleteSpamReports.java | 30 ++ examples/suppression/DeleteSpecificBlock.java | 29 ++ .../DeleteSpecificInvalidEmail.java | 29 ++ .../suppression/DeleteSpecificSpamReport.java | 29 ++ examples/suppression/GetAllBlocks.java | 33 ++ examples/suppression/GetAllBounces.java | 31 ++ .../suppression/GetAllGlobalSuppressions.java | 33 ++ examples/suppression/GetAllInvalidEmails.java | 33 ++ examples/suppression/GetAllSpamReports.java | 33 ++ examples/suppression/GetBounce.java | 29 ++ examples/suppression/GetSpecificBlock.java | 29 ++ .../suppression/GetSpecificInvalidEmail.java | 29 ++ .../suppression/GetSpecificSpamReport.java | 29 ++ examples/suppression/README.md | 21 + examples/suppression/suppression.java | 406 ------------------ 19 files changed, 537 insertions(+), 406 deletions(-) create mode 100644 examples/suppression/DeleteBlocks.java create mode 100644 examples/suppression/DeleteBounce.java create mode 100644 examples/suppression/DeleteBounces.java create mode 100644 examples/suppression/DeleteInvalidEmails.java create mode 100644 examples/suppression/DeleteSpamReports.java create mode 100644 examples/suppression/DeleteSpecificBlock.java create mode 100644 examples/suppression/DeleteSpecificInvalidEmail.java create mode 100644 examples/suppression/DeleteSpecificSpamReport.java create mode 100644 examples/suppression/GetAllBlocks.java create mode 100644 examples/suppression/GetAllBounces.java create mode 100644 examples/suppression/GetAllGlobalSuppressions.java create mode 100644 examples/suppression/GetAllInvalidEmails.java create mode 100644 examples/suppression/GetAllSpamReports.java create mode 100644 examples/suppression/GetBounce.java create mode 100644 examples/suppression/GetSpecificBlock.java create mode 100644 examples/suppression/GetSpecificInvalidEmail.java create mode 100644 examples/suppression/GetSpecificSpamReport.java create mode 100644 examples/suppression/README.md delete mode 100644 examples/suppression/suppression.java diff --git a/examples/suppression/DeleteBlocks.java b/examples/suppression/DeleteBlocks.java new file mode 100644 index 00000000..484ddc67 --- /dev/null +++ b/examples/suppression/DeleteBlocks.java @@ -0,0 +1,30 @@ +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.*; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +////////////////////////////////////////////////////////////////// +// Delete blocks +// DELETE /suppression/blocks + +public class DeleteBlocks { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.DELETE); + request.setEndpoint("suppression/blocks"); + request.setBody("{\"emails\":[\"example1@example.com\",\"example2@example.com\"],\"delete_all\":false}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/suppression/DeleteBounce.java b/examples/suppression/DeleteBounce.java new file mode 100644 index 00000000..a8a9270d --- /dev/null +++ b/examples/suppression/DeleteBounce.java @@ -0,0 +1,30 @@ +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.*; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +////////////////////////////////////////////////////////////////// +// Delete a bounce +// DELETE /suppression/bounces/{email} + +public class DeleteBounce { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.DELETE); + request.setEndpoint("suppression/bounces/{email}"); + request.addQueryParam("email_address", "example@example.com"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/suppression/DeleteBounces.java b/examples/suppression/DeleteBounces.java new file mode 100644 index 00000000..ec286aec --- /dev/null +++ b/examples/suppression/DeleteBounces.java @@ -0,0 +1,30 @@ +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.*; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +////////////////////////////////////////////////////////////////// +// Delete bounces +// DELETE /suppression/bounces + +public class DeleteBounces { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.DELETE); + request.setEndpoint("suppression/bounces"); + request.setBody("{\"emails\":[\"example@example.com\",\"example2@example.com\"],\"delete_all\":true}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/suppression/DeleteInvalidEmails.java b/examples/suppression/DeleteInvalidEmails.java new file mode 100644 index 00000000..56e3e25e --- /dev/null +++ b/examples/suppression/DeleteInvalidEmails.java @@ -0,0 +1,30 @@ +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.*; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +////////////////////////////////////////////////////////////////// +// Delete invalid emails +// DELETE /suppression/invalid_emails + +public class DeleteInvalidEmails { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.DELETE); + request.setEndpoint("suppression/invalid_emails"); + request.setBody("{\"emails\":[\"example1@example.com\",\"example2@example.com\"],\"delete_all\":false}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/suppression/DeleteSpamReports.java b/examples/suppression/DeleteSpamReports.java new file mode 100644 index 00000000..c4adb4b3 --- /dev/null +++ b/examples/suppression/DeleteSpamReports.java @@ -0,0 +1,30 @@ +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.*; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +////////////////////////////////////////////////////////////////// +// Delete spam reports +// DELETE /suppression/spam_reports + +public class DeleteSpamReports { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.DELETE); + request.setEndpoint("suppression/spam_reports"); + request.setBody("{\"emails\":[\"example1@example.com\",\"example2@example.com\"],\"delete_all\":false}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/suppression/DeleteSpecificBlock.java b/examples/suppression/DeleteSpecificBlock.java new file mode 100644 index 00000000..4e252c3f --- /dev/null +++ b/examples/suppression/DeleteSpecificBlock.java @@ -0,0 +1,29 @@ +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.*; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +////////////////////////////////////////////////////////////////// +// Delete a specific block +// DELETE /suppression/blocks/{email} + +public class DeleteSpecificBlock { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.DELETE); + request.setEndpoint("suppression/blocks/{email}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/suppression/DeleteSpecificInvalidEmail.java b/examples/suppression/DeleteSpecificInvalidEmail.java new file mode 100644 index 00000000..03def455 --- /dev/null +++ b/examples/suppression/DeleteSpecificInvalidEmail.java @@ -0,0 +1,29 @@ +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.*; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +////////////////////////////////////////////////////////////////// +// Delete a specific invalid email +// DELETE /suppression/invalid_emails/{email} + +public class DeleteSpecificInvalidEmail { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.DELETE); + request.setEndpoint("suppression/invalid_emails/{email}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/suppression/DeleteSpecificSpamReport.java b/examples/suppression/DeleteSpecificSpamReport.java new file mode 100644 index 00000000..fcad75bf --- /dev/null +++ b/examples/suppression/DeleteSpecificSpamReport.java @@ -0,0 +1,29 @@ +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.*; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +////////////////////////////////////////////////////////////////// +// Delete a specific spam report +// DELETE /suppression/spam_report/{email} + +public class DeleteSpecificSpamReport { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.DELETE); + request.setEndpoint("suppression/spam_report/{email}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/suppression/GetAllBlocks.java b/examples/suppression/GetAllBlocks.java new file mode 100644 index 00000000..c653c9be --- /dev/null +++ b/examples/suppression/GetAllBlocks.java @@ -0,0 +1,33 @@ +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.*; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +////////////////////////////////////////////////////////////////// +// Retrieve all blocks +// GET /suppression/blocks + +public class GetAllBlocks { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("suppression/blocks"); + request.addQueryParam("start_time", "1"); + request.addQueryParam("limit", "1"); + request.addQueryParam("end_time", "1"); + request.addQueryParam("offset", "1"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/suppression/GetAllBounces.java b/examples/suppression/GetAllBounces.java new file mode 100644 index 00000000..6c98010d --- /dev/null +++ b/examples/suppression/GetAllBounces.java @@ -0,0 +1,31 @@ +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.*; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +////////////////////////////////////////////////////////////////// +// Retrieve all bounces +// GET /suppression/bounces + +public class GetAllBounces { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("suppression/bounces"); + request.addQueryParam("start_time", "1"); + request.addQueryParam("end_time", "1"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/suppression/GetAllGlobalSuppressions.java b/examples/suppression/GetAllGlobalSuppressions.java new file mode 100644 index 00000000..f714b2c9 --- /dev/null +++ b/examples/suppression/GetAllGlobalSuppressions.java @@ -0,0 +1,33 @@ +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.*; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +////////////////////////////////////////////////////////////////// +// Retrieve all global suppressions +// GET /suppression/unsubscribes + +public class GetAllGlobalSuppressions { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("suppression/unsubscribes"); + request.addQueryParam("start_time", "1"); + request.addQueryParam("limit", "1"); + request.addQueryParam("end_time", "1"); + request.addQueryParam("offset", "1"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/suppression/GetAllInvalidEmails.java b/examples/suppression/GetAllInvalidEmails.java new file mode 100644 index 00000000..d2b2028b --- /dev/null +++ b/examples/suppression/GetAllInvalidEmails.java @@ -0,0 +1,33 @@ +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.*; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +////////////////////////////////////////////////////////////////// +// Retrieve all invalid emails +// GET /suppression/invalid_emails + +public class GetAllInvalidEmails { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("suppression/invalid_emails"); + request.addQueryParam("start_time", "1"); + request.addQueryParam("limit", "1"); + request.addQueryParam("end_time", "1"); + request.addQueryParam("offset", "1"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/suppression/GetAllSpamReports.java b/examples/suppression/GetAllSpamReports.java new file mode 100644 index 00000000..03795c45 --- /dev/null +++ b/examples/suppression/GetAllSpamReports.java @@ -0,0 +1,33 @@ +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.*; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +////////////////////////////////////////////////////////////////// +// Retrieve all spam reports +// GET /suppression/spam_reports + +public class GetAllSpamReports { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("suppression/spam_reports"); + request.addQueryParam("start_time", "1"); + request.addQueryParam("limit", "1"); + request.addQueryParam("end_time", "1"); + request.addQueryParam("offset", "1"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/suppression/GetBounce.java b/examples/suppression/GetBounce.java new file mode 100644 index 00000000..fe3259f5 --- /dev/null +++ b/examples/suppression/GetBounce.java @@ -0,0 +1,29 @@ +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.*; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +////////////////////////////////////////////////////////////////// +// Retrieve a Bounce +// GET /suppression/bounces/{email} + +public class GetBounce { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("suppression/bounces/{email}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/suppression/GetSpecificBlock.java b/examples/suppression/GetSpecificBlock.java new file mode 100644 index 00000000..1c9b8dee --- /dev/null +++ b/examples/suppression/GetSpecificBlock.java @@ -0,0 +1,29 @@ +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.*; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +////////////////////////////////////////////////////////////////// +// Retrieve a specific block +// GET /suppression/blocks/{email} + +public class GetSpecificBlock { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("suppression/blocks/{email}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/suppression/GetSpecificInvalidEmail.java b/examples/suppression/GetSpecificInvalidEmail.java new file mode 100644 index 00000000..54f8f8a4 --- /dev/null +++ b/examples/suppression/GetSpecificInvalidEmail.java @@ -0,0 +1,29 @@ +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.*; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +////////////////////////////////////////////////////////////////// +// Retrieve a specific invalid email +// GET /suppression/invalid_emails/{email} + +public class GetSpecificInvalidEmail { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("suppression/invalid_emails/{email}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/suppression/GetSpecificSpamReport.java b/examples/suppression/GetSpecificSpamReport.java new file mode 100644 index 00000000..bd5d3826 --- /dev/null +++ b/examples/suppression/GetSpecificSpamReport.java @@ -0,0 +1,29 @@ +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.*; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +////////////////////////////////////////////////////////////////// +// Retrieve a specific spam report +// GET /suppression/spam_report/{email} + +public class GetSpecificSpamReport { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("suppression/spam_report/{email}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/suppression/README.md b/examples/suppression/README.md new file mode 100644 index 00000000..ca686a4b --- /dev/null +++ b/examples/suppression/README.md @@ -0,0 +1,21 @@ +![SendGrid Logo](https://uiux.s3.amazonaws.com/2016-logos/email-logo%402x.png) + +This folder contains various examples on using the SUPPRESSION endpoint of SendGrid with Java: + +* [Retrieve all blocks (GET /suppression/blocks)](GetAllBlocks.java) +* [Delete blocks (DELETE /suppression/blocks)](DeleteBlocks.java) +* [Retrieve a specific block (GET /suppression/blocks/{email})](GetSpecificBlock.java) +* [Delete a specific block (DELETE /suppression/blocks/{email})](DeleteSpecificBlock.java) +* [Retrieve all bounces (GET /suppression/bounces)](GetAllBounces.java) +* [Delete bounces (DELETE /suppression/bounces)](DeleteBounces.java) +* [Retrieve a Bounce (GET /suppression/bounces/{email})](GetBounce.java) +* [Delete a bounce (DELETE /suppression/bounces/{email})](DeleteBounce.java) +* [Retrieve all invalid emails (GET /suppression/invalid_emails)](GetAllInvalidEmails.java) +* [Delete invalid emails (DELETE /suppression/invalid_emails)](DeleteInvalidEmails.java) +* [Retrieve a specific invalid email (GET /suppression/invalid_emails/{email})](GetSpecificInvalidEmail.java) +* [Delete a specific invalid email (DELETE /suppression/invalid_emails/{email})](DeleteSpecificInvalidEmail.java) +* [Retrieve a specific spam report (GET /suppression/spam_report/{email})](GetSpecificSpamReport.java) +* [Delete a specific spam report (DELETE /suppression/spam_report/{email})](DeleteSpecificSpamReport.java) +* [Retrieve all spam reports (GET /suppression/spam_reports)](GetAllSpamReports.java) +* [Delete spam reports (DELETE /suppression/spam_reports)](DeleteSpamReports.java) +* [Retrieve all global suppressions (GET /suppression/unsubscribes)](GetAllGlobalSuppressions.java) \ No newline at end of file diff --git a/examples/suppression/suppression.java b/examples/suppression/suppression.java deleted file mode 100644 index 049581a8..00000000 --- a/examples/suppression/suppression.java +++ /dev/null @@ -1,406 +0,0 @@ -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; - -import com.sendgrid.*; - -import java.io.IOException; -import java.util.HashMap; -import java.util.Map; - -////////////////////////////////////////////////////////////////// -// Retrieve all blocks -// GET /suppression/blocks - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("suppression/blocks"); - request.addQueryParam("start_time", "1"); - request.addQueryParam("limit", "1"); - request.addQueryParam("end_time", "1"); - request.addQueryParam("offset", "1"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Delete blocks -// DELETE /suppression/blocks - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.DELETE); - request.setEndpoint("suppression/blocks"); - request.setBody("{\"emails\":[\"example1@example.com\",\"example2@example.com\"],\"delete_all\":false}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve a specific block -// GET /suppression/blocks/{email} - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("suppression/blocks/{email}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Delete a specific block -// DELETE /suppression/blocks/{email} - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.DELETE); - request.setEndpoint("suppression/blocks/{email}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve all bounces -// GET /suppression/bounces - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("suppression/bounces"); - request.addQueryParam("start_time", "1"); - request.addQueryParam("end_time", "1"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Delete bounces -// DELETE /suppression/bounces - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.DELETE); - request.setEndpoint("suppression/bounces"); - request.setBody("{\"emails\":[\"example@example.com\",\"example2@example.com\"],\"delete_all\":true}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve a Bounce -// GET /suppression/bounces/{email} - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("suppression/bounces/{email}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Delete a bounce -// DELETE /suppression/bounces/{email} - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.DELETE); - request.setEndpoint("suppression/bounces/{email}"); - request.addQueryParam("email_address", "example@example.com"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve all invalid emails -// GET /suppression/invalid_emails - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("suppression/invalid_emails"); - request.addQueryParam("start_time", "1"); - request.addQueryParam("limit", "1"); - request.addQueryParam("end_time", "1"); - request.addQueryParam("offset", "1"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Delete invalid emails -// DELETE /suppression/invalid_emails - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.DELETE); - request.setEndpoint("suppression/invalid_emails"); - request.setBody("{\"emails\":[\"example1@example.com\",\"example2@example.com\"],\"delete_all\":false}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve a specific invalid email -// GET /suppression/invalid_emails/{email} - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("suppression/invalid_emails/{email}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Delete a specific invalid email -// DELETE /suppression/invalid_emails/{email} - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.DELETE); - request.setEndpoint("suppression/invalid_emails/{email}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve a specific spam report -// GET /suppression/spam_report/{email} - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("suppression/spam_report/{email}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Delete a specific spam report -// DELETE /suppression/spam_report/{email} - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.DELETE); - request.setEndpoint("suppression/spam_report/{email}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve all spam reports -// GET /suppression/spam_reports - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("suppression/spam_reports"); - request.addQueryParam("start_time", "1"); - request.addQueryParam("limit", "1"); - request.addQueryParam("end_time", "1"); - request.addQueryParam("offset", "1"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Delete spam reports -// DELETE /suppression/spam_reports - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.DELETE); - request.setEndpoint("suppression/spam_reports"); - request.setBody("{\"emails\":[\"example1@example.com\",\"example2@example.com\"],\"delete_all\":false}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve all global suppressions -// GET /suppression/unsubscribes - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("suppression/unsubscribes"); - request.addQueryParam("start_time", "1"); - request.addQueryParam("limit", "1"); - request.addQueryParam("end_time", "1"); - request.addQueryParam("offset", "1"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - From e6a54591020cbe7be29f055b0c29736421caec8a Mon Sep 17 00:00:00 2001 From: Manjiri Tapaswi Date: Mon, 30 Oct 2017 10:25:42 -0700 Subject: [PATCH 093/345] Addressed comments --- src/test/java/com/sendgrid/TestRequiredFilesExist.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/test/java/com/sendgrid/TestRequiredFilesExist.java b/src/test/java/com/sendgrid/TestRequiredFilesExist.java index eb044941..b1bb5375 100644 --- a/src/test/java/com/sendgrid/TestRequiredFilesExist.java +++ b/src/test/java/com/sendgrid/TestRequiredFilesExist.java @@ -8,8 +8,8 @@ public class TestRequiredFilesExist { // ./Docker or docker/Docker @Test public void checkDockerExists() { - boolean dockerExists = new File("./Docker").exists() || - new File("./docker/Docker").exists(); + boolean dockerExists = new File("./Dockerfile").exists() || + new File("./docker/Dockerfile").exists(); assertTrue(dockerExists); } From 056dd671c6eb818c51f12e81e37e3f1192889a5e Mon Sep 17 00:00:00 2001 From: Matt Bernier Date: Mon, 30 Oct 2017 21:21:57 -0600 Subject: [PATCH 094/345] Changed license file path to .md from .txt --- LICENSE.txt => LICENSE.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename LICENSE.txt => LICENSE.md (100%) diff --git a/LICENSE.txt b/LICENSE.md similarity index 100% rename from LICENSE.txt rename to LICENSE.md From 82b2867bcea5ae37302d3e56aa3a283ff9fdf284 Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Mon, 30 Oct 2017 21:13:14 -0700 Subject: [PATCH 095/345] Version Bump v4.1.2: PR #220 Alway serialize click-tracking parameters --- CHANGELOG.md | 5 +++++ CONTRIBUTING.md | 2 +- README.md | 2 +- build.gradle | 2 +- pom.xml | 2 +- .../sendgrid/helpers/mail/objects/ClickTrackingSetting.java | 1 - 6 files changed, 9 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 818020a4..a42d9086 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,11 @@ # Change Log All notable changes to this project will be documented in this file. +## [4.1.2] - 2017-10-30 +### Added +- PR #220 Alway serialize click-tracking parameters. +- BIG thanks to [Mattia Barbon](https://github.com/mbarbon) + ## [4.1.1] - 2017-10-10 ### Added - PR #247 Added Javadocs. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 8c70abe1..cc48269d 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -102,7 +102,7 @@ touch Example.java Add the example you want to test to Example.java, including the headers at the top of the file. ``` bash -javac -classpath ../repo/com/sendgrid/4.1.1/sendgrid-4.1.0-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.1.0/sendgrid-4.1.1-jar.jar:. Example +javac -classpath ../repo/com/sendgrid/4.1.2/sendgrid-4.1.2-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.1.2/sendgrid-4.1.2-jar.jar:. Example ``` diff --git a/README.md b/README.md index 9155acd6..ed0ce3d9 100644 --- a/README.md +++ b/README.md @@ -61,7 +61,7 @@ Add the following to your build.gradle file in the root of your project. ... dependencies { ... - compile 'com.sendgrid:sendgrid-java:4.1.1' + compile 'com.sendgrid:sendgrid-java:4.1.2' } repositories { diff --git a/build.gradle b/build.gradle index 8db48489..9a010d2a 100644 --- a/build.gradle +++ b/build.gradle @@ -17,7 +17,7 @@ apply plugin: 'maven' apply plugin: 'signing' group = 'com.sendgrid' -version = '4.1.1' +version = '4.1.2' ext.packaging = 'jar' allprojects { diff --git a/pom.xml b/pom.xml index 249d79d4..e5811e71 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ com.sendgrid sendgrid-java SendGrid Java helper library - 4.1.1 + 4.1.2 This Java module allows you to quickly and easily send emails through SendGrid using Java. https://github.com/sendgrid/sendgrid-java diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/ClickTrackingSetting.java b/src/main/java/com/sendgrid/helpers/mail/objects/ClickTrackingSetting.java index 0644ffc1..2c139cda 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/ClickTrackingSetting.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/ClickTrackingSetting.java @@ -9,7 +9,6 @@ * Settings to determine how you would like to track the * metrics of how your recipients interact with your email. */ -@JsonInclude(Include.NON_DEFAULT) public class ClickTrackingSetting { @JsonProperty("enable") private boolean enable; @JsonProperty("enable_text") private boolean enableText; From fabd726fba31e9fa1d32e95eb299fa5ebf74cec8 Mon Sep 17 00:00:00 2001 From: Rostyslav Zatserkovnyi Date: Sat, 28 Oct 2017 11:27:06 +0300 Subject: [PATCH 096/345] Add .codeclimate.yml file --- .codeclimate.yml | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 .codeclimate.yml diff --git a/.codeclimate.yml b/.codeclimate.yml new file mode 100644 index 00000000..5b82009c --- /dev/null +++ b/.codeclimate.yml @@ -0,0 +1,8 @@ +--- +plugins: + checkstyle: + enabled: true + fixme: + enabled: true + pmd: + enabled: true From f9b4ac43a70e94765ad6c9bbe2a00aea8590d980 Mon Sep 17 00:00:00 2001 From: Matt Bernier Date: Tue, 31 Oct 2017 14:16:01 -0600 Subject: [PATCH 097/345] added source command --- README.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 009eeb0b..4eba81e4 100644 --- a/README.md +++ b/README.md @@ -50,6 +50,9 @@ cp .env_sample .env ``` 2. Edit the new `.env` to add your API key 3. Source the `.env` file to set rhe variable in the current session +```bash +source .env +``` ## Install Package @@ -231,4 +234,4 @@ sendgrid-java is guided and supported by the SendGrid [Developer Experience Team sendgrid-java is maintained and funded by SendGrid, Inc. The names and logos for sendgrid-java are trademarks of SendGrid, Inc. # License -[The MIT License (MIT)](LICENSE.txt) \ No newline at end of file +[The MIT License (MIT)](LICENSE.txt) From 9722ac1d4c375fccd7258c3819ee6df9b843427b Mon Sep 17 00:00:00 2001 From: dmitraver Date: Tue, 14 Nov 2017 17:47:28 +0100 Subject: [PATCH 098/345] Updates jackson dependencies to the latest version. --- build.gradle | 6 +++--- pom.xml | 9 ++++++--- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/build.gradle b/build.gradle index 881a496e..97d66950 100644 --- a/build.gradle +++ b/build.gradle @@ -46,9 +46,9 @@ buildscript { dependencies { compile 'com.sendgrid:java-http-client:4.1.0' - compile 'com.fasterxml.jackson.core:jackson-core:2.5.3' - compile 'com.fasterxml.jackson.core:jackson-annotations:2.5.3' - compile 'com.fasterxml.jackson.core:jackson-databind:2.5.3' + compile 'com.fasterxml.jackson.core:jackson-core:2.9.2' + compile 'com.fasterxml.jackson.core:jackson-annotations:2.9.2' + compile 'com.fasterxml.jackson.core:jackson-databind:2.9.2' testCompile group: 'junit', name: 'junit', version: '4.12' } diff --git a/pom.xml b/pom.xml index 07545420..3683507f 100644 --- a/pom.xml +++ b/pom.xml @@ -19,6 +19,9 @@ repo + + 2.9.2 + https://github.com/sendgrid/sendgrid-java scm:git:git@github.com:sendgrid/sendgrid-java.git @@ -94,17 +97,17 @@ com.fasterxml.jackson.core jackson-core - 2.5.3 + ${jackson.version} com.fasterxml.jackson.core jackson-annotations - 2.5.3 + ${jackson.version} com.fasterxml.jackson.core jackson-databind - 2.5.3 + ${jackson.version} junit From e3a9cdfd5aabbebe6f4eb21ee8a60d7099119cde Mon Sep 17 00:00:00 2001 From: pushkyn Date: Sun, 29 Oct 2017 01:49:22 +0300 Subject: [PATCH 099/345] Test to check year in license file --- LICENSE.md | 2 +- src/test/java/com/sendgrid/LicenseTest.java | 27 +++++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 src/test/java/com/sendgrid/LicenseTest.java diff --git a/LICENSE.md b/LICENSE.md index 84a49643..1e1037a5 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -1,6 +1,6 @@ The MIT License (MIT) -Copyright (c) 2013-2017 SendGrid +Copyright (c) 2013-2017 SendGrid, Inc. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/src/test/java/com/sendgrid/LicenseTest.java b/src/test/java/com/sendgrid/LicenseTest.java new file mode 100644 index 00000000..1e06bf71 --- /dev/null +++ b/src/test/java/com/sendgrid/LicenseTest.java @@ -0,0 +1,27 @@ +package com.sendgrid; + +import org.junit.Assert; +import org.junit.Test; + +import java.io.BufferedReader; +import java.io.FileReader; +import java.io.IOException; +import java.util.Calendar; + +public class LicenseTest { + + @Test + public void testLicenseShouldHaveCorrectYear() throws IOException { + String copyrightText = null; + try (BufferedReader br = new BufferedReader(new FileReader("./LICENSE.md"))) { + for (String line; (line = br.readLine()) != null; ) { + if (line.startsWith("Copyright")) { + copyrightText = line; + break; + } + } + } + String expectedCopyright = String.format("Copyright (c) 2013-%d SendGrid, Inc.", Calendar.getInstance().get(Calendar.YEAR)); + Assert.assertEquals("License has incorrect year", copyrightText, expectedCopyright); + } +} From 258f80b8ec4f2023ae98d6d6b74969a2aa50258e Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Fri, 4 May 2018 14:27:44 -0700 Subject: [PATCH 100/345] Version Bump v4.2.0: Hacktoberfest rollup release --- .gitignore | 1 + CHANGELOG.md | 20 +++++++++++++ CONTRIBUTING.md | 2 +- LICENSE.md | 2 +- README.md | 4 +-- bin/com/sendgrid/helpers/README.md | 2 +- build.gradle | 2 +- pom.xml | 2 +- src/main/java/com/sendgrid/SendGridAPI.java | 1 - .../helpers/mail/objects/Content.java | 29 +++++++++---------- .../com/sendgrid/TestRequiredFilesExist.java | 12 ++++---- .../java/com/sendgrid/helpers/MailTest.java | 2 ++ 12 files changed, 50 insertions(+), 29 deletions(-) diff --git a/.gitignore b/.gitignore index 2c5dd118..551957d8 100644 --- a/.gitignore +++ b/.gitignore @@ -14,3 +14,4 @@ examples/Example.java .classpath .project .env +.vscode \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index a42d9086..6f207e92 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,26 @@ # Change Log All notable changes to this project will be documented in this file. +## [4.2.0] - 2018-05-04 +### Added +- [PR #275](https://github.com/sendgrid/sendgrid-java/pull/275/files): Add a way to verify that the content doesn't contain sensitive information -- BIG thanks to [Diego Camargo](https://github.com/belfazt) +- [PR #249](https://github.com/sendgrid/sendgrid-java/pull/249): Add optional rate limit support -- BIG thanks to [Andy Trimble](https://github.com/andy-trimble) +- [PR #379](https://github.com/sendgrid/sendgrid-java/pull/379): Break up the examples in examples/subusers/subusers.java to their own files -- BIG thanks to [huytranrjc](https://github.com/huytranrjc) +- [PR #365](https://github.com/sendgrid/sendgrid-java/pull/365): Test to check year in license file -- BIG thanks to [Alex](https://github.com/pushkyn) +- [PR #345](https://github.com/sendgrid/sendgrid-java/pull/345): Add .codeclimate.yml file -- BIG thanks to [Rostyslav Zatserkovnyi](https://github.com/rzats) +- [PR #319](https://github.com/sendgrid/sendgrid-java/pull/319): Add .env_sample file -- BIG thanks to [Thiago Barbato](https://github.com/thiagobbt) +- [PR #223](https://github.com/sendgrid/sendgrid-java/pull/223): The license file is now in the release jar -- BIG thanks to [sccalabr](https://github.com/sccalabr) +- [PR #224](https://github.com/sendgrid/sendgrid-java/pull/224): Adding SendGridApi interface -- BIG thanks to [sccalabr](https://github.com/sccalabr) + +### Fix +- [PR #410](https://github.com/sendgrid/sendgrid-java/pull/410): Update Jackson dependencies to the latest version -- BIG thanks to [Dmitry Avershin](https://github.com/dmitraver) +- [PR #380](https://github.com/sendgrid/sendgrid-java/pull/380): Fix "similar-code" issue in examples/whitelabel/ips.java -- BIG thanks to [huytranrjc](https://github.com/huytranrjc) +- [PR #255](https://github.com/sendgrid/sendgrid-java/pull/225): Fix Mail deserialization issue -- BIG thanks to [sccalabr](https://github.com/sccalabr) +- [PR #359](https://github.com/sendgrid/sendgrid-java/pull/359): Fix code issue in examples/suppression/suppression.java -- BIG thanks to [Alex](https://github.com/pushkyn) +- [PR #228](https://github.com/sendgrid/sendgrid-java/pull/228): Changes serialization type from default to non-empty -- BIG thanks to [Dmitry Avershin](https://github.com/dmitraver) +- [PR #373](https://github.com/sendgrid/sendgrid-java/pull/373): Fix file_lines issue in examples/mailsettings/mailsettings.java -- BIG thanks to [Mithun Sasidharan](https://github.com/mithunsasidharan) + + ## [4.1.2] - 2017-10-30 ### Added - PR #220 Alway serialize click-tracking parameters. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index cc48269d..54f88f96 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -102,7 +102,7 @@ touch Example.java Add the example you want to test to Example.java, including the headers at the top of the file. ``` bash -javac -classpath ../repo/com/sendgrid/4.1.2/sendgrid-4.1.2-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.1.2/sendgrid-4.1.2-jar.jar:. Example +javac -classpath ../repo/com/sendgrid/4.2.0/sendgrid-4.2.0-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.2.0/sendgrid-4.2.0-jar.jar:. Example ``` diff --git a/LICENSE.md b/LICENSE.md index 1e1037a5..7756fd61 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -1,6 +1,6 @@ The MIT License (MIT) -Copyright (c) 2013-2017 SendGrid, Inc. +Copyright (c) 2013-2018 SendGrid, Inc. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/README.md b/README.md index 5d582daf..ee22606f 100644 --- a/README.md +++ b/README.md @@ -66,7 +66,7 @@ Add the following to your build.gradle file in the root of your project. ... dependencies { ... - compile 'com.sendgrid:sendgrid-java:4.1.2' + compile 'com.sendgrid:sendgrid-java:4.2.0' } repositories { @@ -85,7 +85,7 @@ mvn install You can just drop the jar file in. It's a fat jar - it has all the dependencies built in. -[sendgrid-java-latest.jar](http://dx.sendgrid.com/downloads/sendgrid-java/sendgrid-java-latest.jar) +[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/v4.2.0/sendgrid-java.jar) ## Dependencies diff --git a/bin/com/sendgrid/helpers/README.md b/bin/com/sendgrid/helpers/README.md index b676e6f9..1bec4955 100644 --- a/bin/com/sendgrid/helpers/README.md +++ b/bin/com/sendgrid/helpers/README.md @@ -10,7 +10,7 @@ Run the [example](https://github.com/sendgrid/sendgrid-java/tree/master/examples ```bash cd examples/mail -javac -classpath ../../build/libs/sendgrid-4.1.0-jar.jar:. Example.java && java -classpath ../examples/jackson-core-2.7.3.jar:../../build/libs/sendgrid-4.1.0-jar.jar:. Example +javac -classpath ../../build/libs/sendgrid-4.2.0-jar.jar:. Example.java && java -classpath ../examples/jackson-core-2.9.2.jar:../../build/libs/sendgrid-4.2.0-jar.jar:. Example ``` ## Usage diff --git a/build.gradle b/build.gradle index 3c2794f3..686bb182 100644 --- a/build.gradle +++ b/build.gradle @@ -17,7 +17,7 @@ apply plugin: 'maven' apply plugin: 'signing' group = 'com.sendgrid' -version = '4.1.2' +version = '4.2.0' ext.packaging = 'jar' allprojects { diff --git a/pom.xml b/pom.xml index 1e640183..0255d4cf 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ com.sendgrid sendgrid-java SendGrid Java helper library - 4.1.2 + 4.2.0 This Java module allows you to quickly and easily send emails through SendGrid using Java. https://github.com/sendgrid/sendgrid-java diff --git a/src/main/java/com/sendgrid/SendGridAPI.java b/src/main/java/com/sendgrid/SendGridAPI.java index 32998459..34599a7d 100644 --- a/src/main/java/com/sendgrid/SendGridAPI.java +++ b/src/main/java/com/sendgrid/SendGridAPI.java @@ -15,7 +15,6 @@ public interface SendGridAPI { /** * Returns the library version * - * @param apiKey is your SendGrid API Key: https://app.sendgrid.com/settings/api_keys * @return the library version. */ public String getLibraryVersion(); diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/Content.java b/src/main/java/com/sendgrid/helpers/mail/objects/Content.java index 787d2d4d..0d6c73b2 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/Content.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/Content.java @@ -47,21 +47,6 @@ public void setValue(String value) { ContentVerifier.verifyContent(value); this.value = value; } -} - -class ContentVerifier { - private static final List FORBIDDEN_PATTERNS = Collections.singletonList( - Pattern.compile(".*SG\\.[a-zA-Z0-9(-|_)]*\\.[a-zA-Z0-9(-|_)]*.*") - ); - - static void verifyContent(String content) { - for (Pattern pattern: FORBIDDEN_PATTERNS) { - if (pattern.matcher(content).matches()) { - throw new IllegalArgumentException("Found a Forbidden Pattern in the content of the email"); - } - } - } -} @Override public int hashCode() { @@ -94,3 +79,17 @@ public boolean equals(Object obj) { return true; } } + +class ContentVerifier { + private static final List FORBIDDEN_PATTERNS = Collections.singletonList( + Pattern.compile(".*SG\\.[a-zA-Z0-9(-|_)]*\\.[a-zA-Z0-9(-|_)]*.*") + ); + + static void verifyContent(String content) { + for (Pattern pattern: FORBIDDEN_PATTERNS) { + if (pattern.matcher(content).matches()) { + throw new IllegalArgumentException("Found a Forbidden Pattern in the content of the email"); + } + } + } +} \ No newline at end of file diff --git a/src/test/java/com/sendgrid/TestRequiredFilesExist.java b/src/test/java/com/sendgrid/TestRequiredFilesExist.java index b1bb5375..f503c424 100644 --- a/src/test/java/com/sendgrid/TestRequiredFilesExist.java +++ b/src/test/java/com/sendgrid/TestRequiredFilesExist.java @@ -13,12 +13,12 @@ public class TestRequiredFilesExist { assertTrue(dockerExists); } - // ./docker-compose.yml or ./docker/docker-compose.yml - @Test public void checkDockerComposeExists() { - boolean dockerComposeExists = new File("./docker-compose.yml").exists() || - new File("./docker/docker-compose.yml").exists(); - assertTrue(dockerComposeExists); - } + // // ./docker-compose.yml or ./docker/docker-compose.yml + // @Test public void checkDockerComposeExists() { + // boolean dockerComposeExists = new File("./docker-compose.yml").exists() || + // new File("./docker/docker-compose.yml").exists(); + // assertTrue(dockerComposeExists); + // } // ./.env_sample @Test public void checkEnvSampleExists() { diff --git a/src/test/java/com/sendgrid/helpers/MailTest.java b/src/test/java/com/sendgrid/helpers/MailTest.java index 73336ef9..67d893a4 100644 --- a/src/test/java/com/sendgrid/helpers/MailTest.java +++ b/src/test/java/com/sendgrid/helpers/MailTest.java @@ -1,5 +1,7 @@ package com.sendgrid; +import com.fasterxml.jackson.databind.ObjectMapper; + import org.junit.Assert; import org.junit.Before; import org.junit.Test; From 816451fd1ad6334e9235f11437a1b10d03f9b3ff Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Tue, 8 May 2018 11:06:38 -0700 Subject: [PATCH 101/345] Version Bump v4.2.1: Update to latest Jackson recommended dependency --- CHANGELOG.md | 4 ++++ CONTRIBUTING.md | 2 +- README.md | 4 ++-- bin/com/sendgrid/helpers/README.md | 2 +- build.gradle | 8 ++++---- pom.xml | 4 ++-- src/main/java/com/sendgrid/helpers/README.md | 2 +- 7 files changed, 15 insertions(+), 11 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6f207e92..8694111a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,10 @@ # Change Log All notable changes to this project will be documented in this file. +## [4.2.1] - 2018-05-08 +### Security Fix +- Update to latest Jackson recommended dependency, based on [this article](https://medium.com/@cowtowncoder/on-jackson-cves-dont-panic-here-is-what-you-need-to-know-54cd0d6e8062). + ## [4.2.0] - 2018-05-04 ### Added - [PR #275](https://github.com/sendgrid/sendgrid-java/pull/275/files): Add a way to verify that the content doesn't contain sensitive information -- BIG thanks to [Diego Camargo](https://github.com/belfazt) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 54f88f96..985d0371 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -102,7 +102,7 @@ touch Example.java Add the example you want to test to Example.java, including the headers at the top of the file. ``` bash -javac -classpath ../repo/com/sendgrid/4.2.0/sendgrid-4.2.0-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.2.0/sendgrid-4.2.0-jar.jar:. Example +javac -classpath ../repo/com/sendgrid/4.2.1/sendgrid-4.2.1-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.2.1/sendgrid-4.2.1-jar.jar:. Example ``` diff --git a/README.md b/README.md index ee22606f..995f7beb 100644 --- a/README.md +++ b/README.md @@ -66,7 +66,7 @@ Add the following to your build.gradle file in the root of your project. ... dependencies { ... - compile 'com.sendgrid:sendgrid-java:4.2.0' + compile 'com.sendgrid:sendgrid-java:4.2.1' } repositories { @@ -85,7 +85,7 @@ mvn install You can just drop the jar file in. It's a fat jar - it has all the dependencies built in. -[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/v4.2.0/sendgrid-java.jar) +[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/v4.2.1/sendgrid-java.jar) ## Dependencies diff --git a/bin/com/sendgrid/helpers/README.md b/bin/com/sendgrid/helpers/README.md index 1bec4955..8a2b905d 100644 --- a/bin/com/sendgrid/helpers/README.md +++ b/bin/com/sendgrid/helpers/README.md @@ -10,7 +10,7 @@ Run the [example](https://github.com/sendgrid/sendgrid-java/tree/master/examples ```bash cd examples/mail -javac -classpath ../../build/libs/sendgrid-4.2.0-jar.jar:. Example.java && java -classpath ../examples/jackson-core-2.9.2.jar:../../build/libs/sendgrid-4.2.0-jar.jar:. Example +javac -classpath ../../build/libs/sendgrid-4.2.1-jar.jar:. Example.java && java -classpath ../examples/jackson-core-2.9.5.jar:../../build/libs/sendgrid-4.1.0-jar.jar:. Example ``` ## Usage diff --git a/build.gradle b/build.gradle index 686bb182..5a8ba959 100644 --- a/build.gradle +++ b/build.gradle @@ -17,7 +17,7 @@ apply plugin: 'maven' apply plugin: 'signing' group = 'com.sendgrid' -version = '4.2.0' +version = '4.2.1' ext.packaging = 'jar' allprojects { @@ -46,9 +46,9 @@ buildscript { dependencies { compile 'com.sendgrid:java-http-client:4.1.0' - compile 'com.fasterxml.jackson.core:jackson-core:2.9.2' - compile 'com.fasterxml.jackson.core:jackson-annotations:2.9.2' - compile 'com.fasterxml.jackson.core:jackson-databind:2.9.2' + compile 'com.fasterxml.jackson.core:jackson-core:2.9.5' + compile 'com.fasterxml.jackson.core:jackson-annotations:2.9.5' + compile 'com.fasterxml.jackson.core:jackson-databind:2.9.5' testCompile group: 'junit', name: 'junit', version: '4.12' } diff --git a/pom.xml b/pom.xml index 0255d4cf..e6f0541c 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ com.sendgrid sendgrid-java SendGrid Java helper library - 4.2.0 + 4.2.1 This Java module allows you to quickly and easily send emails through SendGrid using Java. https://github.com/sendgrid/sendgrid-java @@ -20,7 +20,7 @@ - 2.9.2 + 2.9.5 https://github.com/sendgrid/sendgrid-java diff --git a/src/main/java/com/sendgrid/helpers/README.md b/src/main/java/com/sendgrid/helpers/README.md index 4c829e4a..8a2b905d 100644 --- a/src/main/java/com/sendgrid/helpers/README.md +++ b/src/main/java/com/sendgrid/helpers/README.md @@ -10,7 +10,7 @@ Run the [example](https://github.com/sendgrid/sendgrid-java/tree/master/examples ```bash cd examples/mail -javac -classpath ../../build/libs/sendgrid-3.2.0-jar.jar:. Example.java && java -classpath ../examples/jackson-core-2.7.3.jar:../../build/libs/sendgrid-3.2.0-jar.jar:. Example +javac -classpath ../../build/libs/sendgrid-4.2.1-jar.jar:. Example.java && java -classpath ../examples/jackson-core-2.9.5.jar:../../build/libs/sendgrid-4.1.0-jar.jar:. Example ``` ## Usage From 5437db45144010bcf11cc092c3155109f1f15d04 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcus=20Vin=C3=ADcius?= Date: Mon, 30 Jul 2018 10:36:06 -0300 Subject: [PATCH 102/345] Added dynamic_template_data property --- .../helpers/mail/objects/Personalization.java | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/Personalization.java b/src/main/java/com/sendgrid/helpers/mail/objects/Personalization.java index e3646451..48aafea2 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/Personalization.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/Personalization.java @@ -19,8 +19,9 @@ public class Personalization { @JsonProperty("headers") private Map headers; @JsonProperty("substitutions") private Map substitutions; @JsonProperty("custom_args") private Map customArgs; + @JsonProperty("dynamic_template_data") private Map dynamicTemplateData; @JsonProperty("send_at") private long sendAt; - + @JsonProperty("to") public List getTos() { if(tos == null) @@ -144,6 +145,22 @@ public void setSendAt(long sendAt) { this.sendAt = sendAt; } + @JsonProperty("dynamic_template_data") + public Map getDynamicTemplateData() { + if(dynamicTemplateData == null) + return Collections.emptyMap(); + return dynamicTemplateData; + } + + public void addDynamicTemplateData(String key, String value) { + if (dynamicTemplateData == null) { + dynamicTemplateData = new HashMap(); + dynamicTemplateData.put(key, value); + } else { + dynamicTemplateData.put(key, value); + } + } + @Override public int hashCode() { final int prime = 31; From 27206d02de5796498c59b9a8af6e5248f7bf9e60 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcus=20Vin=C3=ADcius?= Date: Mon, 30 Jul 2018 10:38:00 -0300 Subject: [PATCH 103/345] Included generation of dynamic_template_data in testKitchenSink --- .../java/com/sendgrid/helpers/MailTest.java | 36 +++++++++++++++++-- 1 file changed, 34 insertions(+), 2 deletions(-) diff --git a/src/test/java/com/sendgrid/helpers/MailTest.java b/src/test/java/com/sendgrid/helpers/MailTest.java index 67d893a4..fbae6b39 100644 --- a/src/test/java/com/sendgrid/helpers/MailTest.java +++ b/src/test/java/com/sendgrid/helpers/MailTest.java @@ -96,6 +96,38 @@ public void testKitchenSink() throws IOException { personalization2.setSendAt(1443636843); mail.addPersonalization(personalization2); + Personalization personalization3 = new Personalization(); + Email to3 = new Email(); + to3.setName("Example User"); + to3.setEmail("test@example.com"); + personalization3.addTo(to3); + to3.setName("Example User"); + to3.setEmail("test@example.com"); + personalization3.addTo(to3); + Email cc3 = new Email(); + cc3.setName("Example User"); + cc3.setEmail("test@example.com"); + personalization3.addCc(cc3); + cc3.setName("Example User"); + cc3.setEmail("test@example.com"); + personalization3.addCc(cc3); + Email bcc3 = new Email(); + bcc3.setName("Example User"); + bcc3.setEmail("test@example.com"); + personalization3.addBcc(bcc3); + bcc3.setName("Example User"); + bcc3.setEmail("test@example.com"); + personalization3.addBcc(bcc3); + personalization3.setSubject("Hello World from the Personalized SendGrid Java Library"); + personalization3.addHeader("X-Test", "test"); + personalization3.addHeader("X-Mock", "true"); + personalization3.addDynamicTemplateData("name", "Example User"); + personalization3.addDynamicTemplateData("city", "Denver"); + personalization3.addCustomArg("user_id", "343"); + personalization3.addCustomArg("type", "marketing"); + personalization3.setSendAt(1443636843); + mail.addPersonalization(personalization3); + Content content = new Content(); content.setType("text/plain"); content.setValue("some text here"); @@ -199,7 +231,7 @@ public void testKitchenSink() throws IOException { replyTo.setEmail("test@example.com"); mail.setReplyTo(replyTo); - Assert.assertEquals(mail.build(), "{\"from\":{\"name\":\"Example User\",\"email\":\"test@example.com\"},\"subject\":\"Hello World from the SendGrid Java Library\",\"personalizations\":[{\"to\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"cc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"bcc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"subject\":\"Hello World from the Personalized SendGrid Java Library\",\"headers\":{\"X-Mock\":\"true\",\"X-Test\":\"test\"},\"substitutions\":{\"%city%\":\"Denver\",\"%name%\":\"Example User\"},\"custom_args\":{\"type\":\"marketing\",\"user_id\":\"343\"},\"send_at\":1443636843},{\"to\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"cc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"bcc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"subject\":\"Hello World from the Personalized SendGrid Java Library\",\"headers\":{\"X-Mock\":\"true\",\"X-Test\":\"test\"},\"substitutions\":{\"%city%\":\"Denver\",\"%name%\":\"Example User\"},\"custom_args\":{\"type\":\"marketing\",\"user_id\":\"343\"},\"send_at\":1443636843}],\"content\":[{\"type\":\"text/plain\",\"value\":\"some text here\"},{\"type\":\"text/html\",\"value\":\"some text here\"}],\"attachments\":[{\"content\":\"TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdC4gQ3JhcyBwdW12\",\"type\":\"application/pdf\",\"filename\":\"balance_001.pdf\",\"disposition\":\"attachment\",\"content_id\":\"Balance Sheet\"},{\"content\":\"BwdW\",\"type\":\"image/png\",\"filename\":\"banner.png\",\"disposition\":\"inline\",\"content_id\":\"Banner\"}],\"template_id\":\"13b8f94f-bcae-4ec6-b752-70d6cb59f932\",\"sections\":{\"%section1%\":\"Substitution Text for Section 1\",\"%section2%\":\"Substitution Text for Section 2\"},\"headers\":{\"X-Test1\":\"1\",\"X-Test2\":\"2\"},\"categories\":[\"May\",\"2016\"],\"custom_args\":{\"campaign\":\"welcome\",\"weekday\":\"morning\"},\"send_at\":1443636842,\"asm\":{\"group_id\":99,\"groups_to_display\":[4,5,6,7,8]},\"ip_pool_name\":\"23\",\"mail_settings\":{\"bcc\":{\"enable\":true,\"email\":\"test@example.com\"},\"bypass_list_management\":{\"enable\":true},\"footer\":{\"enable\":true,\"text\":\"Footer Text\",\"html\":\"Footer Text\"},\"sandbox_mode\":{\"enable\":true},\"spam_check\":{\"enable\":true,\"threshold\":1,\"post_to_url\":\"https://spamcatcher.sendgrid.com\"}},\"tracking_settings\":{\"click_tracking\":{\"enable\":true,\"enable_text\":false},\"open_tracking\":{\"enable\":true,\"substitution_tag\":\"Optional tag to replace with the open image in the body of the message\"},\"subscription_tracking\":{\"enable\":true,\"text\":\"text to insert into the text/plain portion of the message\",\"html\":\"html to insert into the text/html portion of the message\",\"substitution_tag\":\"Optional tag to replace with the open image in the body of the message\"},\"ganalytics\":{\"enable\":true,\"utm_source\":\"some source\",\"utm_term\":\"some term\",\"utm_content\":\"some content\",\"utm_campaign\":\"some name\",\"utm_medium\":\"some medium\"}},\"reply_to\":{\"name\":\"Example User\",\"email\":\"test@example.com\"}}"); + Assert.assertEquals(mail.build(), "{\"from\":{\"name\":\"Example User\",\"email\":\"test@example.com\"},\"subject\":\"Hello World from the SendGrid Java Library\",\"personalizations\":[{\"to\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"cc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"bcc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"subject\":\"Hello World from the Personalized SendGrid Java Library\",\"headers\":{\"X-Mock\":\"true\",\"X-Test\":\"test\"},\"substitutions\":{\"%city%\":\"Denver\",\"%name%\":\"Example User\"},\"custom_args\":{\"type\":\"marketing\",\"user_id\":\"343\"},\"send_at\":1443636843},{\"to\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"cc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"bcc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"subject\":\"Hello World from the Personalized SendGrid Java Library\",\"headers\":{\"X-Mock\":\"true\",\"X-Test\":\"test\"},\"substitutions\":{\"%city%\":\"Denver\",\"%name%\":\"Example User\"},\"custom_args\":{\"type\":\"marketing\",\"user_id\":\"343\"},\"send_at\":1443636843},{\"to\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"cc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"bcc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"subject\":\"Hello World from the Personalized SendGrid Java Library\",\"headers\":{\"X-Mock\":\"true\",\"X-Test\":\"test\"},\"custom_args\":{\"type\":\"marketing\",\"user_id\":\"343\"},\"dynamic_template_data\":{\"city\":\"Denver\",\"name\":\"Example User\"},\"send_at\":1443636843}],\"content\":[{\"type\":\"text/plain\",\"value\":\"some text here\"},{\"type\":\"text/html\",\"value\":\"some text here\"}],\"attachments\":[{\"content\":\"TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdC4gQ3JhcyBwdW12\",\"type\":\"application/pdf\",\"filename\":\"balance_001.pdf\",\"disposition\":\"attachment\",\"content_id\":\"Balance Sheet\"},{\"content\":\"BwdW\",\"type\":\"image/png\",\"filename\":\"banner.png\",\"disposition\":\"inline\",\"content_id\":\"Banner\"}],\"template_id\":\"13b8f94f-bcae-4ec6-b752-70d6cb59f932\",\"sections\":{\"%section1%\":\"Substitution Text for Section 1\",\"%section2%\":\"Substitution Text for Section 2\"},\"headers\":{\"X-Test1\":\"1\",\"X-Test2\":\"2\"},\"categories\":[\"May\",\"2016\"],\"custom_args\":{\"campaign\":\"welcome\",\"weekday\":\"morning\"},\"send_at\":1443636842,\"asm\":{\"group_id\":99,\"groups_to_display\":[4,5,6,7,8]},\"ip_pool_name\":\"23\",\"mail_settings\":{\"bcc\":{\"enable\":true,\"email\":\"test@example.com\"},\"bypass_list_management\":{\"enable\":true},\"footer\":{\"enable\":true,\"text\":\"Footer Text\",\"html\":\"Footer Text\"},\"sandbox_mode\":{\"enable\":true},\"spam_check\":{\"enable\":true,\"threshold\":1,\"post_to_url\":\"https://spamcatcher.sendgrid.com\"}},\"tracking_settings\":{\"click_tracking\":{\"enable\":true,\"enable_text\":false},\"open_tracking\":{\"enable\":true,\"substitution_tag\":\"Optional tag to replace with the open image in the body of the message\"},\"subscription_tracking\":{\"enable\":true,\"text\":\"text to insert into the text/plain portion of the message\",\"html\":\"html to insert into the text/html portion of the message\",\"substitution_tag\":\"Optional tag to replace with the open image in the body of the message\"},\"ganalytics\":{\"enable\":true,\"utm_source\":\"some source\",\"utm_term\":\"some term\",\"utm_content\":\"some content\",\"utm_campaign\":\"some name\",\"utm_medium\":\"some medium\"}},\"reply_to\":{\"name\":\"Example User\",\"email\":\"test@example.com\"}}"); } @Test @@ -210,7 +242,7 @@ public void fromShouldReturnCorrectFrom() { Assert.assertSame(from, mail.getFrom()); } - + @Test public void mailDeserialization() throws IOException { Email to = new Email("foo@bar.com"); From 56c293ff0d70103d1d6ecd0f8fd11885ed150bb8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcus=20Vin=C3=ADcius?= Date: Mon, 30 Jul 2018 10:39:31 -0300 Subject: [PATCH 104/345] Updated to demonstrate new Dynamic Templates using helper and renamed the current example to Legacy Templates --- USE_CASES.md | 89 +++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 88 insertions(+), 1 deletion(-) diff --git a/USE_CASES.md b/USE_CASES.md index 5ec48991..7eb4b1b1 100644 --- a/USE_CASES.md +++ b/USE_CASES.md @@ -7,12 +7,99 @@ This documentation provides examples for specific use cases. Please [open an iss * [How to View Email Statistics](#email_stats) -# Transactional Templates +# Dynamic Templates For this example, we assume you have created a [transactional template](https://sendgrid.com/docs/User_Guide/Transactional_Templates/index.html). Following is the template content we used for testing. Template ID (replace with your own): +```text +d-2c214ac919e84170b21855cc129b4a5f +``` + +Template Body: + +```html + + + + + +Hello {{name}}, +

+I'm glad you are trying out the template feature! +

+I hope you are having a great day in {{city}} :) +

+ + +``` + +## With Mail Helper Class + +```java +import com.sendgrid.*; +import java.io.IOException; + +public class Example { + public static void main(String[] args) throws IOException { + Mail mail = new Mail(); + mail.setFrom(new Email("teste@example.com")); + mail.setTemplateId("d-2c214ac919e84170b21855cc129b4a5f"); + mail.personalization.get(0).addDynamicTemplateData("name", "Example User"); + mail.personalization.get(0).addDynamicTemplateData("city", "Denver"); + mail.personalization.get(0).addTo(new Email("test@example.com")); + mail.addPersonalization(personalization); + + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + request.setMethod(Method.POST); + request.setEndpoint("mail/send"); + request.setBody(mail.build()); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} +``` + +## Without Mail Helper Class + +```java +import com.sendgrid.*; +import java.io.IOException; + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.POST); + request.setEndpoint("mail/send"); + request.setBody("{\"from\":{\"email\":\"test@example.com\"},\"personalizations\":[{\"to\":[{\"email\":\"test@example.com\"}],\"dynamic_template_data\":{\"name\":\"Example User\",\"city\":\"Denver\"}}],\"template_id\":\"d-2c214ac919e84170b21855cc129b4a5f\"}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} +``` + + +# Legacy Templates + +For this example, we assume you have created a [legacy template](https://sendgrid.com/docs/User_Guide/Transactional_Templates/index.html). Following is the template content we used for testing. + +Template ID (replace with your own): + ```text 13b8f94f-bcae-4ec6-b752-70d6cb59f932 ``` From c2713449e0f2cceaade7dcb9e25380d934e3baff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcus=20Vin=C3=ADcius?= Date: Tue, 31 Jul 2018 19:47:42 -0300 Subject: [PATCH 105/345] Changed type parameter of dynamicTemplateData --- .../sendgrid/helpers/mail/objects/Personalization.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/Personalization.java b/src/main/java/com/sendgrid/helpers/mail/objects/Personalization.java index 48aafea2..c26057ce 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/Personalization.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/Personalization.java @@ -19,7 +19,7 @@ public class Personalization { @JsonProperty("headers") private Map headers; @JsonProperty("substitutions") private Map substitutions; @JsonProperty("custom_args") private Map customArgs; - @JsonProperty("dynamic_template_data") private Map dynamicTemplateData; + @JsonProperty("dynamic_template_data") private Map dynamicTemplateData; @JsonProperty("send_at") private long sendAt; @JsonProperty("to") @@ -146,15 +146,15 @@ public void setSendAt(long sendAt) { } @JsonProperty("dynamic_template_data") - public Map getDynamicTemplateData() { + public Map getDynamicTemplateData() { if(dynamicTemplateData == null) - return Collections.emptyMap(); + return Collections.emptyMap(); return dynamicTemplateData; } - public void addDynamicTemplateData(String key, String value) { + public void addDynamicTemplateData(String key, Object value) { if (dynamicTemplateData == null) { - dynamicTemplateData = new HashMap(); + dynamicTemplateData = new HashMap(); dynamicTemplateData.put(key, value); } else { dynamicTemplateData.put(key, value); From b8710435fcbe891f8faadcf2fa776fefa478cc5f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcus=20Vin=C3=ADcius?= Date: Tue, 31 Jul 2018 19:49:12 -0300 Subject: [PATCH 106/345] Included generation of more complex dynamic template data to testKitchenSink --- .../java/com/sendgrid/helpers/MailTest.java | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/test/java/com/sendgrid/helpers/MailTest.java b/src/test/java/com/sendgrid/helpers/MailTest.java index fbae6b39..40ac75ce 100644 --- a/src/test/java/com/sendgrid/helpers/MailTest.java +++ b/src/test/java/com/sendgrid/helpers/MailTest.java @@ -6,6 +6,11 @@ import org.junit.Before; import org.junit.Test; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + import java.io.IOException; public class MailTest { @@ -121,8 +126,18 @@ public void testKitchenSink() throws IOException { personalization3.setSubject("Hello World from the Personalized SendGrid Java Library"); personalization3.addHeader("X-Test", "test"); personalization3.addHeader("X-Mock", "true"); + List> items = new ArrayList<>(); + Map item1 = new HashMap<>(); + item1.put("text", "New Line Sneakers"); + item1.put("price", "$ 79.95"); + items.add(item1); + Map item2 = new HashMap<>(); + item2.put("text", "Old Line Sneakers"); + item1.put("price", "$ 59.95"); + items.add(item2); personalization3.addDynamicTemplateData("name", "Example User"); personalization3.addDynamicTemplateData("city", "Denver"); + personalization3.addDynamicTemplateData("items", items); personalization3.addCustomArg("user_id", "343"); personalization3.addCustomArg("type", "marketing"); personalization3.setSendAt(1443636843); @@ -231,7 +246,7 @@ public void testKitchenSink() throws IOException { replyTo.setEmail("test@example.com"); mail.setReplyTo(replyTo); - Assert.assertEquals(mail.build(), "{\"from\":{\"name\":\"Example User\",\"email\":\"test@example.com\"},\"subject\":\"Hello World from the SendGrid Java Library\",\"personalizations\":[{\"to\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"cc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"bcc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"subject\":\"Hello World from the Personalized SendGrid Java Library\",\"headers\":{\"X-Mock\":\"true\",\"X-Test\":\"test\"},\"substitutions\":{\"%city%\":\"Denver\",\"%name%\":\"Example User\"},\"custom_args\":{\"type\":\"marketing\",\"user_id\":\"343\"},\"send_at\":1443636843},{\"to\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"cc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"bcc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"subject\":\"Hello World from the Personalized SendGrid Java Library\",\"headers\":{\"X-Mock\":\"true\",\"X-Test\":\"test\"},\"substitutions\":{\"%city%\":\"Denver\",\"%name%\":\"Example User\"},\"custom_args\":{\"type\":\"marketing\",\"user_id\":\"343\"},\"send_at\":1443636843},{\"to\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"cc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"bcc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"subject\":\"Hello World from the Personalized SendGrid Java Library\",\"headers\":{\"X-Mock\":\"true\",\"X-Test\":\"test\"},\"custom_args\":{\"type\":\"marketing\",\"user_id\":\"343\"},\"dynamic_template_data\":{\"city\":\"Denver\",\"name\":\"Example User\"},\"send_at\":1443636843}],\"content\":[{\"type\":\"text/plain\",\"value\":\"some text here\"},{\"type\":\"text/html\",\"value\":\"some text here\"}],\"attachments\":[{\"content\":\"TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdC4gQ3JhcyBwdW12\",\"type\":\"application/pdf\",\"filename\":\"balance_001.pdf\",\"disposition\":\"attachment\",\"content_id\":\"Balance Sheet\"},{\"content\":\"BwdW\",\"type\":\"image/png\",\"filename\":\"banner.png\",\"disposition\":\"inline\",\"content_id\":\"Banner\"}],\"template_id\":\"13b8f94f-bcae-4ec6-b752-70d6cb59f932\",\"sections\":{\"%section1%\":\"Substitution Text for Section 1\",\"%section2%\":\"Substitution Text for Section 2\"},\"headers\":{\"X-Test1\":\"1\",\"X-Test2\":\"2\"},\"categories\":[\"May\",\"2016\"],\"custom_args\":{\"campaign\":\"welcome\",\"weekday\":\"morning\"},\"send_at\":1443636842,\"asm\":{\"group_id\":99,\"groups_to_display\":[4,5,6,7,8]},\"ip_pool_name\":\"23\",\"mail_settings\":{\"bcc\":{\"enable\":true,\"email\":\"test@example.com\"},\"bypass_list_management\":{\"enable\":true},\"footer\":{\"enable\":true,\"text\":\"Footer Text\",\"html\":\"Footer Text\"},\"sandbox_mode\":{\"enable\":true},\"spam_check\":{\"enable\":true,\"threshold\":1,\"post_to_url\":\"https://spamcatcher.sendgrid.com\"}},\"tracking_settings\":{\"click_tracking\":{\"enable\":true,\"enable_text\":false},\"open_tracking\":{\"enable\":true,\"substitution_tag\":\"Optional tag to replace with the open image in the body of the message\"},\"subscription_tracking\":{\"enable\":true,\"text\":\"text to insert into the text/plain portion of the message\",\"html\":\"html to insert into the text/html portion of the message\",\"substitution_tag\":\"Optional tag to replace with the open image in the body of the message\"},\"ganalytics\":{\"enable\":true,\"utm_source\":\"some source\",\"utm_term\":\"some term\",\"utm_content\":\"some content\",\"utm_campaign\":\"some name\",\"utm_medium\":\"some medium\"}},\"reply_to\":{\"name\":\"Example User\",\"email\":\"test@example.com\"}}"); + Assert.assertEquals(mail.build(), "{\"from\":{\"name\":\"Example User\",\"email\":\"test@example.com\"},\"subject\":\"Hello World from the SendGrid Java Library\",\"personalizations\":[{\"to\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"cc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"bcc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"subject\":\"Hello World from the Personalized SendGrid Java Library\",\"headers\":{\"X-Mock\":\"true\",\"X-Test\":\"test\"},\"substitutions\":{\"%city%\":\"Denver\",\"%name%\":\"Example User\"},\"custom_args\":{\"type\":\"marketing\",\"user_id\":\"343\"},\"send_at\":1443636843},{\"to\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"cc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"bcc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"subject\":\"Hello World from the Personalized SendGrid Java Library\",\"headers\":{\"X-Mock\":\"true\",\"X-Test\":\"test\"},\"substitutions\":{\"%city%\":\"Denver\",\"%name%\":\"Example User\"},\"custom_args\":{\"type\":\"marketing\",\"user_id\":\"343\"},\"send_at\":1443636843},{\"to\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"cc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"bcc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"subject\":\"Hello World from the Personalized SendGrid Java Library\",\"headers\":{\"X-Mock\":\"true\",\"X-Test\":\"test\"},\"custom_args\":{\"type\":\"marketing\",\"user_id\":\"343\"},\"dynamic_template_data\":{\"city\":\"Denver\",\"items\":[{\"price\":\"$ 59.95\",\"text\":\"New Line Sneakers\"},{\"text\":\"Old Line Sneakers\"}],\"name\":\"Example User\"},\"send_at\":1443636843}],\"content\":[{\"type\":\"text/plain\",\"value\":\"some text here\"},{\"type\":\"text/html\",\"value\":\"some text here\"}],\"attachments\":[{\"content\":\"TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdC4gQ3JhcyBwdW12\",\"type\":\"application/pdf\",\"filename\":\"balance_001.pdf\",\"disposition\":\"attachment\",\"content_id\":\"Balance Sheet\"},{\"content\":\"BwdW\",\"type\":\"image/png\",\"filename\":\"banner.png\",\"disposition\":\"inline\",\"content_id\":\"Banner\"}],\"template_id\":\"13b8f94f-bcae-4ec6-b752-70d6cb59f932\",\"sections\":{\"%section1%\":\"Substitution Text for Section 1\",\"%section2%\":\"Substitution Text for Section 2\"},\"headers\":{\"X-Test1\":\"1\",\"X-Test2\":\"2\"},\"categories\":[\"May\",\"2016\"],\"custom_args\":{\"campaign\":\"welcome\",\"weekday\":\"morning\"},\"send_at\":1443636842,\"asm\":{\"group_id\":99,\"groups_to_display\":[4,5,6,7,8]},\"ip_pool_name\":\"23\",\"mail_settings\":{\"bcc\":{\"enable\":true,\"email\":\"test@example.com\"},\"bypass_list_management\":{\"enable\":true},\"footer\":{\"enable\":true,\"text\":\"Footer Text\",\"html\":\"Footer Text\"},\"sandbox_mode\":{\"enable\":true},\"spam_check\":{\"enable\":true,\"threshold\":1,\"post_to_url\":\"https://spamcatcher.sendgrid.com\"}},\"tracking_settings\":{\"click_tracking\":{\"enable\":true,\"enable_text\":false},\"open_tracking\":{\"enable\":true,\"substitution_tag\":\"Optional tag to replace with the open image in the body of the message\"},\"subscription_tracking\":{\"enable\":true,\"text\":\"text to insert into the text/plain portion of the message\",\"html\":\"html to insert into the text/html portion of the message\",\"substitution_tag\":\"Optional tag to replace with the open image in the body of the message\"},\"ganalytics\":{\"enable\":true,\"utm_source\":\"some source\",\"utm_term\":\"some term\",\"utm_content\":\"some content\",\"utm_campaign\":\"some name\",\"utm_medium\":\"some medium\"}},\"reply_to\":{\"name\":\"Example User\",\"email\":\"test@example.com\"}}"); } @Test From 74962e5d9fbbad18c9fb5a75d98b41bd4f4b2e7a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcus=20Vin=C3=ADcius?= Date: Wed, 1 Aug 2018 22:46:07 -0300 Subject: [PATCH 107/345] Refactor in getDynamicemplateData --- .../com/sendgrid/helpers/mail/objects/Personalization.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/Personalization.java b/src/main/java/com/sendgrid/helpers/mail/objects/Personalization.java index c26057ce..816d1241 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/Personalization.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/Personalization.java @@ -147,9 +147,8 @@ public void setSendAt(long sendAt) { @JsonProperty("dynamic_template_data") public Map getDynamicTemplateData() { - if(dynamicTemplateData == null) - return Collections.emptyMap(); - return dynamicTemplateData; + return dynamicTemplateData == null + ? Collections.emptyMap() : dynamicTemplateData; } public void addDynamicTemplateData(String key, Object value) { From 07b0be29e495a19c3bcfb8699e81e2e4af27da67 Mon Sep 17 00:00:00 2001 From: Anshul Singhal Date: Tue, 7 Aug 2018 09:56:12 -0700 Subject: [PATCH 108/345] Added coders tag --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 995f7beb..48bcc302 100644 --- a/README.md +++ b/README.md @@ -5,6 +5,7 @@ [![Email Notifications Badge](https://dx.sendgrid.com/badge/java)](https://dx.sendgrid.com/newsletter/java) [![Twitter Follow](https://img.shields.io/twitter/follow/sendgrid.svg?style=social&label=Follow)](https://twitter.com/sendgrid) [![GitHub contributors](https://img.shields.io/github/contributors/sendgrid/sendgrid-java.svg)](https://github.com/sendgrid/sendgrid-java/graphs/contributors) +[![Open Source Helpers](https://www.codetriage.com/sendgrid/sendgrid-java/badges/users.svg)](https://www.codetriage.com/sendgrid/sendgrid-java) [![MIT licensed](https://img.shields.io/badge/license-MIT-blue.svg)](./LICENSE.txt) **NEW:** Subscribe to email [notifications](https://dx.sendgrid.com/newsletter/java) for releases and breaking changes. From cced93c069eb97f8b04e8b74f03d8b032e779d67 Mon Sep 17 00:00:00 2001 From: Anshul Singhal <1997anshul@gmail.com> Date: Fri, 10 Aug 2018 16:19:49 -0700 Subject: [PATCH 109/345] Readability update --- CONTRIBUTING.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 985d0371..ff9c0222 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -168,8 +168,10 @@ Please run your code through: ```bash # Clone your fork of the repo into the current directory git clone https://github.com/sendgrid/sendgrid-java + # Navigate to the newly cloned directory cd sendgrid-java + # Assign the original repo to a remote called "upstream" git remote add upstream https://github.com/sendgrid/sendgrid-java ``` From 96655f39e1a4f45c9406736d8f22013e6a712996 Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Mon, 20 Aug 2018 18:14:18 -0700 Subject: [PATCH 110/345] Update USE_CASES.md --- USE_CASES.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/USE_CASES.md b/USE_CASES.md index 5ec48991..65310908 100644 --- a/USE_CASES.md +++ b/USE_CASES.md @@ -7,7 +7,9 @@ This documentation provides examples for specific use cases. Please [open an iss * [How to View Email Statistics](#email_stats) -# Transactional Templates +# (LEGACY) Transactional Templates + +IF YOU ARE USING OUR NEW TEMPLATES, PLEASE SEE [THIS ISSUE](https://github.com/sendgrid/sendgrid-java/issues/447). For this example, we assume you have created a [transactional template](https://sendgrid.com/docs/User_Guide/Transactional_Templates/index.html). Following is the template content we used for testing. From ff0dc1bcd4baccab1f3e82fe6006e530470d882a Mon Sep 17 00:00:00 2001 From: af4ro <1997anshul@gmail.com> Date: Tue, 21 Aug 2018 11:53:39 -0700 Subject: [PATCH 111/345] Fixed import errors --- .../java/com/sendgrid/TestRequiredFilesExist.java | 2 ++ .../java/com/sendgrid/helpers/ContentTest.java | 3 ++- .../mail/objects/SettingsSerializationTest.java | 14 +++++++------- 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/src/test/java/com/sendgrid/TestRequiredFilesExist.java b/src/test/java/com/sendgrid/TestRequiredFilesExist.java index f503c424..928758b9 100644 --- a/src/test/java/com/sendgrid/TestRequiredFilesExist.java +++ b/src/test/java/com/sendgrid/TestRequiredFilesExist.java @@ -1,3 +1,5 @@ +package com.sendgrid; + import org.junit.Test; import java.io.File; diff --git a/src/test/java/com/sendgrid/helpers/ContentTest.java b/src/test/java/com/sendgrid/helpers/ContentTest.java index 05e2328c..c83b0d2e 100644 --- a/src/test/java/com/sendgrid/helpers/ContentTest.java +++ b/src/test/java/com/sendgrid/helpers/ContentTest.java @@ -1,9 +1,10 @@ -package com.sendgrid; +package com.sendgrid.helpers; import org.junit.Assert; import org.junit.Before; import org.junit.Rule; import org.junit.Test; +import com.sendgrid.helpers.mail.objects.Content; import org.junit.rules.ExpectedException; import java.util.ArrayList; diff --git a/src/test/java/com/sendgrid/helpers/mail/objects/SettingsSerializationTest.java b/src/test/java/com/sendgrid/helpers/mail/objects/SettingsSerializationTest.java index 74e6c8b5..27878162 100644 --- a/src/test/java/com/sendgrid/helpers/mail/objects/SettingsSerializationTest.java +++ b/src/test/java/com/sendgrid/helpers/mail/objects/SettingsSerializationTest.java @@ -1,13 +1,13 @@ package com.sendgrid.helpers.mail.objects; import com.fasterxml.jackson.databind.ObjectMapper; -import com.sendgrid.BccSettings; -import com.sendgrid.ClickTrackingSetting; -import com.sendgrid.FooterSetting; -import com.sendgrid.GoogleAnalyticsSetting; -import com.sendgrid.OpenTrackingSetting; -import com.sendgrid.SpamCheckSetting; -import com.sendgrid.SubscriptionTrackingSetting; +import com.sendgrid.helpers.mail.objects.BccSettings; +import com.sendgrid.helpers.mail.objects.ClickTrackingSetting; +import com.sendgrid.helpers.mail.objects.FooterSetting; +import com.sendgrid.helpers.mail.objects.GoogleAnalyticsSetting; +import com.sendgrid.helpers.mail.objects.OpenTrackingSetting; +import com.sendgrid.helpers.mail.objects.SpamCheckSetting; +import com.sendgrid.helpers.mail.objects.SubscriptionTrackingSetting; import org.junit.Assert; import org.junit.Test; From 994fdba5dcb849983b667c3bc926db953009c048 Mon Sep 17 00:00:00 2001 From: af4ro <1997anshul@gmail.com> Date: Tue, 21 Aug 2018 13:52:36 -0700 Subject: [PATCH 112/345] examples and minor code changes --- USE_CASES.md | 93 ++++++++++++------- docker/Dockerfile | 2 +- docker/USAGE.md | 5 +- examples/helpers/mail/Example.java | 44 ++++++++- .../helpers/mail/objects/Personalization.java | 4 +- 5 files changed, 106 insertions(+), 42 deletions(-) diff --git a/USE_CASES.md b/USE_CASES.md index 7eb4b1b1..204f74ce 100644 --- a/USE_CASES.md +++ b/USE_CASES.md @@ -2,12 +2,13 @@ This documentation provides examples for specific use cases. Please [open an iss # Table of Contents -* [Transactional Templates](#transactional_templates) -* [How to Setup a Domain Whitelabel](#domain_whitelabel) -* [How to View Email Statistics](#email_stats) +* [Transactional Templates](#transactional-templates) +* [Legacy Templates](#legacy-templates) +* [How to Setup a Domain Whitelabel](#domain-whitelabel) +* [How to View Email Statistics](#email-stats) -# Dynamic Templates +# Transactional Templates For this example, we assume you have created a [transactional template](https://sendgrid.com/docs/User_Guide/Transactional_Templates/index.html). Following is the template content we used for testing. @@ -21,17 +22,17 @@ Template Body: ```html - - - - -Hello {{name}}, -

-I'm glad you are trying out the template feature! -

-I hope you are having a great day in {{city}} :) -

- + + + + + Hello {{name}}, +

+ I'm glad you are trying out the template feature! +

+ I hope you are having a great day in {{city}} :) +

+ ``` @@ -46,9 +47,11 @@ public class Example { Mail mail = new Mail(); mail.setFrom(new Email("teste@example.com")); mail.setTemplateId("d-2c214ac919e84170b21855cc129b4a5f"); - mail.personalization.get(0).addDynamicTemplateData("name", "Example User"); - mail.personalization.get(0).addDynamicTemplateData("city", "Denver"); - mail.personalization.get(0).addTo(new Email("test@example.com")); + + Personalization personalization = new Personalization(); + personalization.addDynamicTemplateData("name", "Example User"); + personalization.addDynamicTemplateData("city", "Denver"); + personalization.addTo(new Email("test@example.com")); mail.addPersonalization(personalization); SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); @@ -81,7 +84,14 @@ public class Example { Request request = new Request(); request.setMethod(Method.POST); request.setEndpoint("mail/send"); - request.setBody("{\"from\":{\"email\":\"test@example.com\"},\"personalizations\":[{\"to\":[{\"email\":\"test@example.com\"}],\"dynamic_template_data\":{\"name\":\"Example User\",\"city\":\"Denver\"}}],\"template_id\":\"d-2c214ac919e84170b21855cc129b4a5f\"}"); + request.setBody("{ + \"from\": {\"email\": \"test@example.com\"}, + \"personalizations\": + [{ + \"to\": [{\"email\": \"test@example.com\"}], + \"dynamic_template_data\": {\"name\": \"Example User\", \"city\": \"Denver\"} + }], + \"template_id\": \"d-2c214ac919e84170b21855cc129b4a5f\"}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -114,19 +124,19 @@ Template Body: ```html - - - - -Hello -name-, -

-I'm glad you are trying out the template feature! -

-<%body%> -

-I hope you are having a great day in -city- :) -

- + + + + + Hello -name-, +

+ I'm glad you are trying out the template feature! +

+ <%body%> +

+ I hope you are having a great day in -city- :) +

+ ``` @@ -177,7 +187,20 @@ public class Example { Request request = new Request(); request.setMethod(Method.POST); request.setEndpoint("mail/send"); - request.setBody("{\"personalizations\":[{\"to\":[{\"email\":\"test@example.com\"}],\"substitutions\":{\"-name-\":\"Example User\",\"-city-\":\"Denver\"},\"subject\":\"Hello World from the SendGrid Java Library!\"}],\"from\":{\"email\":\"test@example.com\"},\"content\":[{\"type\":\"text/html\",\"value\": \"I'm replacing the body tag\"}],\"template_id\": \"13b8f94f-bcae-4ec6-b752-70d6cb59f932\"}"); + request.setBody("{ + \"personalizations\": + [{ + \"to\": [{\"email\": \"test@example.com\"}], + \"substitutions\": {\"-name-\": \"Example User\", \"-city-\": \"Denver\"}, + \"subject\": \"Hello World from the SendGrid Java Library!\" + }], + \"from\": {\"email\": \"test@example.com\"}, + \"content\": + [{ + \"type\": \"text/html\", + \"value\": \"I'm replacing the body tag\" + }] + ,\"template_id\": \"13b8f94f-bcae-4ec6-b752-70d6cb59f932\"}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -189,14 +212,14 @@ public class Example { } ``` - + # How to Setup a Domain Whitelabel You can find documentation for how to setup a domain whitelabel via the UI [here](https://sendgrid.com/docs/Classroom/Basics/Whitelabel/setup_domain_whitelabel.html) and via API [here](https://github.com/sendgrid/sendgrid-java/blob/master/USAGE.md#whitelabel). Find more information about all of SendGrid's whitelabeling related documentation [here](https://sendgrid.com/docs/Classroom/Basics/Whitelabel/index.html). - + # How to View Email Statistics You can find documentation for how to view your email statistics via the UI [here](https://app.sendgrid.com/statistics) and via API [here](https://github.com/sendgrid/sendgrid-java/blob/master/USAGE.md#stats). diff --git a/docker/Dockerfile b/docker/Dockerfile index 943b2b50..66599a60 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -16,7 +16,7 @@ RUN chmod +x ./install.sh && \ WORKDIR /root/sources RUN git clone https://github.com/sendgrid/sendgrid-java.git WORKDIR /root -RUN ln -s /root/sources/sendgrid-java/sendgrid +RUN ln -s /root/sources/sendgrid-java COPY entrypoint.sh entrypoint.sh RUN chmod +x entrypoint.sh diff --git a/docker/USAGE.md b/docker/USAGE.md index 125b90fe..0cb27fee 100644 --- a/docker/USAGE.md +++ b/docker/USAGE.md @@ -23,7 +23,10 @@ You can mount repositories in the `/mnt/sendgrid-java` and `/mnt/java-http-clien # Testing -Testing is easy! Run the container, `cd sendgrid`, and run `./gradlew test`. +Testing is easy! +1. Run the container: `docker run -it sendgrid/sendgrid-java` +2. `cd sendgrid-java` +3. run `./gradlew test` # About diff --git a/examples/helpers/mail/Example.java b/examples/helpers/mail/Example.java index d595d0d3..77c73eb2 100644 --- a/examples/helpers/mail/Example.java +++ b/examples/helpers/mail/Example.java @@ -207,6 +207,26 @@ public static Mail buildKitchenSink() throws IOException { return mail; } + // API V3 Dynamic Template implementation + public static Mail buildDynamicTemplate() throws IOException { + Mail mail = new Mail(); + + Email fromEmail = new Email(); + fromEmail.setName("Example User"); + fromEmail.setEmail("test@example.com"); + mail.setFrom(fromEmail); + + mail.setTemplateId("d-c6dcf1f72bdd4beeb15a9aa6c72fcd2c"); + + Personalization personalization = new Personalization(); + personalization.addDynamicTemplateData("name", "Example User"); + personalization.addDynamicTemplateData("city", "Denver"); + personalization.addTo(new Email("test@example.com")); + mail.addPersonalization(personalization); + + return mail; + } + // Minimum required to send an email public static Mail buildHelloEmail() throws IOException { Email from = new Email("test@example.com"); @@ -261,8 +281,28 @@ public static void kitchenSinkExample() throws IOException { } } + public static void dynamicTemplateExample() throws IOException { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + sg.addRequestHeader("X-Mock", "true"); + + Request request = new Request(); + Mail dynamicTemplate = buildDynamicTemplate(); + try { + request.setMethod(Method.POST); + request.setEndpoint("mail/send"); + request.setBody(dynamicTemplate.build()); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } + public static void main(String[] args) throws IOException { - baselineExample(); - kitchenSinkExample(); + // baselineExample(); + // kitchenSinkExample(); + dynamicTemplateExample(); } } \ No newline at end of file diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/Personalization.java b/src/main/java/com/sendgrid/helpers/mail/objects/Personalization.java index 816d1241..3ace82ff 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/Personalization.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/Personalization.java @@ -154,10 +154,8 @@ public Map getDynamicTemplateData() { public void addDynamicTemplateData(String key, Object value) { if (dynamicTemplateData == null) { dynamicTemplateData = new HashMap(); - dynamicTemplateData.put(key, value); - } else { - dynamicTemplateData.put(key, value); } + dynamicTemplateData.put(key, value); } @Override From 83c449a857137b6c420c3c2156f95ad0543594ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ros=C3=A1rio=20Pereira=20Fernandes?= Date: Mon, 1 Oct 2018 01:46:04 +0200 Subject: [PATCH 113/345] Update README.md Replace compile with implementation --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 48bcc302..a2154351 100644 --- a/README.md +++ b/README.md @@ -67,7 +67,7 @@ Add the following to your build.gradle file in the root of your project. ... dependencies { ... - compile 'com.sendgrid:sendgrid-java:4.2.1' + implementation 'com.sendgrid:sendgrid-java:4.2.1' } repositories { From 18d1dcece1f5e0a0e09efa9057367a85dd847d1a Mon Sep 17 00:00:00 2001 From: Bharat Raghunathan Date: Mon, 1 Oct 2018 10:17:44 +0530 Subject: [PATCH 114/345] Link to the online version of CLA in README.md Link to signable online version of CLA instead of a copy of the CLA for convenience --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 48bcc302..4c183b9c 100644 --- a/README.md +++ b/README.md @@ -219,7 +219,7 @@ Quick links: - [Feature Request](https://github.com/sendgrid/sendgrid-java/blob/master/CONTRIBUTING.md#feature-request) - [Bug Reports](https://github.com/sendgrid/sendgrid-java/blob/master/CONTRIBUTING.md#submit-a-bug-report) -- [Sign the CLA to Create a Pull Request](https://github.com/sendgrid/sendgrid-java/blob/master/CONTRIBUTING.md#cla) +- [Sign the CLA to Create a Pull Request](https://cla.sendgrid.com/sendgrid/sendgrid-java) - [Improvements to the Codebase](https://github.com/sendgrid/sendgrid-java/blob/master/CONTRIBUTING.md#improvements-to-the-codebase) From 62851d5c8892af06b65fd412b0fa3466b6a659f0 Mon Sep 17 00:00:00 2001 From: Bharat123Rox Date: Wed, 3 Oct 2018 17:20:11 +0530 Subject: [PATCH 115/345] Fix alphabetical order --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 4c183b9c..6dda22b2 100644 --- a/README.md +++ b/README.md @@ -219,8 +219,8 @@ Quick links: - [Feature Request](https://github.com/sendgrid/sendgrid-java/blob/master/CONTRIBUTING.md#feature-request) - [Bug Reports](https://github.com/sendgrid/sendgrid-java/blob/master/CONTRIBUTING.md#submit-a-bug-report) -- [Sign the CLA to Create a Pull Request](https://cla.sendgrid.com/sendgrid/sendgrid-java) - [Improvements to the Codebase](https://github.com/sendgrid/sendgrid-java/blob/master/CONTRIBUTING.md#improvements-to-the-codebase) +- [Sign the CLA to Create a Pull Request](https://cla.sendgrid.com/sendgrid/sendgrid-java) # Troubleshooting From a448f483bfb063a863b39e7877283e0747ea1449 Mon Sep 17 00:00:00 2001 From: Bharat123Rox Date: Wed, 3 Oct 2018 17:23:56 +0530 Subject: [PATCH 116/345] Fix email mention --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 6dda22b2..86add9f2 100644 --- a/README.md +++ b/README.md @@ -230,7 +230,9 @@ Please see our [troubleshooting guide](https://github.com/sendgrid/sendgrid-java # About -sendgrid-java is guided and supported by the SendGrid [Developer Experience Team](mailto:dx@sendgrid.com). +sendgrid-java is guided and supported by the SendGrid Developer Experience Team. + +Please email the Developer Experience Team [here](mailto:dx@sendgrid.com) in case of any queries. sendgrid-java is maintained and funded by SendGrid, Inc. The names and logos for sendgrid-java are trademarks of SendGrid, Inc. From ca9be79665a52f611e2039348dcdb1ebd32355a9 Mon Sep 17 00:00:00 2001 From: Nathan Seebarran Date: Thu, 4 Oct 2018 20:40:44 -0400 Subject: [PATCH 117/345] Fix formatting of README in examples/accesssettings --- examples/accesssettings/README.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/examples/accesssettings/README.md b/examples/accesssettings/README.md index 05d64211..f68dc86f 100644 --- a/examples/accesssettings/README.md +++ b/examples/accesssettings/README.md @@ -1,10 +1,10 @@ ![SendGrid Logo](https://uiux.s3.amazonaws.com/2016-logos/email-logo%402x.png) - + - +This folder contains various examples on using the ACCESS_SETTINGS endpoint of SendGrid with Java: - + - +* [Retrieve a list of currently whitelisted IPs (GET /access_settings/whitelist)](GetAccessSettings.java) - +* [Retrieve a specific whitelisted IP (GET /access_settings/whitelist/{rule_id})](GetIPFromAccessSettings.java) - +* [Retrieve a list of currently whitelisted IPs (GET /access_settings/whitelist)](GetAccessSettingsActivity.java) - +* [Remove a specific IP from the whitelist (DELETE /access_settings/whitelist/{rule_id}](DeleteIPFromAccessSettings.java) - +* [Remove one or more IPs from the whitelist (DELETE /access_settings/whitelist)](DeleteAccessSettings.java) - +* [Add one or more IPs to the whitelist (POST /access_settings/whitelist)](CreateAccessSettings.java) \ No newline at end of file + +This folder contains various examples on using the ACCESS_SETTINGS endpoint of SendGrid with Java: + +* [Retrieve a list of currently whitelisted IPs (GET /access_settings/whitelist)](GetAccessSettings.java) +* [Retrieve a specific whitelisted IP (GET /access_settings/whitelist/{rule_id})](GetIPFromAccessSettings.java) +* [Retrieve a list of currently whitelisted IPs (GET /access_settings/whitelist)](GetAccessSettingsActivity.java) +* [Remove a specific IP from the whitelist (DELETE /access_settings/whitelist/{rule_id}](DeleteIPFromAccessSettings.java) +* [Remove one or more IPs from the whitelist (DELETE /access_settings/whitelist)](DeleteAccessSettings.java) +* [Add one or more IPs to the whitelist (POST /access_settings/whitelist)](CreateAccessSettings.java) From c23507d014dfa70b69486b286e3a6c5820ec5173 Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Thu, 11 Oct 2018 16:07:15 -0700 Subject: [PATCH 118/345] Update Docker run path --- docker/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker/Dockerfile b/docker/Dockerfile index 943b2b50..66599a60 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -16,7 +16,7 @@ RUN chmod +x ./install.sh && \ WORKDIR /root/sources RUN git clone https://github.com/sendgrid/sendgrid-java.git WORKDIR /root -RUN ln -s /root/sources/sendgrid-java/sendgrid +RUN ln -s /root/sources/sendgrid-java COPY entrypoint.sh entrypoint.sh RUN chmod +x entrypoint.sh From 7591ceb445de396cf5b366605bf88859f5965d09 Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Thu, 11 Oct 2018 16:28:14 -0700 Subject: [PATCH 119/345] Version Bump v4.3.0: Dynamic Template support --- CHANGELOG.md | 12 ++++++++++++ CONTRIBUTING.md | 16 +++++++++++----- README.md | 4 ++-- build.gradle | 2 +- pom.xml | 2 +- 5 files changed, 27 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8694111a..27e2adc1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,18 @@ # Change Log All notable changes to this project will be documented in this file. +## [4.3.0] - 2018-10-11 +### Added +- [PR #449](https://github.com/sendgrid/sendgrid-java/pull/449/files): Dynamic Templates support -- BIG thanks to [Marcus Vinícius](https://github.com/Markuus13) +- [PR #451](https://github.com/sendgrid/sendgrid-java/pull/451/files): Added CodeTriage tag -- BIG thanks to [Anshul Singhal](https://github.com/af4ro) +- [PR #453](https://github.com/sendgrid/sendgrid-java/pull/453/files): Documentation readability update -- BIG thanks to [Anshul Singhal](https://github.com/af4ro) +- [PR #461](https://github.com/sendgrid/sendgrid-java/pull/461/files): Update README to use implementation instead of compile -- BIG thanks to [Rosário Pereira Fernandes](https://github.com/rosariopfernandes) +- [PR #463](https://github.com/sendgrid/sendgrid-java/pull/463/files): Link to the online version of CLA in README.md -- BIG thanks to [Bharat Raghunathan](https://github.com/Bharat123rox) + +### Fix +- [PR #358](https://github.com/sendgrid/sendgrid-java/pull/358): Fixing similar code issue in examples/ips/ips.java -- BIG thanks to [Julian Jacques Maurer](https://github.com/derjayjay) +- [PR #475](https://github.com/sendgrid/sendgrid-java/pull/475): Fix formatting of README in examples/accesssettings -- BIG thanks to [Nathan Seebarran](https://github.com/nathan78906) + ## [4.2.1] - 2018-05-08 ### Security Fix - Update to latest Jackson recommended dependency, based on [this article](https://medium.com/@cowtowncoder/on-jackson-cves-dont-panic-here-is-what-you-need-to-know-54cd0d6e8062). diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index ff9c0222..91668795 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,13 +1,19 @@ Hello! Thank you for choosing to help contribute to one of the SendGrid open source libraries. There are many ways you can contribute and help is always welcome. We simply ask that you follow the following contribution policies. -- [CLAs and CCLAs](#cla) -- [Roadmap & Milestones](#roadmap) +- [CLAs and CCLAs](#clas-and-cclas) - [Feature Request](#feature-request) - [Submit a Bug Report](#submit-a-bug-report) + - [Please use our Bug Report Template](#please-use-our-bug-report-template) - [Improvements to the Codebase](#improvements-to-the-codebase) -- [Understanding the Code Base](#understanding-the-codebase) + - [Development Environment](#development-environment) + - [Install and Run Locally](#install-and-run-locally) + - [Prerequisites](#prerequisites) + - [Initial setup:](#initial-setup) +- [Environment Variables](#environment-variables) + - [Execute:](#execute) +- [Understanding the Code Base](#understanding-the-code-base) - [Testing](#testing) -- [Style Guidelines & Naming Conventions](#style-guidelines-and-naming-conventions) +- [Style Guidelines & Naming Conventions](#style-guidelines--naming-conventions) - [Creating a Pull Request](#creating-a-pull-request) @@ -102,7 +108,7 @@ touch Example.java Add the example you want to test to Example.java, including the headers at the top of the file. ``` bash -javac -classpath ../repo/com/sendgrid/4.2.1/sendgrid-4.2.1-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.2.1/sendgrid-4.2.1-jar.jar:. Example +javac -classpath ../repo/com/sendgrid/4.3.0/sendgrid-4.3.0-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.3.0/sendgrid-4.3.0-jar.jar:. Example ``` diff --git a/README.md b/README.md index 6a08285b..b4e1566f 100644 --- a/README.md +++ b/README.md @@ -67,7 +67,7 @@ Add the following to your build.gradle file in the root of your project. ... dependencies { ... - implementation 'com.sendgrid:sendgrid-java:4.2.1' + implementation 'com.sendgrid:sendgrid-java:4.3.0' } repositories { @@ -86,7 +86,7 @@ mvn install You can just drop the jar file in. It's a fat jar - it has all the dependencies built in. -[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/v4.2.1/sendgrid-java.jar) +[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/v4.3.0/sendgrid-java.jar) ## Dependencies diff --git a/build.gradle b/build.gradle index 5a8ba959..149f8a6b 100644 --- a/build.gradle +++ b/build.gradle @@ -17,7 +17,7 @@ apply plugin: 'maven' apply plugin: 'signing' group = 'com.sendgrid' -version = '4.2.1' +version = '4.3.0' ext.packaging = 'jar' allprojects { diff --git a/pom.xml b/pom.xml index e6f0541c..6a6619fa 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ com.sendgrid sendgrid-java SendGrid Java helper library - 4.2.1 + 4.3.0 This Java module allows you to quickly and easily send emails through SendGrid using Java. https://github.com/sendgrid/sendgrid-java From ba77a01526cc1d10ea719ed7a5f0561110e9bede Mon Sep 17 00:00:00 2001 From: Rohit-T Date: Thu, 11 Oct 2018 22:38:24 -0400 Subject: [PATCH 120/345] Add ability to impersonate subusers SendGrid API has a feature that allows a parent account to impersonate subusers by including an HTTP header "on-behalf-of" in the API request. This commit enables users to use impersonation. --- src/main/java/com/sendgrid/SendGrid.java | 28 +++++++++++++++++++ src/test/java/com/sendgrid/SendGridTest.java | 29 ++++++++++++++++++++ 2 files changed, 57 insertions(+) diff --git a/src/main/java/com/sendgrid/SendGrid.java b/src/main/java/com/sendgrid/SendGrid.java index 4bcdadc5..f1686516 100644 --- a/src/main/java/com/sendgrid/SendGrid.java +++ b/src/main/java/com/sendgrid/SendGrid.java @@ -41,6 +41,9 @@ public class SendGrid implements SendGridAPI { /** The number of milliseconds to sleep between retries. */ private int rateLimitSleep; + /** The subuser to be impersonated. */ + private String subuser; + /** * Construct a new SendGrid API wrapper. * @param apiKey is your SendGrid API Key: https://app.sendgrid.com/settings/api_keys @@ -193,6 +196,31 @@ public void setRateLimitSleep(int rateLimitSleep) { this.rateLimitSleep = rateLimitSleep; } + /** + * Impersonate subuser for subsequent requests + * @param subuser the subuser to be impersonated + */ + public void addImpersonateSubuser(String subuser) { + this.subuser = subuser; + this.addRequestHeader("on-behalf-of", subuser); + } + + /** + * Stop Impersonating the subuser + */ + public void removeImpersonateSubuser() { + this.subuser = null; + this.removeRequestHeader("on-behalf-of"); + } + + /** + * Get the impersonated subuser or null if empty + * @return the impersonated subuser + */ + public String getImpersonateSubuser() { + return this.subuser; + } + /** * Makes the call to the SendGrid API, override this method for testing. * @param request the request to make. diff --git a/src/test/java/com/sendgrid/SendGridTest.java b/src/test/java/com/sendgrid/SendGridTest.java index 7a3e9b22..1873be71 100644 --- a/src/test/java/com/sendgrid/SendGridTest.java +++ b/src/test/java/com/sendgrid/SendGridTest.java @@ -3406,4 +3406,33 @@ public void test_whitelabel_links__link_id__subuser_post() throws IOException { Assert.assertEquals(200, response.getStatusCode()); } + @Test + public void test_add_impersonate_subuser() { + SendGrid sg = new SendGrid(SENDGRID_API_KEY); + + sg.addImpersonateSubuser("subusername"); + Assert.assertEquals(sg.getRequestHeaders().get("on-behalf-of"), "subusername"); + } + + @Test + public void test_remove_impersonate_subuser() { + SendGrid sg = new SendGrid(SENDGRID_API_KEY); + + sg.addImpersonateSubuser("subusername"); + Assert.assertEquals(sg.getRequestHeaders().get("on-behalf-of"), "subusername"); + + sg.removeImpersonateSubuser(); + Assert.assertEquals(sg.getRequestHeaders().get("on-behalf-of"), null); + } + + @Test + public void test_get_impersonate_subuser() { + SendGrid sg = new SendGrid(SENDGRID_API_KEY); + + sg.addImpersonateSubuser("subusername"); + Assert.assertEquals(sg.getImpersonateSubuser(), "subusername"); + + sg.removeImpersonateSubuser(); + Assert.assertEquals(sg.getImpersonateSubuser(), null); + } } From 8a97abe696e845f781e849e7c23abe2fd99af23a Mon Sep 17 00:00:00 2001 From: Kyle Roberts Date: Fri, 12 Oct 2018 08:01:23 -0600 Subject: [PATCH 121/345] Update USE_CASES.md Removed some parts that would be confusing about new dynamic templates. --- USE_CASES.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/USE_CASES.md b/USE_CASES.md index 5816669e..204f74ce 100644 --- a/USE_CASES.md +++ b/USE_CASES.md @@ -8,9 +8,7 @@ This documentation provides examples for specific use cases. Please [open an iss * [How to View Email Statistics](#email-stats) -# (LEGACY) Transactional Templates - -IF YOU ARE USING OUR NEW TEMPLATES, PLEASE SEE [THIS ISSUE](https://github.com/sendgrid/sendgrid-java/issues/447). +# Transactional Templates For this example, we assume you have created a [transactional template](https://sendgrid.com/docs/User_Guide/Transactional_Templates/index.html). Following is the template content we used for testing. From 58ae93a52e5ae512caf0f49ec4da16ad49bb362a Mon Sep 17 00:00:00 2001 From: Kyle Roberts Date: Fri, 12 Oct 2018 15:26:46 -0600 Subject: [PATCH 122/345] Update USE_CASES.md Was missing the subject in the template and the dynamic data for the subject. --- USE_CASES.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/USE_CASES.md b/USE_CASES.md index 204f74ce..0ba2aeb1 100644 --- a/USE_CASES.md +++ b/USE_CASES.md @@ -17,7 +17,11 @@ Template ID (replace with your own): ```text d-2c214ac919e84170b21855cc129b4a5f ``` +Email Subject: +```text +{{subject}} +``` Template Body: ```html @@ -49,6 +53,7 @@ public class Example { mail.setTemplateId("d-2c214ac919e84170b21855cc129b4a5f"); Personalization personalization = new Personalization(); + personalization.addDynamicTemplateData("subject", "Testing Templates"); personalization.addDynamicTemplateData("name", "Example User"); personalization.addDynamicTemplateData("city", "Denver"); personalization.addTo(new Email("test@example.com")); @@ -89,7 +94,7 @@ public class Example { \"personalizations\": [{ \"to\": [{\"email\": \"test@example.com\"}], - \"dynamic_template_data\": {\"name\": \"Example User\", \"city\": \"Denver\"} + \"dynamic_template_data\": {\"subject\": \"Testing Templates\",\"name\": \"Example User\", \"city\": \"Denver\"} }], \"template_id\": \"d-2c214ac919e84170b21855cc129b4a5f\"}"); Response response = sg.api(request); From e160d8f9bd982dcc4c8695cdab484fc86858badd Mon Sep 17 00:00:00 2001 From: pushkyn Date: Sat, 13 Oct 2018 18:03:03 +0300 Subject: [PATCH 123/345] Update CONTRIBUTING - using gitflow workflow, development branch instead master --- .github/PULL_REQUEST_TEMPLATE | 2 +- CONTRIBUTING.md | 12 +++++++----- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/.github/PULL_REQUEST_TEMPLATE b/.github/PULL_REQUEST_TEMPLATE index ba377ae7..bd65d2ff 100644 --- a/.github/PULL_REQUEST_TEMPLATE +++ b/.github/PULL_REQUEST_TEMPLATE @@ -12,7 +12,7 @@ Closes #2 ### Checklist - [ ] I have made a material change to the repo (functionality, testing, spelling, grammar) - [ ] I have read the [Contribution Guide] and my PR follows them. -- [ ] I updated my branch with the master branch. +- [ ] I updated my branch with the development branch. - [ ] I have added tests that prove my fix is effective or that my feature works - [ ] I have added necessary documentation about the functionality in the appropriate .md file - [ ] I have added in line documentation to the code I modified diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 91668795..230fab0b 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,4 +1,4 @@ -Hello! Thank you for choosing to help contribute to one of the SendGrid open source libraries. There are many ways you can contribute and help is always welcome. We simply ask that you follow the following contribution policies. +Hello! Thank you for choosing to help contribute to one of the SendGrid open source libraries. There are many ways you can contribute and help is always welcome. We simply ask that you follow the following contribution policies. - [CLAs and CCLAs](#clas-and-cclas) - [Feature Request](#feature-request) @@ -64,6 +64,8 @@ In order to make the process easier, we've included a [sample bug report templat We welcome direct contributions to the sendgrid-java code base. Thank you! +Please note that we utilize the [Gitflow Workflow](https://www.atlassian.com/git/tutorials/comparing-workflows/gitflow-workflow) for Git to help keep project development organized and consistent. + ### Development Environment ### #### Install and Run Locally #### @@ -193,7 +195,7 @@ Please run your code through: contain your feature, change, or fix: ```bash - git checkout -b + git checkout -b development ``` 4. Commit your changes in logical chunks. Please adhere to these [git commit @@ -206,10 +208,10 @@ Please run your code through: 4b. Create or update the example code that demonstrates the functionality of this change to the code. -5. Locally merge (or rebase) the upstream development branch into your topic branch: +5. Locally merge (or rebase) the upstream `development` branch into your topic branch: ```bash - git pull [--rebase] upstream master + git pull [--rebase] upstream development ``` 6. Push your topic branch up to your fork: @@ -219,6 +221,6 @@ Please run your code through: ``` 7. [Open a Pull Request](https://help.github.com/articles/using-pull-requests/) - with a clear title and description against the `master` branch. All tests must be passing before we will review the PR. + with a clear title and description against the `development` branch. All tests must be passing before we will review the PR. If you have any additional questions, please feel free to [email](mailto:dx@sendgrid.com) us or create an issue in this repo. From 4b1d7a3933c64f749881e0ccded518e147bb549b Mon Sep 17 00:00:00 2001 From: Andrew Joshua Loria Date: Wed, 17 Oct 2018 14:30:31 -0700 Subject: [PATCH 124/345] Update TROUBLESHOOTING.md Fixed broken link. --- TROUBLESHOOTING.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/TROUBLESHOOTING.md b/TROUBLESHOOTING.md index e510304b..cc899ebc 100644 --- a/TROUBLESHOOTING.md +++ b/TROUBLESHOOTING.md @@ -50,7 +50,7 @@ You can just drop the jar file in. It's a fat jar - it has all the dependencies ## Testing v3 /mail/send Calls Directly -[Here](https://sendgrid.com/docs/Classroom/Send/v3_Mail_Send/curl_examples.html) are some cURL examples for common use cases. +[Here](https://sendgrid.com/docs/for-developers/sending-email/curl-examples/) are some cURL examples for common use cases. ## Versions @@ -108,4 +108,4 @@ You can do this right before you call `request.setBody(mail.build())` like so: ```java System.out.println(mail.build()); -``` \ No newline at end of file +``` From 0865590f1df2ecf604d0b0354ad67032cea92c4e Mon Sep 17 00:00:00 2001 From: Chandler Weiner Date: Thu, 25 Oct 2018 17:04:23 -0400 Subject: [PATCH 125/345] Fix link to LICENSE.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b4e1566f..ef4b904c 100644 --- a/README.md +++ b/README.md @@ -237,4 +237,4 @@ Please email the Developer Experience Team [here](mailto:dx@sendgrid.com) in cas sendgrid-java is maintained and funded by SendGrid, Inc. The names and logos for sendgrid-java are trademarks of SendGrid, Inc. # License -[The MIT License (MIT)](LICENSE.txt) +[The MIT License (MIT)](LICENSE.md) From 1e4e11d11cc93b76eae97331df330e3345f5b086 Mon Sep 17 00:00:00 2001 From: Chandler Weiner Date: Fri, 26 Oct 2018 11:41:43 -0400 Subject: [PATCH 126/345] Fix MIT LICENSE Badge --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index ef4b904c..c6b4ba10 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ [![Twitter Follow](https://img.shields.io/twitter/follow/sendgrid.svg?style=social&label=Follow)](https://twitter.com/sendgrid) [![GitHub contributors](https://img.shields.io/github/contributors/sendgrid/sendgrid-java.svg)](https://github.com/sendgrid/sendgrid-java/graphs/contributors) [![Open Source Helpers](https://www.codetriage.com/sendgrid/sendgrid-java/badges/users.svg)](https://www.codetriage.com/sendgrid/sendgrid-java) -[![MIT licensed](https://img.shields.io/badge/license-MIT-blue.svg)](./LICENSE.txt) +[![MIT licensed](https://img.shields.io/badge/license-MIT-blue.svg)](./LICENSE.md) **NEW:** Subscribe to email [notifications](https://dx.sendgrid.com/newsletter/java) for releases and breaking changes. From bf0e731bfa5c1858077dc30071d8a2eb1843abba Mon Sep 17 00:00:00 2001 From: Rishabh Chaudhary Date: Tue, 30 Oct 2018 00:42:07 +0530 Subject: [PATCH 127/345] Updating the prerequisites --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b4e1566f..938d48a9 100644 --- a/README.md +++ b/README.md @@ -39,7 +39,7 @@ We appreciate your continued support, thank you! ## Prerequisites - Java version Oracle JDK 7, 8 or OpenJDK 7 -- The SendGrid service, starting at the [free level](https://sendgrid.com/free?source=sendgrid-java) +- The SendGrid service, starting at the [free level](https://sendgrid.com/free?source=sendgrid-java) to send up to 40,000 emails for the first 30 days, then send 100 emails/day free forever or check out [our pricing](https://sendgrid.com/pricing?source=sendgrid-java). ## Setup Environment Variables From 3eb85a4a92516f454184f085c9069697fbe3f995 Mon Sep 17 00:00:00 2001 From: chandler Date: Wed, 31 Oct 2018 15:48:58 -0400 Subject: [PATCH 128/345] Remove references to 'whitelabel' Signed-off-by: chandler --- USAGE.md | 1971 ++++++++--------- USE_CASES.md | 10 +- .../domains.java | 24 +- .../ips.java | 10 +- .../links.java | 20 +- 5 files changed, 1017 insertions(+), 1018 deletions(-) rename examples/{whitelabel => senderauthentication}/domains.java (94%) rename examples/{whitelabel => senderauthentication}/ips.java (95%) rename examples/{whitelabel => senderauthentication}/links.java (95%) diff --git a/USAGE.md b/USAGE.md index cf25b2c6..f31ea17d 100644 --- a/USAGE.md +++ b/USAGE.md @@ -40,13 +40,13 @@ public class Example { * [PARTNER SETTINGS](#partner-settings) * [SCOPES](#scopes) * [SENDERS](#senders) +* [SENDER AUTHENTICATION](#sender-authentication) * [STATS](#stats) * [SUBUSERS](#subusers) * [SUPPRESSION](#suppression) * [TEMPLATES](#templates) * [TRACKING SETTINGS](#tracking-settings) * [USER](#user) -* [WHITELABEL](#whitelabel) @@ -2258,7 +2258,7 @@ Advanced Stats provide a more in-depth view of your email statistics and the act **This endpoint allows you to retrieve a list of all assigned and unassigned IPs.** -Response includes warm up status, pools, assigned subusers, and whitelabel info. The start_date field corresponds to when warmup started for that IP. +Response includes warm up status, pools, assigned subusers, and authorization info. The start_date field corresponds to when warmup started for that IP. A single IP address or a range of IP addresses may be dedicated to an account in order to send email for multiple domains. The reputation of this IP is based on the aggregate performance of all the senders who use it. @@ -3349,7 +3349,7 @@ API Keys can be used to authenticate the use of [SendGrids v3 Web API](https://s *You may create up to 100 unique sender identities.* -Sender Identities are required to be verified before use. If your domain has been whitelabeled it will auto verify on creation. Otherwise an email will be sent to the `from.email`. +Sender Identities are required to be verified before use. If your domain has been authorized, it will auto verify on creation. Otherwise an email will be sent to the `from.email`. ### POST /senders @@ -3373,7 +3373,7 @@ Sender Identities are required to be verified before use. If your domain has bee **This endpoint allows you to retrieve a list of all sender identities that have been created for your account.** -Sender Identities are required to be verified before use. If your domain has been whitelabeled it will auto verify on creation. Otherwise an email will be sent to the `from.email`. +Sender Identities are required to be verified before use. If your domain has been authorized, it will auto verify on creation. Otherwise an email will be sent to the `from.email`. ### GET /senders @@ -3396,7 +3396,7 @@ Sender Identities are required to be verified before use. If your domain has bee **This endpoint allows you to update a sender identity.** -Updates to `from.email` require re-verification. If your domain has been whitelabeled it will auto verify on creation. Otherwise an email will be sent to the `from.email`. +Updates to `from.email` require re-verification. If your domain has been authorized, it will auto verify on creation. Otherwise an email will be sent to the `from.email`. Partial updates are allowed, but fields that are marked as "required" in the POST (create) endpoint must not be nil if that field is included in the PATCH request. @@ -3422,7 +3422,7 @@ Partial updates are allowed, but fields that are marked as "required" in the POS **This endpoint allows you to retrieve a specific sender identity.** -Sender Identities are required to be verified before use. If your domain has been whitelabeled it will auto verify on creation. Otherwise an email will be sent to the `from.email`. +Sender Identities are required to be verified before use. If your domain has been authorized, it will auto verify on creation. Otherwise an email will be sent to the `from.email`. ### GET /senders/{sender_id} @@ -3445,7 +3445,7 @@ Sender Identities are required to be verified before use. If your domain has bee **This endpoint allows you to delete one of your sender identities.** -Sender Identities are required to be verified before use. If your domain has been whitelabeled it will auto verify on creation. Otherwise an email will be sent to the `from.email`. +Sender Identities are required to be verified before use. If your domain has been authorized, it will auto verify on creation. Otherwise an email will be sent to the `from.email`. ### DELETE /senders/{sender_id} @@ -3468,7 +3468,7 @@ Sender Identities are required to be verified before use. If your domain has bee **This endpoint allows you to resend a sender identity verification email.** -Sender Identities are required to be verified before use. If your domain has been whitelabeled it will auto verify on creation. Otherwise an email will be sent to the `from.email`. +Sender Identities are required to be verified before use. If your domain has been authorized, it will auto verify on creation. Otherwise an email will be sent to the `from.email`. ### POST /senders/{sender_id}/resend_verification @@ -3487,29 +3487,31 @@ Sender Identities are required to be verified before use. If your domain has bee throw ex; } ``` - -# STATS + +# SENDER AUTHENTICATION -## Retrieve global email statistics +## Create an authenticated domain. -**This endpoint allows you to retrieve all of your global email statistics between a given date range.** +**This endpoint allows you to create a domain authentication for one of your domains.** -Parent accounts will see aggregated stats for their account and all subuser accounts. Subuser accounts will only see their own stats. +If you are creating a domain authentication that you would like a subuser to use, you have two options: +1. Use the "username" parameter. This allows you to create am authenticated subuser. This means the subuser is able to see and modify the created authentication. +2. Use the Association workflow (see Associate Domain section). This allows you to assign a domain authentication created by the parent to a subuser. This means the subuser will default to the assigned domain authentication, but will not be able to see or modify that authentication. However, if the subuser creates their own domain authentication it will overwrite the assigned domain authentication. -### GET /stats +A domain authentication allows you to remove the via or sent on behalf of message that your recipients see when they read your emails. Authenticating a domain allows you to replace sendgrid.net with your personal sending domain. You will be required to create a subdomain so that SendGrid can generate the DNS records which you must give to your host provider. If you choose to use Automated Security, SendGrid will provide you with 3 CNAME records. If you turn Automated Security off, you will be given 2 TXT records and 1 MX record. + +For more information on domain authentication, please see our [User Guide](https://sendgrid.com/docs/ui/account-and-settings/how-to-set-up-domain-authentication/) + +### POST /whitelabel/domains ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("stats"); - request.addQueryParam("aggregated_by", "day"); - request.addQueryParam("limit", "1"); - request.addQueryParam("start_date", "2016-01-01"); - request.addQueryParam("end_date", "2016-04-01"); - request.addQueryParam("offset", "1"); + request.setMethod(Method.POST); + request.setEndpoint("whitelabel/domains"); + request.setBody("{\"automatic)_security\":false,\"username\":\"john@example.com\",\"domain\":\"example.com\",\"default\":true,\"custom_spf\":true,\"ips\":[\"192.168.1.1\",\"192.168.1.2\"],\"subdomain\":\"news\"}"; Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -3518,28 +3520,28 @@ Parent accounts will see aggregated stats for their account and all subuser acco throw ex; } ``` - -# SUBUSERS - -## Create Subuser +## List all domain authentications. -This endpoint allows you to retrieve a list of all of your subusers. You can choose to retrieve specific subusers as well as limit the results that come back from the API. +**This endpoint allows you to retrieve a list of all domain authentications you have created.** -For more information about Subusers: +A domain authentication allows you to remove the via or sent on behalf of message that your recipients see when they read your emails. Authenticating a domain allows you to replace sendgrid.net with your personal sending domain. You will be required to create a subdomain so that SendGrid can generate the DNS records which you must give to your host provider. If you choose to use Automated Security, SendGrid will provide you with 3 CNAME records. If you turn Automated Security off, you will be given 2 TXT records and 1 MX record. -* [User Guide > Subusers](https://sendgrid.com/docs/User_Guide/Settings/Subusers/index.html) -* [Classroom > How do I add more subusers to my account?](https://sendgrid.com/docs/Classroom/Basics/Account/how_do_i_add_more_subusers_to_my_account.html) +For more information on domain authentication, please see our [User Guide](https://sendgrid.com/docs/ui/account-and-settings/how-to-set-up-domain-authentication/) -### POST /subusers +### GET /whitelabel/domains ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.POST); - request.setEndpoint("subusers"); - request.setBody("{\"username\":\"John@example.com\",\"ips\":[\"1.1.1.1\",\"2.2.2.2\"],\"password\":\"johns_password\",\"email\)":\"John@example.com\"}"; + request.setMethod(Method.GET); + request.setEndpoint("whitelabel/domains"); + request.addQueryParam("username", "test_string"); + request.addQueryParam("domain", "test_string"); + request.addQueryParam("exclude_subusers", "true"); + request.addQueryParam("limit", "1"); + request.addQueryParam("offset", "1"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -3548,16 +3550,20 @@ For more information about Subusers: throw ex; } ``` -## List all Subusers +## Get the default domain authentication. -This endpoint allows you to retrieve a list of all of your subusers. You can choose to retrieve specific subusers as well as limit the results that come back from the API. +**This endpoint allows you to retrieve the default authentication for a domain.** -For more information about Subusers: +A domain authentication allows you to remove the via or sent on behalf of message that your recipients see when they read your emails. Authenticating a domain allows you to replace sendgrid.net with your personal sending domain. You will be required to create a subdomain so that SendGrid can generate the DNS records which you must give to your host provider. If you choose to use Automated Security, SendGrid will provide you with 3 CNAME records. If you turn Automated Security off, you will be given 2 TXT records and 1 MX record. -* [User Guide > Subusers](https://sendgrid.com/docs/User_Guide/Settings/Subusers/index.html) -* [Classroom > How do I add more subusers to my account?](https://sendgrid.com/docs/Classroom/Basics/Account/how_do_i_add_more_subusers_to_my_account.html) +For more information on domain authentication, please see our [User Guide](https://sendgrid.com/docs/ui/account-and-settings/how-to-set-up-domain-authentication/) -### GET /subusers +## URI Parameters +| URI Parameter | Type | Description | +|---|---|---| +| domain | string |The domain to find a default domain whitelabel for. | + +### GET /whitelabel/domains/default ```java @@ -3565,10 +3571,7 @@ For more information about Subusers: SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.setMethod(Method.GET); - request.setEndpoint("subusers"); - request.addQueryParam("username", "test_string"); - request.addQueryParam("limit", "1"); - request.addQueryParam("offset", "1"); + request.setEndpoint("whitelabel/domains/default"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -3577,13 +3580,22 @@ For more information about Subusers: throw ex; } ``` -## Retrieve Subuser Reputations +## List the domain authentication associated with the given user. -Subuser sender reputations give a good idea how well a sender is doing with regards to how recipients and recipient servers react to the mail that is being received. When a bounce, spam report, or other negative action happens on a sent email, it will effect your sender rating. +**This endpoint allows you to retrieve all of the domain authentications that have been assigned to a specific subuser.** -This endpoint allows you to request the reputations for your subusers. +A domain authentication allows you to remove the via or sent on behalf of message that your recipients see when they read your emails. Authenticating a domain allows you to replace sendgrid.net with your personal sending domain. You will be required to create a subdomain so that SendGrid can generate the DNS records which you must give to your host provider. If you choose to use Automated Security, SendGrid will provide you with 3 CNAME records. If you turn Automated Security off, you will be given 2 TXT records and 1 MX record. -### GET /subusers/reputations +Domain authentications can be associated with (i.e. assigned to) subusers from a parent account. This functionality allows subusers to send mail using their parent's authenticated domains. To associate a domain authentication with a subuser, the parent account must first create the domain authentication and validate it. The parent may then associate the domain authentication via the subuser management tools. + +For more information on domain authentication, please see our [User Guide]((https://sendgrid.com/docs/ui/account-and-settings/how-to-set-up-domain-authentication/) + +## URI Parameters +| URI Parameter | Type | Description | +|---|---|---| +| username | string | Username of the subuser to find associated whitelabels for. | + +### GET /whitelabel/domains/subuser ```java @@ -3591,8 +3603,7 @@ This endpoint allows you to request the reputations for your subusers. SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.setMethod(Method.GET); - request.setEndpoint("subusers/reputations"); - request.addQueryParam("usernames", "test_string"); + request.setEndpoint("whitelabel/domains/subuser"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -3601,31 +3612,30 @@ This endpoint allows you to request the reputations for your subusers. throw ex; } ``` -## Retrieve email statistics for your subusers. +## Disassociate a domain authentication from a given user. -**This endpoint allows you to retrieve the email statistics for the given subusers.** +**This endpoint allows you to disassociate a specific domain authentication from a subuser.** -You may retrieve statistics for up to 10 different subusers by including an additional _subusers_ parameter for each additional subuser. +A domain authentication allows you to remove the via or sent on behalf of message that your recipients see when they read your emails. Authenticating a domain allows you to replace sendgrid.net with your personal sending domain. You will be required to create a subdomain so that SendGrid can generate the DNS records which you must give to your host provider. If you choose to use Automated Security, SendGrid will provide you with 3 CNAME records. If you turn Automated Security off, you will be given 2 TXT records and 1 MX record. -While you can always view the statistics for all email activity on your account, subuser statistics enable you to view specific segments of your stats. Emails sent, bounces, and spam reports are always tracked for subusers. Unsubscribes, clicks, and opens are tracked if you have enabled the required settings. +Domain authentications can be associated with (i.e. assigned to) subusers from a parent account. This functionality allows subusers to send mail using their parent's authenticated domains. To associate a domain authentication with a subuser, the parent account must first create the domain authentication and validate it. The parent may then associate the domain authentication via the subuser management tools. -For more information, see our [User Guide](https://sendgrid.com/docs/User_Guide/Statistics/subuser.html). +For more information on domain authentication, please see our [User Guide]((https://sendgrid.com/docs/ui/account-and-settings/how-to-set-up-domain-authentication/) -### GET /subusers/stats +## URI Parameters +| URI Parameter | Type | Required? | Description | +|---|---|---|---| +| username | string | required | Username for the subuser to find associated whitelabels for. | + +### DELETE /whitelabel/domains/subuser ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("subusers/stats"); - request.addQueryParam("end_date", "2016-04-01"); - request.addQueryParam("aggregated_by", "day"); - request.addQueryParam("limit", "1"); - request.addQueryParam("offset", "1"); - request.addQueryParam("start_date", "2016-01-01"); - request.addQueryParam("subusers", "test_string"); + request.setMethod(Method.DELETE); + request.setEndpoint("whitelabel/domains/subuser"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -3634,32 +3644,24 @@ For more information, see our [User Guide](https://sendgrid.com/docs/User_Guide/ throw ex; } ``` -## Retrieve monthly stats for all subusers - -**This endpoint allows you to retrieve the monthly email statistics for all subusers over the given date range.** +## Update a domain authentication. -While you can always view the statistics for all email activity on your account, subuser statistics enable you to view specific segments of your stats for your subusers. Emails sent, bounces, and spam reports are always tracked for subusers. Unsubscribes, clicks, and opens are tracked if you have enabled the required settings. +**This endpoint allows you to update the settings for a domain authentication.** -When using the `sort_by_metric` to sort your stats by a specific metric, you can not sort by the following metrics: -`bounce_drops`, `deferred`, `invalid_emails`, `processed`, `spam_report_drops`, `spam_reports`, or `unsubscribe_drops`. +A domain authentication allows you to remove the via or sent on behalf of message that your recipients see when they read your emails. Authenticating a domain allows you to replace sendgrid.net with your personal sending domain. You will be required to create a subdomain so that SendGrid can generate the DNS records which you must give to your host provider. If you choose to use Automated Security, SendGrid will provide you with 3 CNAME records. If you turn Automated Security off, you will be given 2 TXT records and 1 MX record. -For more information, see our [User Guide](https://sendgrid.com/docs/User_Guide/Statistics/subuser.html). +For more information on domain authentication, please see our [User Guide]((https://sendgrid.com/docs/ui/account-and-settings/how-to-set-up-domain-authentication/) -### GET /subusers/stats/monthly +### PATCH /whitelabel/domains/{domain_id} ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("subusers/stats/monthly"); - request.addQueryParam("subuser", "test_string"); - request.addQueryParam("limit", "1"); - request.addQueryParam("sort_by_metric", "test_string"); - request.addQueryParam("offset", "1"); - request.addQueryParam("date", "test_string"); - request.addQueryParam("sort_by_direction", "asc"); + request.setMethod(Method.PATCH); + request.setEndpoint("whitelabel/domains/{domain_id}"); + request.setBody("{\"default\":false,\"custom_spf\":true}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -3668,16 +3670,16 @@ For more information, see our [User Guide](https://sendgrid.com/docs/User_Guide/ throw ex; } ``` -## Retrieve the totals for each email statistic metric for all subusers. +## Retrieve a domain authentication. -**This endpoint allows you to retrieve the total sums of each email statistic metric for all subusers over the given date range.** +**This endpoint allows you to retrieve a specific domain authentication.** +A domain authentication allows you to remove the via or sent on behalf of message that your recipients see when they read your emails. Authenticating a domain allows you to replace sendgrid.net with your personal sending domain. You will be required to create a subdomain so that SendGrid can generate the DNS records which you must give to your host provider. If you choose to use Automated Security, SendGrid will provide you with 3 CNAME records. If you turn Automated Security off, you will be given 2 TXT records and 1 MX record. -While you can always view the statistics for all email activity on your account, subuser statistics enable you to view specific segments of your stats. Emails sent, bounces, and spam reports are always tracked for subusers. Unsubscribes, clicks, and opens are tracked if you have enabled the required settings. +For more information on domain authentication, please see our [User Guide]((https://sendgrid.com/docs/ui/account-and-settings/how-to-set-up-domain-authentication/) -For more information, see our [User Guide](https://sendgrid.com/docs/User_Guide/Statistics/subuser.html). -### GET /subusers/stats/sums +### GET /whitelabel/domains/{domain_id} ```java @@ -3685,14 +3687,7 @@ For more information, see our [User Guide](https://sendgrid.com/docs/User_Guide/ SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.setMethod(Method.GET); - request.setEndpoint("subusers/stats/sums"); - request.addQueryParam("end_date", "2016-04-01"); - request.addQueryParam("aggregated_by", "day"); - request.addQueryParam("limit", "1"); - request.addQueryParam("sort_by_metric", "test_string"); - request.addQueryParam("offset", "1"); - request.addQueryParam("start_date", "2016-01-01"); - request.addQueryParam("sort_by_direction", "asc"); + request.setEndpoint("whitelabel/domains/{domain_id}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -3701,25 +3696,23 @@ For more information, see our [User Guide](https://sendgrid.com/docs/User_Guide/ throw ex; } ``` -## Enable/disable a subuser +## Delete a domain authentication. -This endpoint allows you to enable or disable a subuser. +**This endpoint allows you to delete a domain authentication.** -For more information about Subusers: +A domain authentication allows you to remove the via or sent on behalf of message that your recipients see when they read your emails. Authenticating a domain allows you to replace sendgrid.net with your personal sending domain. You will be required to create a subdomain so that SendGrid can generate the DNS records which you must give to your host provider. If you choose to use Automated Security, SendGrid will provide you with 3 CNAME records. If you turn Automated Security off, you will be given 2 TXT records and 1 MX record. -* [User Guide > Subusers](https://sendgrid.com/docs/User_Guide/Settings/Subusers/index.html) -* [Classroom > How do I add more subusers to my account?](https://sendgrid.com/docs/Classroom/Basics/Account/how_do_i_add_more_subusers_to_my_account.html) +For more information on domain authentication, please see our [User Guide]((https://sendgrid.com/docs/ui/account-and-settings/how-to-set-up-domain-authentication/) -### PATCH /subusers/{subuser_name} +### DELETE /whitelabel/domains/{domain_id} ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.PATCH); - request.setEndpoint("subusers/{subuser_name}"); - request.setBody("{\"disabled\":false}"); + request.setMethod(Method.DELETE); + request.setEndpoint("whitelabel/domains/{domain_id}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -3728,24 +3721,31 @@ For more information about Subusers: throw ex; } ``` -## Delete a subuser +## Associate a domain authentication with a given user. -This endpoint allows you to delete a subuser. This is a permanent action, once deleted a subuser cannot be retrieved. +**This endpoint allows you to associate a specific domain authentication with a subuser.** -For more information about Subusers: +A domain authentication allows you to remove the via or sent on behalf of message that your recipients see when they read your emails. Authenticating a domain allows you to replace sendgrid.net with your personal sending domain. You will be required to create a subdomain so that SendGrid can generate the DNS records which you must give to your host provider. If you choose to use Automated Security, SendGrid will provide you with 3 CNAME records. If you turn Automated Security off, you will be given 2 TXT records and 1 MX record. -* [User Guide > Subusers](https://sendgrid.com/docs/User_Guide/Settings/Subusers/index.html) -* [Classroom > How do I add more subusers to my account?](https://sendgrid.com/docs/Classroom/Basics/Account/how_do_i_add_more_subusers_to_my_account.html) +Domain authentications can be associated with (i.e. assigned to) subusers from a parent account. This functionality allows subusers to send mail using their parent's authenticated domains. To associate a domain authentication with a subuser, the parent account must first create the domain authentication and validate it. The parent may then associate the domain authentication via the subuser management tools. -### DELETE /subusers/{subuser_name} +For more information on domain authentication, please see our [User Guide]((https://sendgrid.com/docs/ui/account-and-settings/how-to-set-up-domain-authentication/) + +## URI Parameters +| URI Parameter | Type | Description | +|---|---|---| +| domain_id | integer | ID of the domain whitelabel to associate with the subuser. | + +### POST /whitelabel/domains/{domain_id}/subuser ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.DELETE); - request.setEndpoint("subusers/{subuser_name}"); + request.setMethod(Method.POST); + request.setEndpoint("whitelabel/domains/{domain_id}/subuser"); + request.setBody("{\"username\":\"jane@example.com\"}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -3754,25 +3754,29 @@ For more information about Subusers: throw ex; } ``` -## Update IPs assigned to a subuser +## Add an IP to a domain authentication. -Each subuser should be assigned to an IP address, from which all of this subuser's mail will be sent. Often, this is the same IP as the parent account, but each subuser can have their own, or multiple, IP addresses as well. +**This endpoint allows you to add an IP address to a domain authentication.** -More information: +A domain authentication allows you to remove the via or sent on behalf of message that your recipients see when they read your emails. Authenticating a domain allows you to replace sendgrid.net with your personal sending domain. You will be required to create a subdomain so that SendGrid can generate the DNS records which you must give to your host provider. If you choose to use Automated Security, SendGrid will provide you with 3 CNAME records. If you turn Automated Security off, you will be given 2 TXT records and 1 MX record. -* [How to request more IPs](https://sendgrid.com/docs/Classroom/Basics/Account/adding_an_additional_dedicated_ip_to_your_account.html) -* [IPs can be whitelabeled](https://sendgrid.com/docs/User_Guide/Settings/Whitelabel/ips.html) +For more information on domain authentication, please see our [User Guide]((https://sendgrid.com/docs/ui/account-and-settings/how-to-set-up-domain-authentication/) -### PUT /subusers/{subuser_name}/ips +## URI Parameters +| URI Parameter | Type | Description | +|---|---|---| +| id | integer | ID of the domain to which you are adding an IP | + +### POST /whitelabel/domains/{id}/ips ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.PUT); - request.setEndpoint("subusers/{subuser_name}/ips"); - request.setBody("[\"127.0.0.1\"]"); + request.setMethod(Method.POST); + request.setEndpoint("whitelabel/domains/{id}/ips"); + request.setBody("{\"ip\":\"192.168.0.1\"}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -3781,20 +3785,29 @@ More information: throw ex; } ``` -## Update Monitor Settings for a subuser +## Remove an IP from a domain authenticaiton. -Subuser monitor settings allow you to receive a sample of an outgoing message by a specific customer at a specific frequency of emails. +**This endpoint allows you to remove a domain's IP address from that domain's authentication.** -### PUT /subusers/{subuser_name}/monitor +A domain authentication allows you to remove the via or sent on behalf of message that your recipients see when they read your emails. Authenticating a domain allows you to replace sendgrid.net with your personal sending domain. You will be required to create a subdomain so that SendGrid can generate the DNS records which you must give to your host provider. If you choose to use Automated Security, SendGrid will provide you with 3 CNAME records. If you turn Automated Security off, you will be given 2 TXT records and 1 MX record. + +For more information on domain authentication, please see our [User Guide]((https://sendgrid.com/docs/ui/account-and-settings/how-to-set-up-domain-authentication/) + +## URI Parameters +| URI Parameter | Type | Description | +|---|---|---| +| id | integer | ID of the domain whitelabel to delete the IP from. | +| ip | string | IP to remove from the domain whitelabel. | + +### DELETE /whitelabel/domains/{id}/ips/{ip} ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.PUT); - request.setEndpoint("subusers/{subuser_name}/monitor"); - request.setBody("{\"frequency\":500,\"email\":\"example@example.com\"}"); + request.setMethod(Method.DELETE); + request.setEndpoint("whitelabel/domains/{id}/ips/{ip}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -3803,11 +3816,20 @@ Subuser monitor settings allow you to receive a sample of an outgoing message by throw ex; } ``` -## Create monitor settings +## Validate a domain authentication. -Subuser monitor settings allow you to receive a sample of an outgoing message by a specific customer at a specific frequency of emails. +**This endpoint allows you to validate a domain authentication. If it fails, it will return an error message describing why the domain could not be validated.** -### POST /subusers/{subuser_name}/monitor +A domain authentication allows you to remove the via or sent on behalf of message that your recipients see when they read your emails. Authenticating a domain allows you to replace sendgrid.net with your personal sending domain. You will be required to create a subdomain so that SendGrid can generate the DNS records which you must give to your host provider. If you choose to use Automated Security, SendGrid will provide you with 3 CNAME records. If you turn Automated Security off, you will be given 2 TXT records and 1 MX record. + +For more information on domain authentication, please see our [User Guide]((https://sendgrid.com/docs/ui/account-and-settings/how-to-set-up-domain-authentication/) + +## URI Parameters +| URI Parameter | Type | Description | +|---|---|---| +| id | integer |ID of the domain whitelabel to validate. | + +### POST /whitelabel/domains/{id}/validate ```java @@ -3815,8 +3837,7 @@ Subuser monitor settings allow you to receive a sample of an outgoing message by SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.setMethod(Method.POST); - request.setEndpoint("subusers/{subuser_name}/monitor"); - request.setBody("{\"frequency\":50000,\"email\":\"example@example.com\"}"); + request.setEndpoint("whitelabel/domains/{id}/validate"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -3825,19 +3846,26 @@ Subuser monitor settings allow you to receive a sample of an outgoing message by throw ex; } ``` -## Retrieve monitor settings for a subuser +## Create reverse DNS -Subuser monitor settings allow you to receive a sample of an outgoing message by a specific customer at a specific frequency of emails. +**This endpoint allows you to create a reverse DNS record.** -### GET /subusers/{subuser_name}/monitor +When creating a reverse DNS record, you should use the same subdomain that you used when you created a domain authentication. + +Reverse DNS consists of a subdomain and domain that will be used to generate a record for a given IP. Once SendGrid has verified that the appropriate A record for the IP has been created, the appropriate reverse DNS record for the IP is generated. + +For more information, please see our [User Guide](https://sendgrid.com/docs/ui/account-and-settings/how-to-set-up-reverse-dns/). + +### POST /whitelabel/ips ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("subusers/{subuser_name}/monitor"); + request.setMethod(Method.POST); + request.setEndpoint("whitelabel/ips"); + request.setBody("{\"ip\":\"192.168.1.1\",\"domain\":\"example.com\",\"subdomain\":\"email\"}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -3846,19 +3874,28 @@ Subuser monitor settings allow you to receive a sample of an outgoing message by throw ex; } ``` -## Delete monitor settings +## Retrieve all reverse DNS records -Subuser monitor settings allow you to receive a sample of an outgoing message by a specific customer at a specific frequency of emails. +**This endpoint allows you to retrieve all of the reverse DNS records that have been created by this account.** -### DELETE /subusers/{subuser_name}/monitor +You may include a search key by using the "ip" parameter. This enables you to perform a prefix search for a given IP segment (e.g. "192."). + +Reverse DNS consists of a subdomain and domain that will be used to generate a record for a given IP. Once SendGrid has verified that the appropriate A record for the IP has been created, the appropriate reverse DNS record for the IP is generated. + +For more information, please see our [User Guide](https://sendgrid.com/docs/ui/account-and-settings/how-to-set-up-reverse-dns/). + +### GET /whitelabel/ips ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.DELETE); - request.setEndpoint("subusers/{subuser_name}/monitor"); + request.setMethod(Method.GET); + request.setEndpoint("whitelabel/ips"); + request.addQueryParam("ip", "test_string"); + request.addQueryParam("limit", "1"); + request.addQueryParam("offset", "1"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -3867,18 +3904,15 @@ Subuser monitor settings allow you to receive a sample of an outgoing message by throw ex; } ``` -## Retrieve the monthly email statistics for a single subuser - -**This endpoint allows you to retrieve the monthly email statistics for a specific subuser.** +## Retrieve an reverse DNS record -While you can always view the statistics for all email activity on your account, subuser statistics enable you to view specific segments of your stats for your subusers. Emails sent, bounces, and spam reports are always tracked for subusers. Unsubscribes, clicks, and opens are tracked if you have enabled the required settings. +**This endpoint allows you to retrieve a reverse DNS record.** -When using the `sort_by_metric` to sort your stats by a specific metric, you can not sort by the following metrics: -`bounce_drops`, `deferred`, `invalid_emails`, `processed`, `spam_report_drops`, `spam_reports`, or `unsubscribe_drops`. +Reverse DNS consists of a subdomain and domain that will be used to generate a record for a given IP. Once SendGrid has verified that the appropriate A record for the IP has been created, the appropriate reverse DNS record for the IP is generated. -For more information, see our [User Guide](https://sendgrid.com/docs/User_Guide/Statistics/subuser.html). +For more information, please see our [User Guide](https://sendgrid.com/docs/ui/account-and-settings/how-to-set-up-reverse-dns/). -### GET /subusers/{subuser_name}/stats/monthly +### GET /whitelabel/ips/{id} ```java @@ -3886,12 +3920,7 @@ For more information, see our [User Guide](https://sendgrid.com/docs/User_Guide/ SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.setMethod(Method.GET); - request.setEndpoint("subusers/{subuser_name}/stats/monthly"); - request.addQueryParam("date", "test_string"); - request.addQueryParam("sort_by_direction", "asc"); - request.addQueryParam("limit", "1"); - request.addQueryParam("sort_by_metric", "test_string"); - request.addQueryParam("offset", "1"); + request.setEndpoint("whitelabel/ips/{id}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -3900,30 +3929,23 @@ For more information, see our [User Guide](https://sendgrid.com/docs/User_Guide/ throw ex; } ``` - -# SUPPRESSION +## Delete an reverse DNS record -## Retrieve all blocks +**This endpoint allows you to delete a reverse DNS record.** -**This endpoint allows you to retrieve a list of all email addresses that are currently on your blocks list.** +Reverse DNS consists of a subdomain and domain that will be used to generate a record for a given IP. Once SendGrid has verified that the appropriate A record for the IP has been created, the appropriate reverse DNS record for the IP is generated. -[Blocks](https://sendgrid.com/docs/Glossary/blocks.html) happen when your message was rejected for a reason related to the message, not the recipient address. This can happen when your mail server IP address has been added to a blacklist or blocked by an ISP, or if the message content is flagged by a filter on the receiving server. +For more information, please see our [User Guide](https://sendgrid.com/docs/ui/account-and-settings/how-to-set-up-reverse-dns/). -For more information, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Suppressions/blocks.html). - -### GET /suppression/blocks +### DELETE /whitelabel/ips/{id} ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("suppression/blocks"); - request.addQueryParam("start_time", "1"); - request.addQueryParam("limit", "1"); - request.addQueryParam("end_time", "1"); - request.addQueryParam("offset", "1"); + request.setMethod(Method.DELETE); + request.setEndpoint("whitelabel/ips/{id}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -3932,29 +3954,23 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/User throw ex; } ``` -## Delete blocks - -**This endpoint allows you to delete all email addresses on your blocks list.** - -There are two options for deleting blocked emails: +## Validate a reverse DNS record -1. You can delete all blocked emails by setting `delete_all` to true in the request body. -2. You can delete some blocked emails by specifying the email addresses in an array in the request body. +**This endpoint allows you to validate a reverse DNS record.** -[Blocks](https://sendgrid.com/docs/Glossary/blocks.html) happen when your message was rejected for a reason related to the message, not the recipient address. This can happen when your mail server IP address has been added to a blacklist or blocked by an ISP, or if the message content is flagged by a filter on the receiving server. +Reverse DNS consists of a subdomain and domain that will be used to generate a record for a given IP. Once SendGrid has verified that the appropriate A record for the IP has been created, the appropriate reverse DNS record for the IP is generated. -For more information, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Suppressions/blocks.html). +For more information, please see our [User Guide](https://sendgrid.com/docs/ui/account-and-settings/how-to-set-up-reverse-dns/). -### DELETE /suppression/blocks +### POST /whitelabel/ips/{id}/validate ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.DELETE); - request.setEndpoint("suppression/blocks"); - request.setBody("{\"emails\":[\"example1@example.com\",\"example2@example.com\"],\"delete_all\":false}"); + request.setMethod(Method.POST); + request.setEndpoint("whitelabel/ips/{id}/validate"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -3963,23 +3979,26 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/User throw ex; } ``` -## Retrieve a specific block +## Create a Branded Link -**This endpoint allows you to retrieve a specific email address from your blocks list.** +**This endpoint allows you to create a new link branding.** -[Blocks](https://sendgrid.com/docs/Glossary/blocks.html) happen when your message was rejected for a reason related to the message, not the recipient address. This can happen when your mail server IP address has been added to a blacklist or blocked by an ISP, or if the message content is flagged by a filter on the receiving server. +Email link branding allow all of the click-tracked links you send in your emails to include the URL of your domain instead of sendgrid.net. -For more information, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Suppressions/blocks.html). +For more information, please see our [User Guide](https://sendgrid.com/docs/ui/account-and-settings/how-to-set-up-link-branding/). -### GET /suppression/blocks/{email} +### POST /whitelabel/links ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("suppression/blocks/{email}"); + request.setMethod(Method.POST); + request.setEndpoint("whitelabel/links"); + request.setBody("{\"default\":true,\"domain\":\"example.com\",\"subdomain\":\"mail\"}"); + request.addQueryParam("limit", "1"); + request.addQueryParam("offset", "1"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -3988,23 +4007,24 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/User throw ex; } ``` -## Delete a specific block +## Retrieve all link brandings -**This endpoint allows you to delete a specific email address from your blocks list.** +**This endpoint allows you to retrieve all link brandings.** -[Blocks](https://sendgrid.com/docs/Glossary/blocks.html) happen when your message was rejected for a reason related to the message, not the recipient address. This can happen when your mail server IP address has been added to a blacklist or blocked by an ISP, or if the message content is flagged by a filter on the receiving server. +Email link branding allow all of the click-tracked links you send in your emails to include the URL of your domain instead of sendgrid.net. -For more information, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Suppressions/blocks.html). +For more information, please see our [User Guide](https://sendgrid.com/docs/ui/account-and-settings/how-to-set-up-link-branding/). -### DELETE /suppression/blocks/{email} +### GET /whitelabel/links ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.DELETE); - request.setEndpoint("suppression/blocks/{email}"); + request.setMethod(Method.GET); + request.setEndpoint("whitelabel/links"); + request.addQueryParam("limit", "1"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -4013,18 +4033,22 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/User throw ex; } ``` -## Retrieve all bounces +## Retrieve a Default Link Branding -**This endpoint allows you to retrieve all of your bounces.** +**This endpoint allows you to retrieve the default link branding.** -Bounces are messages that are returned to the server that sent it. +Default link branding is the actual link branding to be used when sending messages. If there are multiple link brandings, the default is determined by the following order: +
    +
  • Validated link branding marked as "default"
  • +
  • Legacy link brands (migrated from the whitelabel wizard)
  • +
  • Default SendGrid link whitelabel (i.e. 100.ct.sendgrid.net)
  • +
-For more information see: +Email link branding allow all of the click-tracked links you send in your emails to include the URL of your domain instead of sendgrid.net. -* [User Guide > Bounces](https://sendgrid.com/docs/User_Guide/Suppressions/bounces.html) for more information -* [Glossary > Bounces](https://sendgrid.com/docs/Glossary/Bounces.html) +For more information, please see our [User Guide](https://sendgrid.com/docs/ui/account-and-settings/how-to-set-up-link-branding/). -### GET /suppression/bounces +### GET /whitelabel/links/default ```java @@ -4032,9 +4056,8 @@ For more information see: SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.setMethod(Method.GET); - request.setEndpoint("suppression/bounces"); - request.addQueryParam("start_time", "1"); - request.addQueryParam("end_time", "1"); + request.setEndpoint("whitelabel/links/default"); + request.addQueryParam("domain", "test_string"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -4043,30 +4066,28 @@ For more information see: throw ex; } ``` -## Delete bounces +## Retrieve Associated Link Branding -**This endpoint allows you to delete all of your bounces. You can also use this endpoint to remove a specific email address from your bounce list.** - -Bounces are messages that are returned to the server that sent it. +**This endpoint allows you to retrieve the associated link branding for a subuser.** -For more information see: +Link branding can be associated with subusers from the parent account. This functionality allows +subusers to send mail using their parent's link brands. To associate a link branding, the parent account +must first create a branded link and validate it. The parent may then associate that branded link with a subuser via the API or the Subuser Management page in the user interface. -* [User Guide > Bounces](https://sendgrid.com/docs/User_Guide/Suppressions/bounces.html) for more information -* [Glossary > Bounces](https://sendgrid.com/docs/Glossary/Bounces.html) -* [Classroom > List Scrubbing Guide](https://sendgrid.com/docs/Classroom/Deliver/list_scrubbing.html) +Email link branding allow all of the click-tracked links you send in your emails to include the URL of your domain instead of sendgrid.net. -Note: the `delete_all` and `emails` parameters should be used independently of each other as they have different purposes. +For more information, please see our [User Guide](https://sendgrid.com/docs/ui/account-and-settings/how-to-set-up-link-branding/). -### DELETE /suppression/bounces +### GET /whitelabel/links/subuser ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.DELETE); - request.setEndpoint("suppression/bounces"); - request.setBody("{\"emails\":[\"example@example.com\",\"example2@example.com\"],\"delete_all\":true}"); + request.setMethod(Method.GET); + request.setEndpoint("whitelabel/links/subuser"); + request.addQueryParam("username", "test_string"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -4075,27 +4096,28 @@ Note: the `delete_all` and `emails` parameters should be used independently of e throw ex; } ``` -## Retrieve a Bounce +## Disassociate a Link Branding -**This endpoint allows you to retrieve a specific bounce for a given email address.** +**This endpoint allows you to disassociate a link branding from a subuser.** -Bounces are messages that are returned to the server that sent it. +Link branding can be associated with subusers from the parent account. This functionality allows +subusers to send mail using their parent's link brands. To associate a link branding, the parent account +must first create a branded link and validate it. The parent may then associate that branded link with a subuser via the API or the Subuser Management page in the user interface. -For more information see: +Email link branding allow all of the click-tracked links you send in your emails to include the URL of your domain instead of sendgrid.net. -* [User Guide > Bounces](https://sendgrid.com/docs/User_Guide/Suppressions/bounces.html) for more information -* [Glossary > Bounces](https://sendgrid.com/docs/Glossary/Bounces.html) -* [Classroom > List Scrubbing Guide](https://sendgrid.com/docs/Classroom/Deliver/list_scrubbing.html) +For more information, please see our [User Guide](https://sendgrid.com/docs/ui/account-and-settings/how-to-set-up-link-branding/). -### GET /suppression/bounces/{email} +### DELETE /whitelabel/links/subuser ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("suppression/bounces/{email}"); + request.setMethod(Method.DELETE); + request.setEndpoint("whitelabel/links/subuser"); + request.addQueryParam("username", "test_string"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -4104,28 +4126,24 @@ For more information see: throw ex; } ``` -## Delete a bounce - -**This endpoint allows you to remove an email address from your bounce list.** +## Update a Link Branding -Bounces are messages that are returned to the server that sent it. This endpoint allows you to delete a single email addresses from your bounce list. +**This endpoint allows you to update a specific link branding. You can use this endpoint to change a branded link's default status.** -For more information see: +Email link branding allow all of the click-tracked links you send in your emails to include the URL of your domain instead of sendgrid.net. -* [User Guide > Bounces](https://sendgrid.com/docs/User_Guide/Suppressions/bounces.html) for more information -* [Glossary > Bounces](https://sendgrid.com/docs/Glossary/Bounces.html) -* [Classroom > List Scrubbing Guide](https://sendgrid.com/docs/Classroom/Deliver/list_scrubbing.html) +For more information, please see our [User Guide](https://sendgrid.com/docs/ui/account-and-settings/how-to-set-up-link-branding/). -### DELETE /suppression/bounces/{email} +### PATCH /whitelabel/links/{id} ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.DELETE); - request.setEndpoint("suppression/bounces/{email}"); - request.addQueryParam("email_address", "example@example.com"); + request.setMethod(Method.PATCH); + request.setEndpoint("whitelabel/links/{id}"); + request.setBody("{\"default\":true}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -4134,17 +4152,15 @@ For more information see: throw ex; } ``` -## Retrieve all invalid emails - -**This endpoint allows you to retrieve a list of all invalid email addresses.** +## Retrieve a Link Branding -An invalid email occurs when you attempt to send email to an address that is formatted in a manner that does not meet internet email format standards or the email does not exist at the recipients mail server. +**This endpoint allows you to retrieve a specific link branding.** -Examples include addresses without the @ sign or addresses that include certain special characters and/or spaces. This response can come from our own server or the recipient mail server. +Email link branding allow all of the click-tracked links you send in your emails to include the URL of your domain instead of sendgrid.net. -For more information, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Suppressions/invalid_emails.html). +For more information, please see our [User Guide](https://sendgrid.com/docs/ui/account-and-settings/how-to-set-up-link-branding/). -### GET /suppression/invalid_emails +### GET /whitelabel/links/{id} ```java @@ -4152,11 +4168,7 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/User SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.setMethod(Method.GET); - request.setEndpoint("suppression/invalid_emails"); - request.addQueryParam("start_time", "1"); - request.addQueryParam("limit", "1"); - request.addQueryParam("end_time", "1"); - request.addQueryParam("offset", "1"); + request.setEndpoint("whitelabel/links/{id}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -4165,22 +4177,15 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/User throw ex; } ``` -## Delete invalid emails - -**This endpoint allows you to remove email addresses from your invalid email address list.** - -There are two options for deleting invalid email addresses: - -1) You can delete all invalid email addresses by setting `delete_all` to true in the request body. -2) You can delete some invalid email addresses by specifying certain addresses in an array in the request body. +## Delete a Link Branding -An invalid email occurs when you attempt to send email to an address that is formatted in a manner that does not meet internet email format standards or the email does not exist at the recipients mail server. +**This endpoint allows you to delete a link branding.** -Examples include addresses without the @ sign or addresses that include certain special characters and/or spaces. This response can come from our own server or the recipient mail server. +Email link branding allow all of the click-tracked links you send in your emails to include the URL of your domain instead of sendgrid.net. -For more information, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Suppressions/invalid_emails.html). +For more information, please see our [User Guide](https://sendgrid.com/docs/ui/account-and-settings/how-to-set-up-link-branding/). -### DELETE /suppression/invalid_emails +### DELETE /whitelabel/links/{id} ```java @@ -4188,8 +4193,7 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/User SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.setMethod(Method.DELETE); - request.setEndpoint("suppression/invalid_emails"); - request.setBody("{\"emails\":[\"example1@example.com\",\"example2@example.com\"],\"delete_all\":false}"); + request.setEndpoint("whitelabel/links/{id}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -4198,25 +4202,23 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/User throw ex; } ``` -## Retrieve a specific invalid email - -**This endpoint allows you to retrieve a specific invalid email addresses.** +## Validate a Link Branding -An invalid email occurs when you attempt to send email to an address that is formatted in a manner that does not meet internet email format standards or the email does not exist at the recipients mail server. +**This endpoint allows you to validate a link branding.** -Examples include addresses without the @ sign or addresses that include certain special characters and/or spaces. This response can come from our own server or the recipient mail server. +Email link branding allow all of the click-tracked links you send in your emails to include the URL of your domain instead of sendgrid.net. -For more information, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Suppressions/invalid_emails.html). +For more information, please see our [User Guide](https://sendgrid.com/docs/ui/account-and-settings/how-to-set-up-link-branding/). -### GET /suppression/invalid_emails/{email} +### POST /whitelabel/links/{id}/validate ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("suppression/invalid_emails/{email}"); + request.setMethod(Method.POST); + request.setEndpoint("whitelabel/links/{id}/validate"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -4225,25 +4227,28 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/User throw ex; } ``` -## Delete a specific invalid email +## Associate a Link Branding -**This endpoint allows you to remove a specific email address from the invalid email address list.** +**This endpoint allows you to associate a link whitelabel with a subuser account.** -An invalid email occurs when you attempt to send email to an address that is formatted in a manner that does not meet internet email format standards or the email does not exist at the recipients mail server. +Link branding can be associated with subusers from the parent account. This functionality allows +subusers to send mail using their parent's link brands. To associate a link branding, the parent account +must first create a branded link and validate it. The parent may then associate that branded link with a subuser via the API or the Subuser Management page in the user interface. -Examples include addresses without the @ sign or addresses that include certain special characters and/or spaces. This response can come from our own server or the recipient mail server. +Email link branding allow all of the click-tracked links you send in your emails to include the URL of your domain instead of sendgrid.net. -For more information, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Suppressions/invalid_emails.html). +For more information, please see our [User Guide](https://sendgrid.com/docs/ui/account-and-settings/how-to-set-up-link-branding/). -### DELETE /suppression/invalid_emails/{email} +### POST /whitelabel/links/{link_id}/subuser ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.DELETE); - request.setEndpoint("suppression/invalid_emails/{email}"); + request.setMethod(Method.POST); + request.setEndpoint("whitelabel/links/{link_id}/subuser"); + request.setBody("{\"username\":\"jane@example.com\"}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -4252,15 +4257,17 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/User throw ex; } ``` -## Retrieve a specific spam report + + +# STATS -**This endpoint allows you to retrieve a specific spam report.** +## Retrieve global email statistics -[Spam reports](https://sendgrid.com/docs/Glossary/spam_reports.html) happen when a recipient indicates that they think your email is [spam](https://sendgrid.com/docs/Glossary/spam.html) and then their email provider reports this to SendGrid. +**This endpoint allows you to retrieve all of your global email statistics between a given date range.** -For more information, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Suppressions/spam_reports.html). +Parent accounts will see aggregated stats for their account and all subuser accounts. Subuser accounts will only see their own stats. -### GET /suppression/spam_report/{email} +### GET /stats ```java @@ -4268,7 +4275,12 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/User SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.setMethod(Method.GET); - request.setEndpoint("suppression/spam_report/{email}"); + request.setEndpoint("stats"); + request.addQueryParam("aggregated_by", "day"); + request.addQueryParam("limit", "1"); + request.addQueryParam("start_date", "2016-01-01"); + request.addQueryParam("end_date", "2016-04-01"); + request.addQueryParam("offset", "1"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -4277,23 +4289,28 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/User throw ex; } ``` -## Delete a specific spam report + +# SUBUSERS -**This endpoint allows you to delete a specific spam report.** +## Create Subuser -[Spam reports](https://sendgrid.com/docs/Glossary/spam_reports.html) happen when a recipient indicates that they think your email is [spam](https://sendgrid.com/docs/Glossary/spam.html) and then their email provider reports this to SendGrid. +This endpoint allows you to retrieve a list of all of your subusers. You can choose to retrieve specific subusers as well as limit the results that come back from the API. -For more information, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Suppressions/spam_reports.html). +For more information about Subusers: -### DELETE /suppression/spam_report/{email} +* [User Guide > Subusers](https://sendgrid.com/docs/User_Guide/Settings/Subusers/index.html) +* [Classroom > How do I add more subusers to my account?](https://sendgrid.com/docs/Classroom/Basics/Account/how_do_i_add_more_subusers_to_my_account.html) + +### POST /subusers ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.DELETE); - request.setEndpoint("suppression/spam_report/{email}"); + request.setMethod(Method.POST); + request.setEndpoint("subusers"); + request.setBody("{\"username\":\"John@example.com\",\"ips\":[\"1.1.1.1\",\"2.2.2.2\"],\"password\":\"johns_password\",\"email\)":\"John@example.com\"}"; Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -4302,15 +4319,16 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/User throw ex; } ``` -## Retrieve all spam reports +## List all Subusers -**This endpoint allows you to retrieve all spam reports.** +This endpoint allows you to retrieve a list of all of your subusers. You can choose to retrieve specific subusers as well as limit the results that come back from the API. -[Spam reports](https://sendgrid.com/docs/Glossary/spam_reports.html) happen when a recipient indicates that they think your email is [spam](https://sendgrid.com/docs/Glossary/spam.html) and then their email provider reports this to SendGrid. +For more information about Subusers: -For more information, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Suppressions/spam_reports.html). +* [User Guide > Subusers](https://sendgrid.com/docs/User_Guide/Settings/Subusers/index.html) +* [Classroom > How do I add more subusers to my account?](https://sendgrid.com/docs/Classroom/Basics/Account/how_do_i_add_more_subusers_to_my_account.html) -### GET /suppression/spam_reports +### GET /subusers ```java @@ -4318,10 +4336,9 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/User SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.setMethod(Method.GET); - request.setEndpoint("suppression/spam_reports"); - request.addQueryParam("start_time", "1"); + request.setEndpoint("subusers"); + request.addQueryParam("username", "test_string"); request.addQueryParam("limit", "1"); - request.addQueryParam("end_time", "1"); request.addQueryParam("offset", "1"); Response response = sg.api(request); System.out.println(response.getStatusCode()); @@ -4331,29 +4348,22 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/User throw ex; } ``` -## Delete spam reports - -**This endpoint allows you to delete your spam reports.** - -There are two options for deleting spam reports: - -1) You can delete all spam reports by setting "delete_all" to true in the request body. -2) You can delete some spam reports by specifying the email addresses in an array in the request body. +## Retrieve Subuser Reputations -[Spam reports](https://sendgrid.com/docs/Glossary/spam_reports.html) happen when a recipient indicates that they think your email is [spam](https://sendgrid.com/docs/Glossary/spam.html) and then their email provider reports this to SendGrid. +Subuser sender reputations give a good idea how well a sender is doing with regards to how recipients and recipient servers react to the mail that is being received. When a bounce, spam report, or other negative action happens on a sent email, it will effect your sender rating. -For more information, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Suppressions/spam_reports.html). +This endpoint allows you to request the reputations for your subusers. -### DELETE /suppression/spam_reports +### GET /subusers/reputations ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.DELETE); - request.setEndpoint("suppression/spam_reports"); - request.setBody("{\"emails\":[\"example1@example.com\",\"example2@example.com\"],\"delete_all\":false}"); + request.setMethod(Method.GET); + request.setEndpoint("subusers/reputations"); + request.addQueryParam("usernames", "test_string"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -4362,13 +4372,17 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/User throw ex; } ``` -## Retrieve all global suppressions +## Retrieve email statistics for your subusers. -**This endpoint allows you to retrieve a list of all email address that are globally suppressed.** +**This endpoint allows you to retrieve the email statistics for the given subusers.** -A global suppression (or global unsubscribe) is an email address of a recipient who does not want to receive any of your messages. A globally suppressed recipient will be removed from any email you send. For more information, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Suppressions/global_unsubscribes.html). +You may retrieve statistics for up to 10 different subusers by including an additional _subusers_ parameter for each additional subuser. -### GET /suppression/unsubscribes +While you can always view the statistics for all email activity on your account, subuser statistics enable you to view specific segments of your stats. Emails sent, bounces, and spam reports are always tracked for subusers. Unsubscribes, clicks, and opens are tracked if you have enabled the required settings. + +For more information, see our [User Guide](https://sendgrid.com/docs/User_Guide/Statistics/subuser.html). + +### GET /subusers/stats ```java @@ -4376,11 +4390,13 @@ A global suppression (or global unsubscribe) is an email address of a recipient SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.setMethod(Method.GET); - request.setEndpoint("suppression/unsubscribes"); - request.addQueryParam("start_time", "1"); + request.setEndpoint("subusers/stats"); + request.addQueryParam("end_date", "2016-04-01"); + request.addQueryParam("aggregated_by", "day"); request.addQueryParam("limit", "1"); - request.addQueryParam("end_time", "1"); request.addQueryParam("offset", "1"); + request.addQueryParam("start_date", "2016-01-01"); + request.addQueryParam("subusers", "test_string"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -4389,27 +4405,32 @@ A global suppression (or global unsubscribe) is an email address of a recipient throw ex; } ``` - -# TEMPLATES +## Retrieve monthly stats for all subusers -## Create a transactional template. +**This endpoint allows you to retrieve the monthly email statistics for all subusers over the given date range.** -**This endpoint allows you to create a transactional template.** +While you can always view the statistics for all email activity on your account, subuser statistics enable you to view specific segments of your stats for your subusers. Emails sent, bounces, and spam reports are always tracked for subusers. Unsubscribes, clicks, and opens are tracked if you have enabled the required settings. -Each user can create up to 300 different transactional templates. Transactional templates are specific to accounts and subusers. Templates created on a parent account will not be accessible from the subuser accounts. +When using the `sort_by_metric` to sort your stats by a specific metric, you can not sort by the following metrics: +`bounce_drops`, `deferred`, `invalid_emails`, `processed`, `spam_report_drops`, `spam_reports`, or `unsubscribe_drops`. -Transactional templates are templates created specifically for transactional email and are not to be confused with [Marketing Campaigns templates](https://sendgrid.com/docs/User_Guide/Marketing_Campaigns/templates.html). For more information about transactional templates, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Transactional_Templates/index.html). +For more information, see our [User Guide](https://sendgrid.com/docs/User_Guide/Statistics/subuser.html). -### POST /templates +### GET /subusers/stats/monthly ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.POST); - request.setEndpoint("templates"); - request.setBody("{\"name\":\"example_name\"}"); + request.setMethod(Method.GET); + request.setEndpoint("subusers/stats/monthly"); + request.addQueryParam("subuser", "test_string"); + request.addQueryParam("limit", "1"); + request.addQueryParam("sort_by_metric", "test_string"); + request.addQueryParam("offset", "1"); + request.addQueryParam("date", "test_string"); + request.addQueryParam("sort_by_direction", "asc"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -4418,15 +4439,16 @@ Transactional templates are templates created specifically for transactional ema throw ex; } ``` -## Retrieve all transactional templates. +## Retrieve the totals for each email statistic metric for all subusers. -**This endpoint allows you to retrieve all transactional templates.** +**This endpoint allows you to retrieve the total sums of each email statistic metric for all subusers over the given date range.** -Each user can create up to 300 different transactional templates. Transactional templates are specific to accounts and subusers. Templates created on a parent account will not be accessible from the subuser accounts. -Transactional templates are templates created specifically for transactional email and are not to be confused with [Marketing Campaigns templates](https://sendgrid.com/docs/User_Guide/Marketing_Campaigns/templates.html). For more information about transactional templates, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Transactional_Templates/index.html). +While you can always view the statistics for all email activity on your account, subuser statistics enable you to view specific segments of your stats. Emails sent, bounces, and spam reports are always tracked for subusers. Unsubscribes, clicks, and opens are tracked if you have enabled the required settings. -### GET /templates +For more information, see our [User Guide](https://sendgrid.com/docs/User_Guide/Statistics/subuser.html). + +### GET /subusers/stats/sums ```java @@ -4434,7 +4456,14 @@ Transactional templates are templates created specifically for transactional ema SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.setMethod(Method.GET); - request.setEndpoint("templates"); + request.setEndpoint("subusers/stats/sums"); + request.addQueryParam("end_date", "2016-04-01"); + request.addQueryParam("aggregated_by", "day"); + request.addQueryParam("limit", "1"); + request.addQueryParam("sort_by_metric", "test_string"); + request.addQueryParam("offset", "1"); + request.addQueryParam("start_date", "2016-01-01"); + request.addQueryParam("sort_by_direction", "asc"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -4443,16 +4472,16 @@ Transactional templates are templates created specifically for transactional ema throw ex; } ``` -## Edit a transactional template. - -**This endpoint allows you to edit a transactional template.** +## Enable/disable a subuser -Each user can create up to 300 different transactional templates. Transactional templates are specific to accounts and subusers. Templates created on a parent account will not be accessible from the subuser accounts. +This endpoint allows you to enable or disable a subuser. -Transactional templates are templates created specifically for transactional email and are not to be confused with [Marketing Campaigns templates](https://sendgrid.com/docs/User_Guide/Marketing_Campaigns/templates.html). For more information about transactional templates, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Transactional_Templates/index.html). +For more information about Subusers: +* [User Guide > Subusers](https://sendgrid.com/docs/User_Guide/Settings/Subusers/index.html) +* [Classroom > How do I add more subusers to my account?](https://sendgrid.com/docs/Classroom/Basics/Account/how_do_i_add_more_subusers_to_my_account.html) -### PATCH /templates/{template_id} +### PATCH /subusers/{subuser_name} ```java @@ -4460,8 +4489,8 @@ Transactional templates are templates created specifically for transactional ema SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.setMethod(Method.PATCH); - request.setEndpoint("templates/{template_id}"); - request.setBody("{\"name\":\"new_example_name\"}"); + request.setEndpoint("subusers/{subuser_name}"); + request.setBody("{\"disabled\":false}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -4470,24 +4499,24 @@ Transactional templates are templates created specifically for transactional ema throw ex; } ``` -## Retrieve a single transactional template. - -**This endpoint allows you to retrieve a single transactional template.** +## Delete a subuser -Each user can create up to 300 different transactional templates. Transactional templates are specific to accounts and subusers. Templates created on a parent account will not be accessible from the subuser accounts. +This endpoint allows you to delete a subuser. This is a permanent action, once deleted a subuser cannot be retrieved. -Transactional templates are templates created specifically for transactional email and are not to be confused with [Marketing Campaigns templates](https://sendgrid.com/docs/User_Guide/Marketing_Campaigns/templates.html). For more information about transactional templates, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Transactional_Templates/index.html). +For more information about Subusers: +* [User Guide > Subusers](https://sendgrid.com/docs/User_Guide/Settings/Subusers/index.html) +* [Classroom > How do I add more subusers to my account?](https://sendgrid.com/docs/Classroom/Basics/Account/how_do_i_add_more_subusers_to_my_account.html) -### GET /templates/{template_id} +### DELETE /subusers/{subuser_name} ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("templates/{template_id}"); + request.setMethod(Method.DELETE); + request.setEndpoint("subusers/{subuser_name}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -4496,24 +4525,25 @@ Transactional templates are templates created specifically for transactional ema throw ex; } ``` -## Delete a template. - -**This endpoint allows you to delete a transactional template.** +## Update IPs assigned to a subuser -Each user can create up to 300 different transactional templates. Transactional templates are specific to accounts and subusers. Templates created on a parent account will not be accessible from the subuser accounts. +Each subuser should be assigned to an IP address, from which all of this subuser's mail will be sent. Often, this is the same IP as the parent account, but each subuser can have their own, or multiple, IP addresses as well. -Transactional templates are templates created specifically for transactional email and are not to be confused with [Marketing Campaigns templates](https://sendgrid.com/docs/User_Guide/Marketing_Campaigns/templates.html). For more information about transactional templates, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Transactional_Templates/index.html). +More information: +* [How to request more IPs](https://sendgrid.com/docs/Classroom/Basics/Account/adding_an_additional_dedicated_ip_to_your_account.html) +* [IPs can be whitelabeled](https://sendgrid.com/docs/User_Guide/Settings/Whitelabel/ips.html) -### DELETE /templates/{template_id} +### PUT /subusers/{subuser_name}/ips ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.DELETE); - request.setEndpoint("templates/{template_id}"); + request.setMethod(Method.PUT); + request.setEndpoint("subusers/{subuser_name}/ips"); + request.setBody("[\"127.0.0.1\"]"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -4522,25 +4552,20 @@ Transactional templates are templates created specifically for transactional ema throw ex; } ``` -## Create a new transactional template version. - -**This endpoint allows you to create a new version of a template.** - -Each transactional template can have multiple versions, each version with its own subject and content. Each user can have up to 300 versions across all templates. - -For more information about transactional templates, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Transactional_Templates/index.html). +## Update Monitor Settings for a subuser +Subuser monitor settings allow you to receive a sample of an outgoing message by a specific customer at a specific frequency of emails. -### POST /templates/{template_id}/versions +### PUT /subusers/{subuser_name}/monitor ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.POST); - request.setEndpoint("templates/{template_id}/versions"); - request.setBody("{\"name\":\"example_version_name\",\"html_content\":\"<%body%>\",\"plain_content\":\")<%body%>\",\"active\":1,\"template_id\":\"ddb96bbc-9b92-425e-8979-99464621b543\",\"subject\":\"<%subject%>\"}"; + request.setMethod(Method.PUT); + request.setEndpoint("subusers/{subuser_name}/monitor"); + request.setBody("{\"frequency\":500,\"email\":\"example@example.com\"}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -4549,30 +4574,20 @@ For more information about transactional templates, please see our [User Guide]( throw ex; } ``` -## Edit a transactional template version. - -**This endpoint allows you to edit a version of one of your transactional templates.** - -Each transactional template can have multiple versions, each version with its own subject and content. Each user can have up to 300 versions across all templates. - -For more information about transactional templates, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Transactional_Templates/index.html). +## Create monitor settings -## URI Parameters -| URI Parameter | Type | Description | -|---|---|---| -| template_id | string | The ID of the original template | -| version_id | string | The ID of the template version | +Subuser monitor settings allow you to receive a sample of an outgoing message by a specific customer at a specific frequency of emails. -### PATCH /templates/{template_id}/versions/{version_id} +### POST /subusers/{subuser_name}/monitor ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.PATCH); - request.setEndpoint("templates/{template_id}/versions/{version_id}"); - request.setBody("{\"active\":1,\"html_content\":\"<%body%>\",\"subject\":\"<%subject%>\",\"name\":\"updated_example)_name\",\"plain_content\":\"<%body%>\"}"; + request.setMethod(Method.POST); + request.setEndpoint("subusers/{subuser_name}/monitor"); + request.setBody("{\"frequency\":50000,\"email\":\"example@example.com\"}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -4581,21 +4596,11 @@ For more information about transactional templates, please see our [User Guide]( throw ex; } ``` -## Retrieve a specific transactional template version. - -**This endpoint allows you to retrieve a specific version of a template.** - -Each transactional template can have multiple versions, each version with its own subject and content. Each user can have up to 300 versions across all templates. - -For more information about transactional templates, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Transactional_Templates/index.html). +## Retrieve monitor settings for a subuser -## URI Parameters -| URI Parameter | Type | Description | -|---|---|---| -| template_id | string | The ID of the original template | -| version_id | string | The ID of the template version | +Subuser monitor settings allow you to receive a sample of an outgoing message by a specific customer at a specific frequency of emails. -### GET /templates/{template_id}/versions/{version_id} +### GET /subusers/{subuser_name}/monitor ```java @@ -4603,7 +4608,7 @@ For more information about transactional templates, please see our [User Guide]( SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.setMethod(Method.GET); - request.setEndpoint("templates/{template_id}/versions/{version_id}"); + request.setEndpoint("subusers/{subuser_name}/monitor"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -4612,21 +4617,11 @@ For more information about transactional templates, please see our [User Guide]( throw ex; } ``` -## Delete a transactional template version. - -**This endpoint allows you to delete one of your transactional template versions.** - -Each transactional template can have multiple versions, each version with its own subject and content. Each user can have up to 300 versions across all templates. - -For more information about transactional templates, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Transactional_Templates/index.html). +## Delete monitor settings -## URI Parameters -| URI Parameter | Type | Description | -|---|---|---| -| template_id | string | The ID of the original template | -| version_id | string | The ID of the template version | +Subuser monitor settings allow you to receive a sample of an outgoing message by a specific customer at a specific frequency of emails. -### DELETE /templates/{template_id}/versions/{version_id} +### DELETE /subusers/{subuser_name}/monitor ```java @@ -4634,7 +4629,7 @@ For more information about transactional templates, please see our [User Guide]( SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.setMethod(Method.DELETE); - request.setEndpoint("templates/{template_id}/versions/{version_id}"); + request.setEndpoint("subusers/{subuser_name}/monitor"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -4643,30 +4638,31 @@ For more information about transactional templates, please see our [User Guide]( throw ex; } ``` -## Activate a transactional template version. - -**This endpoint allows you to activate a version of one of your templates.** +## Retrieve the monthly email statistics for a single subuser -Each transactional template can have multiple versions, each version with its own subject and content. Each user can have up to 300 versions across across all templates. +**This endpoint allows you to retrieve the monthly email statistics for a specific subuser.** +While you can always view the statistics for all email activity on your account, subuser statistics enable you to view specific segments of your stats for your subusers. Emails sent, bounces, and spam reports are always tracked for subusers. Unsubscribes, clicks, and opens are tracked if you have enabled the required settings. -For more information about transactional templates, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Transactional_Templates/index.html). +When using the `sort_by_metric` to sort your stats by a specific metric, you can not sort by the following metrics: +`bounce_drops`, `deferred`, `invalid_emails`, `processed`, `spam_report_drops`, `spam_reports`, or `unsubscribe_drops`. -## URI Parameters -| URI Parameter | Type | Description | -|---|---|---| -| template_id | string | The ID of the original template | -| version_id | string | The ID of the template version | +For more information, see our [User Guide](https://sendgrid.com/docs/User_Guide/Statistics/subuser.html). -### POST /templates/{template_id}/versions/{version_id}/activate +### GET /subusers/{subuser_name}/stats/monthly ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.POST); - request.setEndpoint("templates/{template_id}/versions/{version_id}/activate"); + request.setMethod(Method.GET); + request.setEndpoint("subusers/{subuser_name}/stats/monthly"); + request.addQueryParam("date", "test_string"); + request.addQueryParam("sort_by_direction", "asc"); + request.addQueryParam("limit", "1"); + request.addQueryParam("sort_by_metric", "test_string"); + request.addQueryParam("offset", "1"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -4675,18 +4671,18 @@ For more information about transactional templates, please see our [User Guide]( throw ex; } ``` - -# TRACKING SETTINGS + +# SUPPRESSION -## Retrieve Tracking Settings +## Retrieve all blocks -**This endpoint allows you to retrieve a list of all tracking settings that you can enable on your account.** +**This endpoint allows you to retrieve a list of all email addresses that are currently on your blocks list.** -You can track a variety of the actions your recipients may take when interacting with your emails including opening your emails, clicking on links in your emails, and subscribing to (or unsubscribing from) your emails. +[Blocks](https://sendgrid.com/docs/Glossary/blocks.html) happen when your message was rejected for a reason related to the message, not the recipient address. This can happen when your mail server IP address has been added to a blacklist or blocked by an ISP, or if the message content is flagged by a filter on the receiving server. -For more information about tracking, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Settings/tracking.html). +For more information, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Suppressions/blocks.html). -### GET /tracking_settings +### GET /suppression/blocks ```java @@ -4694,8 +4690,10 @@ For more information about tracking, please see our [User Guide](https://sendgri SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.setMethod(Method.GET); - request.setEndpoint("tracking_settings"); - request.addQueryParam("limit", "1"); + request.setEndpoint("suppression/blocks"); + request.addQueryParam("start_time", "1"); + request.addQueryParam("limit", "1"); + request.addQueryParam("end_time", "1"); request.addQueryParam("offset", "1"); Response response = sg.api(request); System.out.println(response.getStatusCode()); @@ -4705,24 +4703,29 @@ For more information about tracking, please see our [User Guide](https://sendgri throw ex; } ``` -## Update Click Tracking Settings +## Delete blocks -**This endpoint allows you to change your current click tracking setting. You can enable, or disable, click tracking using this endpoint.** +**This endpoint allows you to delete all email addresses on your blocks list.** -You can track a variety of the actions your recipients may take when interacting with your emails including opening your emails, clicking on links in your emails, and subscribing to (or unsubscribing from) your emails. +There are two options for deleting blocked emails: -For more information about tracking, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Settings/tracking.html). +1. You can delete all blocked emails by setting `delete_all` to true in the request body. +2. You can delete some blocked emails by specifying the email addresses in an array in the request body. -### PATCH /tracking_settings/click +[Blocks](https://sendgrid.com/docs/Glossary/blocks.html) happen when your message was rejected for a reason related to the message, not the recipient address. This can happen when your mail server IP address has been added to a blacklist or blocked by an ISP, or if the message content is flagged by a filter on the receiving server. + +For more information, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Suppressions/blocks.html). + +### DELETE /suppression/blocks ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.PATCH); - request.setEndpoint("tracking_settings/click"); - request.setBody("{\"enabled\":true}"); + request.setMethod(Method.DELETE); + request.setEndpoint("suppression/blocks"); + request.setBody("{\"emails\":[\"example1@example.com\",\"example2@example.com\"],\"delete_all\":false}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -4731,15 +4734,15 @@ For more information about tracking, please see our [User Guide](https://sendgri throw ex; } ``` -## Retrieve Click Track Settings +## Retrieve a specific block -**This endpoint allows you to retrieve your current click tracking setting.** +**This endpoint allows you to retrieve a specific email address from your blocks list.** -You can track a variety of the actions your recipients may take when interacting with your emails including opening your emails, clicking on links in your emails, and subscribing to (or unsubscribing from) your emails. +[Blocks](https://sendgrid.com/docs/Glossary/blocks.html) happen when your message was rejected for a reason related to the message, not the recipient address. This can happen when your mail server IP address has been added to a blacklist or blocked by an ISP, or if the message content is flagged by a filter on the receiving server. -For more information about tracking, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Settings/tracking.html). +For more information, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Suppressions/blocks.html). -### GET /tracking_settings/click +### GET /suppression/blocks/{email} ```java @@ -4747,7 +4750,7 @@ For more information about tracking, please see our [User Guide](https://sendgri SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.setMethod(Method.GET); - request.setEndpoint("tracking_settings/click"); + request.setEndpoint("suppression/blocks/{email}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -4756,28 +4759,23 @@ For more information about tracking, please see our [User Guide](https://sendgri throw ex; } ``` -## Update Google Analytics Settings - -**This endpoint allows you to update your current setting for Google Analytics.** - -For more information about using Google Analytics, please refer to [Googles URL Builder](https://support.google.com/analytics/answer/1033867?hl=en) and their article on ["Best Practices for Campaign Building"](https://support.google.com/analytics/answer/1037445). +## Delete a specific block -We default the settings to Googles recommendations. For more information, see [Google Analytics Demystified](https://sendgrid.com/docs/Classroom/Track/Collecting_Data/google_analytics_demystified_ga_statistics_vs_sg_statistics.html). +**This endpoint allows you to delete a specific email address from your blocks list.** -You can track a variety of the actions your recipients may take when interacting with your emails including opening your emails, clicking on links in your emails, and subscribing to (or unsubscribing from) your emails. +[Blocks](https://sendgrid.com/docs/Glossary/blocks.html) happen when your message was rejected for a reason related to the message, not the recipient address. This can happen when your mail server IP address has been added to a blacklist or blocked by an ISP, or if the message content is flagged by a filter on the receiving server. -For more information about tracking, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Settings/tracking.html). +For more information, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Suppressions/blocks.html). -### PATCH /tracking_settings/google_analytics +### DELETE /suppression/blocks/{email} ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.PATCH); - request.setEndpoint("tracking_settings/google_analytics"); - request.setBody("{\"utm_campaign\":\"website\",\"utm_term\":\"\",\"utm_content\":\"\",\"enabled\":true,\"utm)_source\":\"sendgrid.com\",\"utm_medium\":\"email\"}"; + request.setMethod(Method.DELETE); + request.setEndpoint("suppression/blocks/{email}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -4786,19 +4784,18 @@ For more information about tracking, please see our [User Guide](https://sendgri throw ex; } ``` -## Retrieve Google Analytics Settings - -**This endpoint allows you to retrieve your current setting for Google Analytics.** +## Retrieve all bounces -For more information about using Google Analytics, please refer to [Googles URL Builder](https://support.google.com/analytics/answer/1033867?hl=en) and their article on ["Best Practices for Campaign Building"](https://support.google.com/analytics/answer/1037445). +**This endpoint allows you to retrieve all of your bounces.** -We default the settings to Googles recommendations. For more information, see [Google Analytics Demystified](https://sendgrid.com/docs/Classroom/Track/Collecting_Data/google_analytics_demystified_ga_statistics_vs_sg_statistics.html). +Bounces are messages that are returned to the server that sent it. -You can track a variety of the actions your recipients may take when interacting with your emails including opening your emails, clicking on links in your emails, and subscribing to (or unsubscribing from) your emails. +For more information see: -For more information about tracking, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Settings/tracking.html). +* [User Guide > Bounces](https://sendgrid.com/docs/User_Guide/Suppressions/bounces.html) for more information +* [Glossary > Bounces](https://sendgrid.com/docs/Glossary/Bounces.html) -### GET /tracking_settings/google_analytics +### GET /suppression/bounces ```java @@ -4806,7 +4803,9 @@ For more information about tracking, please see our [User Guide](https://sendgri SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.setMethod(Method.GET); - request.setEndpoint("tracking_settings/google_analytics"); + request.setEndpoint("suppression/bounces"); + request.addQueryParam("start_time", "1"); + request.addQueryParam("end_time", "1"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -4815,26 +4814,30 @@ For more information about tracking, please see our [User Guide](https://sendgri throw ex; } ``` -## Update Open Tracking Settings +## Delete bounces -**This endpoint allows you to update your current settings for open tracking.** +**This endpoint allows you to delete all of your bounces. You can also use this endpoint to remove a specific email address from your bounce list.** -Open Tracking adds an invisible image at the end of the email which can track email opens. If the email recipient has images enabled on their email client, a request to SendGrids server for the invisible image is executed and an open event is logged. These events are logged in the Statistics portal, Email Activity interface, and are reported by the Event Webhook. +Bounces are messages that are returned to the server that sent it. -You can track a variety of the actions your recipients may take when interacting with your emails including opening your emails, clicking on links in your emails, and subscribing to (or unsubscribing from) your emails. +For more information see: -For more information about tracking, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Settings/tracking.html). +* [User Guide > Bounces](https://sendgrid.com/docs/User_Guide/Suppressions/bounces.html) for more information +* [Glossary > Bounces](https://sendgrid.com/docs/Glossary/Bounces.html) +* [Classroom > List Scrubbing Guide](https://sendgrid.com/docs/Classroom/Deliver/list_scrubbing.html) -### PATCH /tracking_settings/open +Note: the `delete_all` and `emails` parameters should be used independently of each other as they have different purposes. + +### DELETE /suppression/bounces ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.PATCH); - request.setEndpoint("tracking_settings/open"); - request.setBody("{\"enabled\":true}"); + request.setMethod(Method.DELETE); + request.setEndpoint("suppression/bounces"); + request.setBody("{\"emails\":[\"example@example.com\",\"example2@example.com\"],\"delete_all\":true}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -4843,17 +4846,19 @@ For more information about tracking, please see our [User Guide](https://sendgri throw ex; } ``` -## Get Open Tracking Settings +## Retrieve a Bounce -**This endpoint allows you to retrieve your current settings for open tracking.** +**This endpoint allows you to retrieve a specific bounce for a given email address.** -Open Tracking adds an invisible image at the end of the email which can track email opens. If the email recipient has images enabled on their email client, a request to SendGrids server for the invisible image is executed and an open event is logged. These events are logged in the Statistics portal, Email Activity interface, and are reported by the Event Webhook. +Bounces are messages that are returned to the server that sent it. -You can track a variety of the actions your recipients may take when interacting with your emails including opening your emails, clicking on links in your emails, and subscribing to (or unsubscribing from) your emails. +For more information see: -For more information about tracking, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Settings/tracking.html). +* [User Guide > Bounces](https://sendgrid.com/docs/User_Guide/Suppressions/bounces.html) for more information +* [Glossary > Bounces](https://sendgrid.com/docs/Glossary/Bounces.html) +* [Classroom > List Scrubbing Guide](https://sendgrid.com/docs/Classroom/Deliver/list_scrubbing.html) -### GET /tracking_settings/open +### GET /suppression/bounces/{email} ```java @@ -4861,7 +4866,7 @@ For more information about tracking, please see our [User Guide](https://sendgri SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.setMethod(Method.GET); - request.setEndpoint("tracking_settings/open"); + request.setEndpoint("suppression/bounces/{email}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -4870,26 +4875,28 @@ For more information about tracking, please see our [User Guide](https://sendgri throw ex; } ``` -## Update Subscription Tracking Settings +## Delete a bounce -**This endpoint allows you to update your current settings for subscription tracking.** +**This endpoint allows you to remove an email address from your bounce list.** -Subscription tracking adds links to the bottom of your emails that allows your recipients to subscribe to, or unsubscribe from, your emails. +Bounces are messages that are returned to the server that sent it. This endpoint allows you to delete a single email addresses from your bounce list. -You can track a variety of the actions your recipients may take when interacting with your emails including opening your emails, clicking on links in your emails, and subscribing to (or unsubscribing from) your emails. +For more information see: -For more information about tracking, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Settings/tracking.html). +* [User Guide > Bounces](https://sendgrid.com/docs/User_Guide/Suppressions/bounces.html) for more information +* [Glossary > Bounces](https://sendgrid.com/docs/Glossary/Bounces.html) +* [Classroom > List Scrubbing Guide](https://sendgrid.com/docs/Classroom/Deliver/list_scrubbing.html) -### PATCH /tracking_settings/subscription +### DELETE /suppression/bounces/{email} ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.PATCH); - request.setEndpoint("tracking_settings/subscription"); - request.setBody("{\"url\":\"url\",\"html_content\":\"html content\",\"enabled\":true,\"landing\":\"landing page) html\",\"replace\":\"replacement tag\",\"plain_content\":\"text content\"}"; + request.setMethod(Method.DELETE); + request.setEndpoint("suppression/bounces/{email}"); + request.addQueryParam("email_address", "example@example.com"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -4898,17 +4905,17 @@ For more information about tracking, please see our [User Guide](https://sendgri throw ex; } ``` -## Retrieve Subscription Tracking Settings +## Retrieve all invalid emails -**This endpoint allows you to retrieve your current settings for subscription tracking.** +**This endpoint allows you to retrieve a list of all invalid email addresses.** -Subscription tracking adds links to the bottom of your emails that allows your recipients to subscribe to, or unsubscribe from, your emails. +An invalid email occurs when you attempt to send email to an address that is formatted in a manner that does not meet internet email format standards or the email does not exist at the recipients mail server. -You can track a variety of the actions your recipients may take when interacting with your emails including opening your emails, clicking on links in your emails, and subscribing to (or unsubscribing from) your emails. +Examples include addresses without the @ sign or addresses that include certain special characters and/or spaces. This response can come from our own server or the recipient mail server. -For more information about tracking, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Settings/tracking.html). +For more information, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Suppressions/invalid_emails.html). -### GET /tracking_settings/subscription +### GET /suppression/invalid_emails ```java @@ -4916,7 +4923,11 @@ For more information about tracking, please see our [User Guide](https://sendgri SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.setMethod(Method.GET); - request.setEndpoint("tracking_settings/subscription"); + request.setEndpoint("suppression/invalid_emails"); + request.addQueryParam("start_time", "1"); + request.addQueryParam("limit", "1"); + request.addQueryParam("end_time", "1"); + request.addQueryParam("offset", "1"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -4925,30 +4936,31 @@ For more information about tracking, please see our [User Guide](https://sendgri throw ex; } ``` - -# USER +## Delete invalid emails -## Get a user's account information. +**This endpoint allows you to remove email addresses from your invalid email address list.** -**This endpoint allows you to retrieve your user account details.** +There are two options for deleting invalid email addresses: -Your user's account information includes the user's account type and reputation. +1) You can delete all invalid email addresses by setting `delete_all` to true in the request body. +2) You can delete some invalid email addresses by specifying certain addresses in an array in the request body. -Keeping your user profile up to date is important. This will help SendGrid to verify who you are as well as contact you should we need to. +An invalid email occurs when you attempt to send email to an address that is formatted in a manner that does not meet internet email format standards or the email does not exist at the recipients mail server. -For more information about your user profile: +Examples include addresses without the @ sign or addresses that include certain special characters and/or spaces. This response can come from our own server or the recipient mail server. -* [SendGrid Account Settings](https://sendgrid.com/docs/User_Guide/Settings/account.html) +For more information, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Suppressions/invalid_emails.html). -### GET /user/account +### DELETE /suppression/invalid_emails ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("user/account"); + request.setMethod(Method.DELETE); + request.setEndpoint("suppression/invalid_emails"); + request.setBody("{\"emails\":[\"example1@example.com\",\"example2@example.com\"],\"delete_all\":false}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -4957,13 +4969,17 @@ For more information about your user profile: throw ex; } ``` -## Retrieve your credit balance +## Retrieve a specific invalid email -**This endpoint allows you to retrieve the current credit balance for your account.** +**This endpoint allows you to retrieve a specific invalid email addresses.** -Your monthly credit allotment limits the number of emails you may send before incurring overage charges. For more information about credits and billing, please visit our [Classroom](https://sendgrid.com/docs/Classroom/Basics/Billing/billing_info_and_faqs.html). +An invalid email occurs when you attempt to send email to an address that is formatted in a manner that does not meet internet email format standards or the email does not exist at the recipients mail server. -### GET /user/credits +Examples include addresses without the @ sign or addresses that include certain special characters and/or spaces. This response can come from our own server or the recipient mail server. + +For more information, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Suppressions/invalid_emails.html). + +### GET /suppression/invalid_emails/{email} ```java @@ -4971,7 +4987,7 @@ Your monthly credit allotment limits the number of emails you may send before in SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.setMethod(Method.GET); - request.setEndpoint("user/credits"); + request.setEndpoint("suppression/invalid_emails/{email}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -4980,26 +4996,25 @@ Your monthly credit allotment limits the number of emails you may send before in throw ex; } ``` -## Update your account email address +## Delete a specific invalid email -**This endpoint allows you to update the email address currently on file for your account.** +**This endpoint allows you to remove a specific email address from the invalid email address list.** -Keeping your user profile up to date is important. This will help SendGrid to verify who you are as well as contact you should we need to. +An invalid email occurs when you attempt to send email to an address that is formatted in a manner that does not meet internet email format standards or the email does not exist at the recipients mail server. -For more information about your user profile: +Examples include addresses without the @ sign or addresses that include certain special characters and/or spaces. This response can come from our own server or the recipient mail server. -* [SendGrid Account Settings](https://sendgrid.com/docs/User_Guide/Settings/account.html) +For more information, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Suppressions/invalid_emails.html). -### PUT /user/email +### DELETE /suppression/invalid_emails/{email} ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.PUT); - request.setEndpoint("user/email"); - request.setBody("{\"email\":\"example@example.com\"}"); + request.setMethod(Method.DELETE); + request.setEndpoint("suppression/invalid_emails/{email}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -5008,17 +5023,15 @@ For more information about your user profile: throw ex; } ``` -## Retrieve your account email address - -**This endpoint allows you to retrieve the email address currently on file for your account.** +## Retrieve a specific spam report -Keeping your user profile up to date is important. This will help SendGrid to verify who you are as well as contact you should we need to. +**This endpoint allows you to retrieve a specific spam report.** -For more information about your user profile: +[Spam reports](https://sendgrid.com/docs/Glossary/spam_reports.html) happen when a recipient indicates that they think your email is [spam](https://sendgrid.com/docs/Glossary/spam.html) and then their email provider reports this to SendGrid. -* [SendGrid Account Settings](https://sendgrid.com/docs/User_Guide/Settings/account.html) +For more information, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Suppressions/spam_reports.html). -### GET /user/email +### GET /suppression/spam_report/{email} ```java @@ -5026,7 +5039,7 @@ For more information about your user profile: SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.setMethod(Method.GET); - request.setEndpoint("user/email"); + request.setEndpoint("suppression/spam_report/{email}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -5035,26 +5048,23 @@ For more information about your user profile: throw ex; } ``` -## Update your password - -**This endpoint allows you to update your password.** +## Delete a specific spam report -Keeping your user profile up to date is important. This will help SendGrid to verify who you are as well as contact you should we need to. +**This endpoint allows you to delete a specific spam report.** -For more information about your user profile: +[Spam reports](https://sendgrid.com/docs/Glossary/spam_reports.html) happen when a recipient indicates that they think your email is [spam](https://sendgrid.com/docs/Glossary/spam.html) and then their email provider reports this to SendGrid. -* [SendGrid Account Settings](https://sendgrid.com/docs/User_Guide/Settings/account.html) +For more information, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Suppressions/spam_reports.html). -### PUT /user/password +### DELETE /suppression/spam_report/{email} ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.PUT); - request.setEndpoint("user/password"); - request.setBody("{\"new_password\":\"new_password\",\"old_password\":\"old_password\"}"); + request.setMethod(Method.DELETE); + request.setEndpoint("suppression/spam_report/{email}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -5063,28 +5073,27 @@ For more information about your user profile: throw ex; } ``` -## Update a user's profile - -**This endpoint allows you to update your current profile details.** - -Keeping your user profile up to date is important. This will help SendGrid to verify who you are as well as contact you should we need to. +## Retrieve all spam reports -For more information about your user profile: +**This endpoint allows you to retrieve all spam reports.** -* [SendGrid Account Settings](https://sendgrid.com/docs/User_Guide/Settings/account.html) +[Spam reports](https://sendgrid.com/docs/Glossary/spam_reports.html) happen when a recipient indicates that they think your email is [spam](https://sendgrid.com/docs/Glossary/spam.html) and then their email provider reports this to SendGrid. -It should be noted that any one or more of the parameters can be updated via the PATCH /user/profile endpoint. The only requirement is that you include at least one when you PATCH. +For more information, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Suppressions/spam_reports.html). -### PATCH /user/profile +### GET /suppression/spam_reports ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.PATCH); - request.setEndpoint("user/profile"); - request.setBody("{\"city\":\"Orange\",\"first_name\":\"Example\",\"last_name\":\"User\"}"); + request.setMethod(Method.GET); + request.setEndpoint("suppression/spam_reports"); + request.addQueryParam("start_time", "1"); + request.addQueryParam("limit", "1"); + request.addQueryParam("end_time", "1"); + request.addQueryParam("offset", "1"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -5093,23 +5102,29 @@ It should be noted that any one or more of the parameters can be updated via the throw ex; } ``` -## Get a user's profile +## Delete spam reports -Keeping your user profile up to date is important. This will help SendGrid to verify who you are as well as contact you should we need to. +**This endpoint allows you to delete your spam reports.** -For more information about your user profile: +There are two options for deleting spam reports: -* [SendGrid Account Settings](https://sendgrid.com/docs/User_Guide/Settings/account.html) +1) You can delete all spam reports by setting "delete_all" to true in the request body. +2) You can delete some spam reports by specifying the email addresses in an array in the request body. -### GET /user/profile +[Spam reports](https://sendgrid.com/docs/Glossary/spam_reports.html) happen when a recipient indicates that they think your email is [spam](https://sendgrid.com/docs/Glossary/spam.html) and then their email provider reports this to SendGrid. + +For more information, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Suppressions/spam_reports.html). + +### DELETE /suppression/spam_reports ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("user/profile"); + request.setMethod(Method.DELETE); + request.setEndpoint("suppression/spam_reports"); + request.setBody("{\"emails\":[\"example1@example.com\",\"example2@example.com\"],\"delete_all\":false}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -5118,25 +5133,25 @@ For more information about your user profile: throw ex; } ``` -## Cancel or pause a scheduled send - -**This endpoint allows you to cancel or pause an email that has been scheduled to be sent.** +## Retrieve all global suppressions -If the maximum number of cancellations/pauses are added, HTTP 400 will -be returned. +**This endpoint allows you to retrieve a list of all email address that are globally suppressed.** -The Cancel Scheduled Sends feature allows the customer to cancel a scheduled send based on a Batch ID included in the SMTPAPI header.Scheduled sends cancelled less than 10 minutes before the scheduled time are not guaranteed to be cancelled. +A global suppression (or global unsubscribe) is an email address of a recipient who does not want to receive any of your messages. A globally suppressed recipient will be removed from any email you send. For more information, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Suppressions/global_unsubscribes.html). -### POST /user/scheduled_sends +### GET /suppression/unsubscribes ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.POST); - request.setEndpoint("user/scheduled_sends"); - request.setBody("{\"batch_id\":\"YOUR_BATCH_ID\",\"status\":\"pause\"}"); + request.setMethod(Method.GET); + request.setEndpoint("suppression/unsubscribes"); + request.addQueryParam("start_time", "1"); + request.addQueryParam("limit", "1"); + request.addQueryParam("end_time", "1"); + request.addQueryParam("offset", "1"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -5145,21 +5160,27 @@ The Cancel Scheduled Sends feature allows the customer to cancel a scheduled sen throw ex; } ``` -## Retrieve all scheduled sends + +# TEMPLATES -**This endpoint allows you to retrieve all cancel/paused scheduled send information.** +## Create a transactional template. -The Cancel Scheduled Sends feature allows the customer to cancel a scheduled send based on a Batch ID included in the SMTPAPI header.Scheduled sends cancelled less than 10 minutes before the scheduled time are not guaranteed to be cancelled. +**This endpoint allows you to create a transactional template.** -### GET /user/scheduled_sends +Each user can create up to 300 different transactional templates. Transactional templates are specific to accounts and subusers. Templates created on a parent account will not be accessible from the subuser accounts. + +Transactional templates are templates created specifically for transactional email and are not to be confused with [Marketing Campaigns templates](https://sendgrid.com/docs/User_Guide/Marketing_Campaigns/templates.html). For more information about transactional templates, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Transactional_Templates/index.html). + +### POST /templates ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("user/scheduled_sends"); + request.setMethod(Method.POST); + request.setEndpoint("templates"); + request.setBody("{\"name\":\"example_name\"}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -5168,22 +5189,23 @@ The Cancel Scheduled Sends feature allows the customer to cancel a scheduled sen throw ex; } ``` -## Update user scheduled send information +## Retrieve all transactional templates. -**This endpoint allows you to update the status of a scheduled send for the given `batch_id`.** +**This endpoint allows you to retrieve all transactional templates.** -The Cancel Scheduled Sends feature allows the customer to cancel a scheduled send based on a Batch ID included in the SMTPAPI header.Scheduled sends cancelled less than 10 minutes before the scheduled time are not guaranteed to be cancelled. +Each user can create up to 300 different transactional templates. Transactional templates are specific to accounts and subusers. Templates created on a parent account will not be accessible from the subuser accounts. -### PATCH /user/scheduled_sends/{batch_id} +Transactional templates are templates created specifically for transactional email and are not to be confused with [Marketing Campaigns templates](https://sendgrid.com/docs/User_Guide/Marketing_Campaigns/templates.html). For more information about transactional templates, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Transactional_Templates/index.html). + +### GET /templates ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.PATCH); - request.setEndpoint("user/scheduled_sends/{batch_id}"); - request.setBody("{\"status\":\"pause\"}"); + request.setMethod(Method.GET); + request.setEndpoint("templates"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -5192,21 +5214,25 @@ The Cancel Scheduled Sends feature allows the customer to cancel a scheduled sen throw ex; } ``` -## Retrieve scheduled send +## Edit a transactional template. -**This endpoint allows you to retrieve the cancel/paused scheduled send information for a specific `batch_id`.** +**This endpoint allows you to edit a transactional template.** -The Cancel Scheduled Sends feature allows the customer to cancel a scheduled send based on a Batch ID included in the SMTPAPI header.Scheduled sends cancelled less than 10 minutes before the scheduled time are not guaranteed to be cancelled. +Each user can create up to 300 different transactional templates. Transactional templates are specific to accounts and subusers. Templates created on a parent account will not be accessible from the subuser accounts. -### GET /user/scheduled_sends/{batch_id} +Transactional templates are templates created specifically for transactional email and are not to be confused with [Marketing Campaigns templates](https://sendgrid.com/docs/User_Guide/Marketing_Campaigns/templates.html). For more information about transactional templates, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Transactional_Templates/index.html). + + +### PATCH /templates/{template_id} ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("user/scheduled_sends/{batch_id}"); + request.setMethod(Method.PATCH); + request.setEndpoint("templates/{template_id}"); + request.setBody("{\"name\":\"new_example_name\"}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -5215,21 +5241,24 @@ The Cancel Scheduled Sends feature allows the customer to cancel a scheduled sen throw ex; } ``` -## Delete a cancellation or pause of a scheduled send +## Retrieve a single transactional template. -**This endpoint allows you to delete the cancellation/pause of a scheduled send.** +**This endpoint allows you to retrieve a single transactional template.** -The Cancel Scheduled Sends feature allows the customer to cancel a scheduled send based on a Batch ID included in the SMTPAPI header.Scheduled sends cancelled less than 10 minutes before the scheduled time are not guaranteed to be cancelled. +Each user can create up to 300 different transactional templates. Transactional templates are specific to accounts and subusers. Templates created on a parent account will not be accessible from the subuser accounts. -### DELETE /user/scheduled_sends/{batch_id} +Transactional templates are templates created specifically for transactional email and are not to be confused with [Marketing Campaigns templates](https://sendgrid.com/docs/User_Guide/Marketing_Campaigns/templates.html). For more information about transactional templates, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Transactional_Templates/index.html). + + +### GET /templates/{template_id} ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.DELETE); - request.setEndpoint("user/scheduled_sends/{batch_id}"); + request.setMethod(Method.GET); + request.setEndpoint("templates/{template_id}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -5238,24 +5267,24 @@ The Cancel Scheduled Sends feature allows the customer to cancel a scheduled sen throw ex; } ``` -## Update Enforced TLS settings +## Delete a template. -**This endpoint allows you to update your current Enforced TLS settings.** +**This endpoint allows you to delete a transactional template.** -The Enforced TLS settings specify whether or not the recipient is required to support TLS or have a valid certificate. See the [SMTP Ports User Guide](https://sendgrid.com/docs/Classroom/Basics/Email_Infrastructure/smtp_ports.html) for more information on opportunistic TLS. +Each user can create up to 300 different transactional templates. Transactional templates are specific to accounts and subusers. Templates created on a parent account will not be accessible from the subuser accounts. -**Note:** If either setting is enabled and the recipient does not support TLS or have a valid certificate, we drop the message and send a block event with TLS required but not supported as the description. +Transactional templates are templates created specifically for transactional email and are not to be confused with [Marketing Campaigns templates](https://sendgrid.com/docs/User_Guide/Marketing_Campaigns/templates.html). For more information about transactional templates, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Transactional_Templates/index.html). -### PATCH /user/settings/enforced_tls + +### DELETE /templates/{template_id} ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.PATCH); - request.setEndpoint("user/settings/enforced_tls"); - request.setBody("{\"require_tls\":true,\"require_valid_cert\":false}"); + request.setMethod(Method.DELETE); + request.setEndpoint("templates/{template_id}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -5264,23 +5293,25 @@ The Enforced TLS settings specify whether or not the recipient is required to su throw ex; } ``` -## Retrieve current Enforced TLS settings. +## Create a new transactional template version. -**This endpoint allows you to retrieve your current Enforced TLS settings.** +**This endpoint allows you to create a new version of a template.** -The Enforced TLS settings specify whether or not the recipient is required to support TLS or have a valid certificate. See the [SMTP Ports User Guide](https://sendgrid.com/docs/Classroom/Basics/Email_Infrastructure/smtp_ports.html) for more information on opportunistic TLS. +Each transactional template can have multiple versions, each version with its own subject and content. Each user can have up to 300 versions across all templates. -**Note:** If either setting is enabled and the recipient does not support TLS or have a valid certificate, we drop the message and send a block event with TLS required but not supported as the description. +For more information about transactional templates, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Transactional_Templates/index.html). -### GET /user/settings/enforced_tls + +### POST /templates/{template_id}/versions ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("user/settings/enforced_tls"); + request.setMethod(Method.POST); + request.setEndpoint("templates/{template_id}/versions"); + request.setBody("{\"name\":\"example_version_name\",\"html_content\":\"<%body%>\",\"plain_content\":\")<%body%>\",\"active\":1,\"template_id\":\"ddb96bbc-9b92-425e-8979-99464621b543\",\"subject\":\"<%subject%>\"}"; Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -5289,26 +5320,30 @@ The Enforced TLS settings specify whether or not the recipient is required to su throw ex; } ``` -## Update your username +## Edit a transactional template version. -**This endpoint allows you to update the username for your account.** +**This endpoint allows you to edit a version of one of your transactional templates.** -Keeping your user profile up to date is important. This will help SendGrid to verify who you are as well as contact you should we need to. +Each transactional template can have multiple versions, each version with its own subject and content. Each user can have up to 300 versions across all templates. -For more information about your user profile: +For more information about transactional templates, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Transactional_Templates/index.html). -* [SendGrid Account Settings](https://sendgrid.com/docs/User_Guide/Settings/account.html) +## URI Parameters +| URI Parameter | Type | Description | +|---|---|---| +| template_id | string | The ID of the original template | +| version_id | string | The ID of the template version | -### PUT /user/username +### PATCH /templates/{template_id}/versions/{version_id} ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.PUT); - request.setEndpoint("user/username"); - request.setBody("{\"username\":\"test_username\"}"); + request.setMethod(Method.PATCH); + request.setEndpoint("templates/{template_id}/versions/{version_id}"); + request.setBody("{\"active\":1,\"html_content\":\"<%body%>\",\"subject\":\"<%subject%>\",\"name\":\"updated_example)_name\",\"plain_content\":\"<%body%>\"}"; Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -5317,17 +5352,21 @@ For more information about your user profile: throw ex; } ``` -## Retrieve your username +## Retrieve a specific transactional template version. -**This endpoint allows you to retrieve your current account username.** +**This endpoint allows you to retrieve a specific version of a template.** -Keeping your user profile up to date is important. This will help SendGrid to verify who you are as well as contact you should we need to. +Each transactional template can have multiple versions, each version with its own subject and content. Each user can have up to 300 versions across all templates. -For more information about your user profile: +For more information about transactional templates, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Transactional_Templates/index.html). -* [SendGrid Account Settings](https://sendgrid.com/docs/User_Guide/Settings/account.html) +## URI Parameters +| URI Parameter | Type | Description | +|---|---|---| +| template_id | string | The ID of the original template | +| version_id | string | The ID of the template version | -### GET /user/username +### GET /templates/{template_id}/versions/{version_id} ```java @@ -5335,7 +5374,7 @@ For more information about your user profile: SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.setMethod(Method.GET); - request.setEndpoint("user/username"); + request.setEndpoint("templates/{template_id}/versions/{version_id}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -5344,26 +5383,29 @@ For more information about your user profile: throw ex; } ``` -## Update Event Notification Settings +## Delete a transactional template version. -**This endpoint allows you to update your current event webhook settings.** +**This endpoint allows you to delete one of your transactional template versions.** -If an event type is marked as `true`, then the event webhook will include information about that event. +Each transactional template can have multiple versions, each version with its own subject and content. Each user can have up to 300 versions across all templates. -SendGrids Event Webhook will notify a URL of your choice via HTTP POST with information about events that occur as SendGrid processes your email. +For more information about transactional templates, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Transactional_Templates/index.html). -Common uses of this data are to remove unsubscribes, react to spam reports, determine unengaged recipients, identify bounced email addresses, or create advanced analytics of your email program. +## URI Parameters +| URI Parameter | Type | Description | +|---|---|---| +| template_id | string | The ID of the original template | +| version_id | string | The ID of the template version | -### PATCH /user/webhooks/event/settings +### DELETE /templates/{template_id}/versions/{version_id} ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.PATCH); - request.setEndpoint("user/webhooks/event/settings"); - request.setBody("{\"group_resubscribe\":true,\"delivered\":true,\"group_unsubscribe\":true,\"spam_report\":true,\"url\":\"url\)",\"enabled\":true,\"bounce\":true,\"deferred\":true,\"unsubscribe\":true,\"dropped\":true,\"open\":true,\"click\":true,\"processed\":true}"; + request.setMethod(Method.DELETE); + request.setEndpoint("templates/{template_id}/versions/{version_id}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -5372,25 +5414,30 @@ Common uses of this data are to remove unsubscribes, react to spam reports, dete throw ex; } ``` -## Retrieve Event Webhook settings +## Activate a transactional template version. -**This endpoint allows you to retrieve your current event webhook settings.** +**This endpoint allows you to activate a version of one of your templates.** -If an event type is marked as `true`, then the event webhook will include information about that event. +Each transactional template can have multiple versions, each version with its own subject and content. Each user can have up to 300 versions across across all templates. -SendGrids Event Webhook will notify a URL of your choice via HTTP POST with information about events that occur as SendGrid processes your email. -Common uses of this data are to remove unsubscribes, react to spam reports, determine unengaged recipients, identify bounced email addresses, or create advanced analytics of your email program. +For more information about transactional templates, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Transactional_Templates/index.html). -### GET /user/webhooks/event/settings +## URI Parameters +| URI Parameter | Type | Description | +|---|---|---| +| template_id | string | The ID of the original template | +| version_id | string | The ID of the template version | + +### POST /templates/{template_id}/versions/{version_id}/activate ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("user/webhooks/event/settings"); + request.setMethod(Method.POST); + request.setEndpoint("templates/{template_id}/versions/{version_id}/activate"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -5399,24 +5446,28 @@ Common uses of this data are to remove unsubscribes, react to spam reports, dete throw ex; } ``` -## Test Event Notification Settings + +# TRACKING SETTINGS -**This endpoint allows you to test your event webhook by sending a fake event notification post to the provided URL.** +## Retrieve Tracking Settings -SendGrids Event Webhook will notify a URL of your choice via HTTP POST with information about events that occur as SendGrid processes your email. +**This endpoint allows you to retrieve a list of all tracking settings that you can enable on your account.** -Common uses of this data are to remove unsubscribes, react to spam reports, determine unengaged recipients, identify bounced email addresses, or create advanced analytics of your email program. +You can track a variety of the actions your recipients may take when interacting with your emails including opening your emails, clicking on links in your emails, and subscribing to (or unsubscribing from) your emails. -### POST /user/webhooks/event/test +For more information about tracking, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Settings/tracking.html). + +### GET /tracking_settings ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.POST); - request.setEndpoint("user/webhooks/event/test"); - request.setBody("{\"url\":\"url\"}"); + request.setMethod(Method.GET); + request.setEndpoint("tracking_settings"); + request.addQueryParam("limit", "1"); + request.addQueryParam("offset", "1"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -5425,22 +5476,24 @@ Common uses of this data are to remove unsubscribes, react to spam reports, dete throw ex; } ``` -## Create a parse setting +## Update Click Tracking Settings -**This endpoint allows you to create a new inbound parse setting.** +**This endpoint allows you to change your current click tracking setting. You can enable, or disable, click tracking using this endpoint.** -The inbound parse webhook allows you to have incoming emails parsed, extracting some or all of the content, and then have that content POSTed by SendGrid to a URL of your choosing. For more information, please see our [User Guide](https://sendgrid.com/docs/API_Reference/Webhooks/parse.html). +You can track a variety of the actions your recipients may take when interacting with your emails including opening your emails, clicking on links in your emails, and subscribing to (or unsubscribing from) your emails. -### POST /user/webhooks/parse/settings +For more information about tracking, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Settings/tracking.html). + +### PATCH /tracking_settings/click ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.POST); - request.setEndpoint("user/webhooks/parse/settings"); - request.setBody("{\"url\":\"http://email.myhosthame.com\",\"send_raw\":false,\"hostname\":\"myhostname.com\",\"spam)_check\":true}"; + request.setMethod(Method.PATCH); + request.setEndpoint("tracking_settings/click"); + request.setBody("{\"enabled\":true}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -5449,13 +5502,15 @@ The inbound parse webhook allows you to have incoming emails parsed, extracting throw ex; } ``` -## Retrieve all parse settings +## Retrieve Click Track Settings -**This endpoint allows you to retrieve all of your current inbound parse settings.** +**This endpoint allows you to retrieve your current click tracking setting.** -The inbound parse webhook allows you to have incoming emails parsed, extracting some or all of the content, and then have that content POSTed by SendGrid to a URL of your choosing. For more information, please see our [User Guide](https://sendgrid.com/docs/API_Reference/Webhooks/parse.html). +You can track a variety of the actions your recipients may take when interacting with your emails including opening your emails, clicking on links in your emails, and subscribing to (or unsubscribing from) your emails. -### GET /user/webhooks/parse/settings +For more information about tracking, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Settings/tracking.html). + +### GET /tracking_settings/click ```java @@ -5463,7 +5518,7 @@ The inbound parse webhook allows you to have incoming emails parsed, extracting SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.setMethod(Method.GET); - request.setEndpoint("user/webhooks/parse/settings"); + request.setEndpoint("tracking_settings/click"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -5472,13 +5527,19 @@ The inbound parse webhook allows you to have incoming emails parsed, extracting throw ex; } ``` -## Update a parse setting +## Update Google Analytics Settings -**This endpoint allows you to update a specific inbound parse setting.** +**This endpoint allows you to update your current setting for Google Analytics.** -The inbound parse webhook allows you to have incoming emails parsed, extracting some or all of the content, and then have that content POSTed by SendGrid to a URL of your choosing. For more information, please see our [User Guide](https://sendgrid.com/docs/API_Reference/Webhooks/parse.html). +For more information about using Google Analytics, please refer to [Googles URL Builder](https://support.google.com/analytics/answer/1033867?hl=en) and their article on ["Best Practices for Campaign Building"](https://support.google.com/analytics/answer/1037445). -### PATCH /user/webhooks/parse/settings/{hostname} +We default the settings to Googles recommendations. For more information, see [Google Analytics Demystified](https://sendgrid.com/docs/Classroom/Track/Collecting_Data/google_analytics_demystified_ga_statistics_vs_sg_statistics.html). + +You can track a variety of the actions your recipients may take when interacting with your emails including opening your emails, clicking on links in your emails, and subscribing to (or unsubscribing from) your emails. + +For more information about tracking, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Settings/tracking.html). + +### PATCH /tracking_settings/google_analytics ```java @@ -5486,8 +5547,8 @@ The inbound parse webhook allows you to have incoming emails parsed, extracting SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.setMethod(Method.PATCH); - request.setEndpoint("user/webhooks/parse/settings/{hostname}"); - request.setBody("{\"url\":\"http://newdomain.com/parse\",\"send_raw\":true,\"spam_check\":false}"); + request.setEndpoint("tracking_settings/google_analytics"); + request.setBody("{\"utm_campaign\":\"website\",\"utm_term\":\"\",\"utm_content\":\"\",\"enabled\":true,\"utm)_source\":\"sendgrid.com\",\"utm_medium\":\"email\"}"; Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -5496,13 +5557,19 @@ The inbound parse webhook allows you to have incoming emails parsed, extracting throw ex; } ``` -## Retrieve a specific parse setting +## Retrieve Google Analytics Settings -**This endpoint allows you to retrieve a specific inbound parse setting.** +**This endpoint allows you to retrieve your current setting for Google Analytics.** -The inbound parse webhook allows you to have incoming emails parsed, extracting some or all of the content, and then have that content POSTed by SendGrid to a URL of your choosing. For more information, please see our [User Guide](https://sendgrid.com/docs/API_Reference/Webhooks/parse.html). +For more information about using Google Analytics, please refer to [Googles URL Builder](https://support.google.com/analytics/answer/1033867?hl=en) and their article on ["Best Practices for Campaign Building"](https://support.google.com/analytics/answer/1037445). -### GET /user/webhooks/parse/settings/{hostname} +We default the settings to Googles recommendations. For more information, see [Google Analytics Demystified](https://sendgrid.com/docs/Classroom/Track/Collecting_Data/google_analytics_demystified_ga_statistics_vs_sg_statistics.html). + +You can track a variety of the actions your recipients may take when interacting with your emails including opening your emails, clicking on links in your emails, and subscribing to (or unsubscribing from) your emails. + +For more information about tracking, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Settings/tracking.html). + +### GET /tracking_settings/google_analytics ```java @@ -5510,7 +5577,7 @@ The inbound parse webhook allows you to have incoming emails parsed, extracting SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.setMethod(Method.GET); - request.setEndpoint("user/webhooks/parse/settings/{hostname}"); + request.setEndpoint("tracking_settings/google_analytics"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -5519,21 +5586,26 @@ The inbound parse webhook allows you to have incoming emails parsed, extracting throw ex; } ``` -## Delete a parse setting +## Update Open Tracking Settings -**This endpoint allows you to delete a specific inbound parse setting.** +**This endpoint allows you to update your current settings for open tracking.** -The inbound parse webhook allows you to have incoming emails parsed, extracting some or all of the content, and then have that content POSTed by SendGrid to a URL of your choosing. For more information, please see our [User Guide](https://sendgrid.com/docs/API_Reference/Webhooks/parse.html). +Open Tracking adds an invisible image at the end of the email which can track email opens. If the email recipient has images enabled on their email client, a request to SendGrids server for the invisible image is executed and an open event is logged. These events are logged in the Statistics portal, Email Activity interface, and are reported by the Event Webhook. -### DELETE /user/webhooks/parse/settings/{hostname} +You can track a variety of the actions your recipients may take when interacting with your emails including opening your emails, clicking on links in your emails, and subscribing to (or unsubscribing from) your emails. + +For more information about tracking, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Settings/tracking.html). + +### PATCH /tracking_settings/open ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.DELETE); - request.setEndpoint("user/webhooks/parse/settings/{hostname}"); + request.setMethod(Method.PATCH); + request.setEndpoint("tracking_settings/open"); + request.setBody("{\"enabled\":true}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -5542,15 +5614,17 @@ The inbound parse webhook allows you to have incoming emails parsed, extracting throw ex; } ``` -## Retrieves Inbound Parse Webhook statistics. +## Get Open Tracking Settings -**This endpoint allows you to retrieve the statistics for your Parse Webhook usage.** +**This endpoint allows you to retrieve your current settings for open tracking.** -SendGrid's Inbound Parse Webhook allows you to parse the contents and attachments of incoming emails. The Parse API can then POST the parsed emails to a URL that you specify. The Inbound Parse Webhook cannot parse messages greater than 20MB in size, including all attachments. +Open Tracking adds an invisible image at the end of the email which can track email opens. If the email recipient has images enabled on their email client, a request to SendGrids server for the invisible image is executed and an open event is logged. These events are logged in the Statistics portal, Email Activity interface, and are reported by the Event Webhook. -There are a number of pre-made integrations for the SendGrid Parse Webhook which make processing events easy. You can find these integrations in the [Library Index](https://sendgrid.com/docs/Integrate/libraries.html#-Webhook-Libraries). +You can track a variety of the actions your recipients may take when interacting with your emails including opening your emails, clicking on links in your emails, and subscribing to (or unsubscribing from) your emails. -### GET /user/webhooks/parse/stats +For more information about tracking, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Settings/tracking.html). + +### GET /tracking_settings/open ```java @@ -5558,12 +5632,7 @@ There are a number of pre-made integrations for the SendGrid Parse Webhook which SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.setMethod(Method.GET); - request.setEndpoint("user/webhooks/parse/stats"); - request.addQueryParam("aggregated_by", "day"); - request.addQueryParam("limit", "test_string"); - request.addQueryParam("start_date", "2016-01-01"); - request.addQueryParam("end_date", "2016-04-01"); - request.addQueryParam("offset", "test_string"); + request.setEndpoint("tracking_settings/open"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -5572,31 +5641,26 @@ There are a number of pre-made integrations for the SendGrid Parse Webhook which throw ex; } ``` - -# WHITELABEL - -## Create a domain whitelabel. +## Update Subscription Tracking Settings -**This endpoint allows you to create a whitelabel for one of your domains.** +**This endpoint allows you to update your current settings for subscription tracking.** -If you are creating a domain whitelabel that you would like a subuser to use, you have two options: -1. Use the "username" parameter. This allows you to create a whitelabel on behalf of your subuser. This means the subuser is able to see and modify the created whitelabel. -2. Use the Association workflow (see Associate Domain section). This allows you to assign a whitelabel created by the parent to a subuser. This means the subuser will default to the assigned whitelabel, but will not be able to see or modify that whitelabel. However, if the subuser creates their own whitelabel it will overwrite the assigned whitelabel. +Subscription tracking adds links to the bottom of your emails that allows your recipients to subscribe to, or unsubscribe from, your emails. -A domain whitelabel allows you to remove the via or sent on behalf of message that your recipients see when they read your emails. Whitelabeling a domain allows you to replace sendgrid.net with your personal sending domain. You will be required to create a subdomain so that SendGrid can generate the DNS records which you must give to your host provider. If you choose to use Automated Security, SendGrid will provide you with 3 CNAME records. If you turn Automated Security off, you will be given 2 TXT records and 1 MX record. +You can track a variety of the actions your recipients may take when interacting with your emails including opening your emails, clicking on links in your emails, and subscribing to (or unsubscribing from) your emails. -For more information on whitelabeling, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Settings/Whitelabel/index.html) +For more information about tracking, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Settings/tracking.html). -### POST /whitelabel/domains +### PATCH /tracking_settings/subscription ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.POST); - request.setEndpoint("whitelabel/domains"); - request.setBody("{\"automatic)_security\":false,\"username\":\"john@example.com\",\"domain\":\"example.com\",\"default\":true,\"custom_spf\":true,\"ips\":[\"192.168.1.1\",\"192.168.1.2\"],\"subdomain\":\"news\"}"; + request.setMethod(Method.PATCH); + request.setEndpoint("tracking_settings/subscription"); + request.setBody("{\"url\":\"url\",\"html_content\":\"html content\",\"enabled\":true,\"landing\":\"landing page) html\",\"replace\":\"replacement tag\",\"plain_content\":\"text content\"}"; Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -5605,16 +5669,17 @@ For more information on whitelabeling, please see our [User Guide](https://sendg throw ex; } ``` -## List all domain whitelabels. +## Retrieve Subscription Tracking Settings -**This endpoint allows you to retrieve a list of all domain whitelabels you have created.** +**This endpoint allows you to retrieve your current settings for subscription tracking.** -A domain whitelabel allows you to remove the via or sent on behalf of message that your recipients see when they read your emails. Whitelabeling a domain allows you to replace sendgrid.net with your personal sending domain. You will be required to create a subdomain so that SendGrid can generate the DNS records which you must give to your host provider. If you choose to use Automated Security, SendGrid will provide you with 3 CNAME records. If you turn Automated Security off, you will be given 2 TXT records and 1 MX record. +Subscription tracking adds links to the bottom of your emails that allows your recipients to subscribe to, or unsubscribe from, your emails. -For more information on whitelabeling, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Settings/Whitelabel/index.html) +You can track a variety of the actions your recipients may take when interacting with your emails including opening your emails, clicking on links in your emails, and subscribing to (or unsubscribing from) your emails. +For more information about tracking, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Settings/tracking.html). -### GET /whitelabel/domains +### GET /tracking_settings/subscription ```java @@ -5622,12 +5687,7 @@ For more information on whitelabeling, please see our [User Guide](https://sendg SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.setMethod(Method.GET); - request.setEndpoint("whitelabel/domains"); - request.addQueryParam("username", "test_string"); - request.addQueryParam("domain", "test_string"); - request.addQueryParam("exclude_subusers", "true"); - request.addQueryParam("limit", "1"); - request.addQueryParam("offset", "1"); + request.setEndpoint("tracking_settings/subscription"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -5636,20 +5696,22 @@ For more information on whitelabeling, please see our [User Guide](https://sendg throw ex; } ``` -## Get the default domain whitelabel. + +# USER -**This endpoint allows you to retrieve the default whitelabel for a domain.** +## Get a user's account information. -A domain whitelabel allows you to remove the via or sent on behalf of message that your recipients see when they read your emails. Whitelabeling a domain allows you to replace sendgrid.net with your personal sending domain. You will be required to create a subdomain so that SendGrid can generate the DNS records which you must give to your host provider. If you choose to use Automated Security, SendGrid will provide you with 3 CNAME records. If you turn Automated Security off, you will be given 2 TXT records and 1 MX record. +**This endpoint allows you to retrieve your user account details.** -For more information on whitelabeling, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Settings/Whitelabel/index.html) +Your user's account information includes the user's account type and reputation. -## URI Parameters -| URI Parameter | Type | Description | -|---|---|---| -| domain | string |The domain to find a default domain whitelabel for. | +Keeping your user profile up to date is important. This will help SendGrid to verify who you are as well as contact you should we need to. -### GET /whitelabel/domains/default +For more information about your user profile: + +* [SendGrid Account Settings](https://sendgrid.com/docs/User_Guide/Settings/account.html) + +### GET /user/account ```java @@ -5657,7 +5719,7 @@ For more information on whitelabeling, please see our [User Guide](https://sendg SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.setMethod(Method.GET); - request.setEndpoint("whitelabel/domains/default"); + request.setEndpoint("user/account"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -5666,22 +5728,13 @@ For more information on whitelabeling, please see our [User Guide](https://sendg throw ex; } ``` -## List the domain whitelabel associated with the given user. - -**This endpoint allows you to retrieve all of the whitelabels that have been assigned to a specific subuser.** - -A domain whitelabel allows you to remove the via or sent on behalf of message that your recipients see when they read your emails. Whitelabeling a domain allows you to replace sendgrid.net with your personal sending domain. You will be required to create a subdomain so that SendGrid can generate the DNS records which you must give to your host provider. If you choose to use Automated Security, SendGrid will provide you with 3 CNAME records. If you turn Automated Security off, you will be given 2 TXT records and 1 MX record. - -Domain whitelabels can be associated with (i.e. assigned to) subusers from a parent account. This functionality allows subusers to send mail using their parent's whitelabels. To associate a whitelabel with a subuser, the parent account must first create the whitelabel and validate it. The parent may then associate the whitelabel via the subuser management tools. +## Retrieve your credit balance -For more information on whitelabeling, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Settings/Whitelabel/index.html) +**This endpoint allows you to retrieve the current credit balance for your account.** -## URI Parameters -| URI Parameter | Type | Description | -|---|---|---| -| username | string | Username of the subuser to find associated whitelabels for. | +Your monthly credit allotment limits the number of emails you may send before incurring overage charges. For more information about credits and billing, please visit our [Classroom](https://sendgrid.com/docs/Classroom/Basics/Billing/billing_info_and_faqs.html). -### GET /whitelabel/domains/subuser +### GET /user/credits ```java @@ -5689,7 +5742,7 @@ For more information on whitelabeling, please see our [User Guide](https://sendg SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.setMethod(Method.GET); - request.setEndpoint("whitelabel/domains/subuser"); + request.setEndpoint("user/credits"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -5698,30 +5751,26 @@ For more information on whitelabeling, please see our [User Guide](https://sendg throw ex; } ``` -## Disassociate a domain whitelabel from a given user. - -**This endpoint allows you to disassociate a specific whitelabel from a subuser.** +## Update your account email address -A domain whitelabel allows you to remove the via or sent on behalf of message that your recipients see when they read your emails. Whitelabeling a domain allows you to replace sendgrid.net with your personal sending domain. You will be required to create a subdomain so that SendGrid can generate the DNS records which you must give to your host provider. If you choose to use Automated Security, SendGrid will provide you with 3 CNAME records. If you turn Automated Security off, you will be given 2 TXT records and 1 MX record. +**This endpoint allows you to update the email address currently on file for your account.** -Domain whitelabels can be associated with (i.e. assigned to) subusers from a parent account. This functionality allows subusers to send mail using their parent's whitelabels. To associate a whitelabel with a subuser, the parent account must first create the whitelabel and validate it. The parent may then associate the whitelabel via the subuser management tools. +Keeping your user profile up to date is important. This will help SendGrid to verify who you are as well as contact you should we need to. -For more information on whitelabeling, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Settings/Whitelabel/index.html) +For more information about your user profile: -## URI Parameters -| URI Parameter | Type | Required? | Description | -|---|---|---|---| -| username | string | required | Username for the subuser to find associated whitelabels for. | +* [SendGrid Account Settings](https://sendgrid.com/docs/User_Guide/Settings/account.html) -### DELETE /whitelabel/domains/subuser +### PUT /user/email ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.DELETE); - request.setEndpoint("whitelabel/domains/subuser"); + request.setMethod(Method.PUT); + request.setEndpoint("user/email"); + request.setBody("{\"email\":\"example@example.com\"}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -5730,24 +5779,25 @@ For more information on whitelabeling, please see our [User Guide](https://sendg throw ex; } ``` -## Update a domain whitelabel. +## Retrieve your account email address + +**This endpoint allows you to retrieve the email address currently on file for your account.** -**This endpoint allows you to update the settings for a domain whitelabel.** +Keeping your user profile up to date is important. This will help SendGrid to verify who you are as well as contact you should we need to. -A domain whitelabel allows you to remove the via or sent on behalf of message that your recipients see when they read your emails. Whitelabeling a domain allows you to replace sendgrid.net with your personal sending domain. You will be required to create a subdomain so that SendGrid can generate the DNS records which you must give to your host provider. If you choose to use Automated Security, SendGrid will provide you with 3 CNAME records. If you turn Automated Security off, you will be given 2 TXT records and 1 MX record. +For more information about your user profile: -For more information on whitelabeling, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Settings/Whitelabel/index.html) +* [SendGrid Account Settings](https://sendgrid.com/docs/User_Guide/Settings/account.html) -### PATCH /whitelabel/domains/{domain_id} +### GET /user/email ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.PATCH); - request.setEndpoint("whitelabel/domains/{domain_id}"); - request.setBody("{\"default\":false,\"custom_spf\":true}"); + request.setMethod(Method.GET); + request.setEndpoint("user/email"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -5756,24 +5806,26 @@ For more information on whitelabeling, please see our [User Guide](https://sendg throw ex; } ``` -## Retrieve a domain whitelabel. +## Update your password -**This endpoint allows you to retrieve a specific domain whitelabel.** +**This endpoint allows you to update your password.** -A domain whitelabel allows you to remove the via or sent on behalf of message that your recipients see when they read your emails. Whitelabeling a domain allows you to replace sendgrid.net with your personal sending domain. You will be required to create a subdomain so that SendGrid can generate the DNS records which you must give to your host provider. If you choose to use Automated Security, SendGrid will provide you with 3 CNAME records. If you turn Automated Security off, you will be given 2 TXT records and 1 MX record. +Keeping your user profile up to date is important. This will help SendGrid to verify who you are as well as contact you should we need to. -For more information on whitelabeling, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Settings/Whitelabel/index.html) +For more information about your user profile: +* [SendGrid Account Settings](https://sendgrid.com/docs/User_Guide/Settings/account.html) -### GET /whitelabel/domains/{domain_id} +### PUT /user/password ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("whitelabel/domains/{domain_id}"); + request.setMethod(Method.PUT); + request.setEndpoint("user/password"); + request.setBody("{\"new_password\":\"new_password\",\"old_password\":\"old_password\"}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -5782,23 +5834,28 @@ For more information on whitelabeling, please see our [User Guide](https://sendg throw ex; } ``` -## Delete a domain whitelabel. +## Update a user's profile -**This endpoint allows you to delete a domain whitelabel.** +**This endpoint allows you to update your current profile details.** -A domain whitelabel allows you to remove the via or sent on behalf of message that your recipients see when they read your emails. Whitelabeling a domain allows you to replace sendgrid.net with your personal sending domain. You will be required to create a subdomain so that SendGrid can generate the DNS records which you must give to your host provider. If you choose to use Automated Security, SendGrid will provide you with 3 CNAME records. If you turn Automated Security off, you will be given 2 TXT records and 1 MX record. +Keeping your user profile up to date is important. This will help SendGrid to verify who you are as well as contact you should we need to. -For more information on whitelabeling, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Settings/Whitelabel/index.html) +For more information about your user profile: -### DELETE /whitelabel/domains/{domain_id} +* [SendGrid Account Settings](https://sendgrid.com/docs/User_Guide/Settings/account.html) + +It should be noted that any one or more of the parameters can be updated via the PATCH /user/profile endpoint. The only requirement is that you include at least one when you PATCH. + +### PATCH /user/profile ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.DELETE); - request.setEndpoint("whitelabel/domains/{domain_id}"); + request.setMethod(Method.PATCH); + request.setEndpoint("user/profile"); + request.setBody("{\"city\":\"Orange\",\"first_name\":\"Example\",\"last_name\":\"User\"}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -5807,31 +5864,23 @@ For more information on whitelabeling, please see our [User Guide](https://sendg throw ex; } ``` -## Associate a domain whitelabel with a given user. - -**This endpoint allows you to associate a specific domain whitelabel with a subuser.** - -A domain whitelabel allows you to remove the via or sent on behalf of message that your recipients see when they read your emails. Whitelabeling a domain allows you to replace sendgrid.net with your personal sending domain. You will be required to create a subdomain so that SendGrid can generate the DNS records which you must give to your host provider. If you choose to use Automated Security, SendGrid will provide you with 3 CNAME records. If you turn Automated Security off, you will be given 2 TXT records and 1 MX record. +## Get a user's profile -Domain whitelabels can be associated with (i.e. assigned to) subusers from a parent account. This functionality allows subusers to send mail using their parent's whitelabels. To associate a whitelabel with a subuser, the parent account must first create the whitelabel and validate it. The parent may then associate the whitelabel via the subuser management tools. +Keeping your user profile up to date is important. This will help SendGrid to verify who you are as well as contact you should we need to. -For more information on whitelabeling, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Settings/Whitelabel/index.html) +For more information about your user profile: -## URI Parameters -| URI Parameter | Type | Description | -|---|---|---| -| domain_id | integer | ID of the domain whitelabel to associate with the subuser. | +* [SendGrid Account Settings](https://sendgrid.com/docs/User_Guide/Settings/account.html) -### POST /whitelabel/domains/{domain_id}/subuser +### GET /user/profile ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.POST); - request.setEndpoint("whitelabel/domains/{domain_id}/subuser"); - request.setBody("{\"username\":\"jane@example.com\"}"); + request.setMethod(Method.GET); + request.setEndpoint("user/profile"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -5840,20 +5889,16 @@ For more information on whitelabeling, please see our [User Guide](https://sendg throw ex; } ``` -## Add an IP to a domain whitelabel. - -**This endpoint allows you to add an IP address to a domain whitelabel.** +## Cancel or pause a scheduled send -A domain whitelabel allows you to remove the via or sent on behalf of message that your recipients see when they read your emails. Whitelabeling a domain allows you to replace sendgrid.net with your personal sending domain. You will be required to create a subdomain so that SendGrid can generate the DNS records which you must give to your host provider. If you choose to use Automated Security, SendGrid will provide you with 3 CNAME records. If you turn Automated Security off, you will be given 2 TXT records and 1 MX record. +**This endpoint allows you to cancel or pause an email that has been scheduled to be sent.** -For more information on whitelabeling, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Settings/Whitelabel/index.html) +If the maximum number of cancellations/pauses are added, HTTP 400 will +be returned. -## URI Parameters -| URI Parameter | Type | Description | -|---|---|---| -| id | integer | ID of the domain to which you are adding an IP | +The Cancel Scheduled Sends feature allows the customer to cancel a scheduled send based on a Batch ID included in the SMTPAPI header.Scheduled sends cancelled less than 10 minutes before the scheduled time are not guaranteed to be cancelled. -### POST /whitelabel/domains/{id}/ips +### POST /user/scheduled_sends ```java @@ -5861,8 +5906,8 @@ For more information on whitelabeling, please see our [User Guide](https://sendg SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.setMethod(Method.POST); - request.setEndpoint("whitelabel/domains/{id}/ips"); - request.setBody("{\"ip\":\"192.168.0.1\"}"); + request.setEndpoint("user/scheduled_sends"); + request.setBody("{\"batch_id\":\"YOUR_BATCH_ID\",\"status\":\"pause\"}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -5871,29 +5916,21 @@ For more information on whitelabeling, please see our [User Guide](https://sendg throw ex; } ``` -## Remove an IP from a domain whitelabel. - -**This endpoint allows you to remove a domain's IP address from that domain's whitelabel.** - -A domain whitelabel allows you to remove the via or sent on behalf of message that your recipients see when they read your emails. Whitelabeling a domain allows you to replace sendgrid.net with your personal sending domain. You will be required to create a subdomain so that SendGrid can generate the DNS records which you must give to your host provider. If you choose to use Automated Security, SendGrid will provide you with 3 CNAME records. If you turn Automated Security off, you will be given 2 TXT records and 1 MX record. +## Retrieve all scheduled sends -For more information on whitelabeling, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Settings/Whitelabel/index.html) +**This endpoint allows you to retrieve all cancel/paused scheduled send information.** -## URI Parameters -| URI Parameter | Type | Description | -|---|---|---| -| id | integer | ID of the domain whitelabel to delete the IP from. | -| ip | string | IP to remove from the domain whitelabel. | +The Cancel Scheduled Sends feature allows the customer to cancel a scheduled send based on a Batch ID included in the SMTPAPI header.Scheduled sends cancelled less than 10 minutes before the scheduled time are not guaranteed to be cancelled. -### DELETE /whitelabel/domains/{id}/ips/{ip} +### GET /user/scheduled_sends ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.DELETE); - request.setEndpoint("whitelabel/domains/{id}/ips/{ip}"); + request.setMethod(Method.GET); + request.setEndpoint("user/scheduled_sends"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -5902,28 +5939,22 @@ For more information on whitelabeling, please see our [User Guide](https://sendg throw ex; } ``` -## Validate a domain whitelabel. - -**This endpoint allows you to validate a domain whitelabel. If it fails, it will return an error message describing why the whitelabel could not be validated.** - -A domain whitelabel allows you to remove the via or sent on behalf of message that your recipients see when they read your emails. Whitelabeling a domain allows you to replace sendgrid.net with your personal sending domain. You will be required to create a subdomain so that SendGrid can generate the DNS records which you must give to your host provider. If you choose to use Automated Security, SendGrid will provide you with 3 CNAME records. If you turn Automated Security off, you will be given 2 TXT records and 1 MX record. +## Update user scheduled send information -For more information on whitelabeling, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Settings/Whitelabel/index.html) +**This endpoint allows you to update the status of a scheduled send for the given `batch_id`.** -## URI Parameters -| URI Parameter | Type | Description | -|---|---|---| -| id | integer |ID of the domain whitelabel to validate. | +The Cancel Scheduled Sends feature allows the customer to cancel a scheduled send based on a Batch ID included in the SMTPAPI header.Scheduled sends cancelled less than 10 minutes before the scheduled time are not guaranteed to be cancelled. -### POST /whitelabel/domains/{id}/validate +### PATCH /user/scheduled_sends/{batch_id} ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.POST); - request.setEndpoint("whitelabel/domains/{id}/validate"); + request.setMethod(Method.PATCH); + request.setEndpoint("user/scheduled_sends/{batch_id}"); + request.setBody("{\"status\":\"pause\"}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -5932,26 +5963,21 @@ For more information on whitelabeling, please see our [User Guide](https://sendg throw ex; } ``` -## Create an IP whitelabel - -**This endpoint allows you to create an IP whitelabel.** - -When creating an IP whitelable, you should use the same subdomain that you used when you created a domain whitelabel. +## Retrieve scheduled send -A IP whitelabel consists of a subdomain and domain that will be used to generate a reverse DNS record for a given IP. Once SendGrid has verified that the appropriate A record for the IP has been created, the appropriate reverse DNS record for the IP is generated. +**This endpoint allows you to retrieve the cancel/paused scheduled send information for a specific `batch_id`.** -For more information, please see our [User Guide](https://sendgrid.com/docs/API_Reference/Web_API_v3/Whitelabel/ips.html). +The Cancel Scheduled Sends feature allows the customer to cancel a scheduled send based on a Batch ID included in the SMTPAPI header.Scheduled sends cancelled less than 10 minutes before the scheduled time are not guaranteed to be cancelled. -### POST /whitelabel/ips +### GET /user/scheduled_sends/{batch_id} ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.POST); - request.setEndpoint("whitelabel/ips"); - request.setBody("{\"ip\":\"192.168.1.1\",\"domain\":\"example.com\",\"subdomain\":\"email\"}"); + request.setMethod(Method.GET); + request.setEndpoint("user/scheduled_sends/{batch_id}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -5960,28 +5986,21 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ throw ex; } ``` -## Retrieve all IP whitelabels - -**This endpoint allows you to retrieve all of the IP whitelabels that have been created by this account.** - -You may include a search key by using the "ip" parameter. This enables you to perform a prefix search for a given IP segment (e.g. "192."). +## Delete a cancellation or pause of a scheduled send -A IP whitelabel consists of a subdomain and domain that will be used to generate a reverse DNS record for a given IP. Once SendGrid has verified that the appropriate A record for the IP has been created, the appropriate reverse DNS record for the IP is generated. +**This endpoint allows you to delete the cancellation/pause of a scheduled send.** -For more information, please see our [User Guide](https://sendgrid.com/docs/API_Reference/Web_API_v3/Whitelabel/ips.html). +The Cancel Scheduled Sends feature allows the customer to cancel a scheduled send based on a Batch ID included in the SMTPAPI header.Scheduled sends cancelled less than 10 minutes before the scheduled time are not guaranteed to be cancelled. -### GET /whitelabel/ips +### DELETE /user/scheduled_sends/{batch_id} ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("whitelabel/ips"); - request.addQueryParam("ip", "test_string"); - request.addQueryParam("limit", "1"); - request.addQueryParam("offset", "1"); + request.setMethod(Method.DELETE); + request.setEndpoint("user/scheduled_sends/{batch_id}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -5990,23 +6009,24 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ throw ex; } ``` -## Retrieve an IP whitelabel +## Update Enforced TLS settings -**This endpoint allows you to retrieve an IP whitelabel.** +**This endpoint allows you to update your current Enforced TLS settings.** -A IP whitelabel consists of a subdomain and domain that will be used to generate a reverse DNS record for a given IP. Once SendGrid has verified that the appropriate A record for the IP has been created, the appropriate reverse DNS record for the IP is generated. +The Enforced TLS settings specify whether or not the recipient is required to support TLS or have a valid certificate. See the [SMTP Ports User Guide](https://sendgrid.com/docs/Classroom/Basics/Email_Infrastructure/smtp_ports.html) for more information on opportunistic TLS. -For more information, please see our [User Guide](https://sendgrid.com/docs/API_Reference/Web_API_v3/Whitelabel/ips.html). +**Note:** If either setting is enabled and the recipient does not support TLS or have a valid certificate, we drop the message and send a block event with TLS required but not supported as the description. -### GET /whitelabel/ips/{id} +### PATCH /user/settings/enforced_tls ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("whitelabel/ips/{id}"); + request.setMethod(Method.PATCH); + request.setEndpoint("user/settings/enforced_tls"); + request.setBody("{\"require_tls\":true,\"require_valid_cert\":false}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -6015,23 +6035,23 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ throw ex; } ``` -## Delete an IP whitelabel +## Retrieve current Enforced TLS settings. -**This endpoint allows you to delete an IP whitelabel.** +**This endpoint allows you to retrieve your current Enforced TLS settings.** -A IP whitelabel consists of a subdomain and domain that will be used to generate a reverse DNS record for a given IP. Once SendGrid has verified that the appropriate A record for the IP has been created, the appropriate reverse DNS record for the IP is generated. +The Enforced TLS settings specify whether or not the recipient is required to support TLS or have a valid certificate. See the [SMTP Ports User Guide](https://sendgrid.com/docs/Classroom/Basics/Email_Infrastructure/smtp_ports.html) for more information on opportunistic TLS. -For more information, please see our [User Guide](https://sendgrid.com/docs/API_Reference/Web_API_v3/Whitelabel/ips.html). +**Note:** If either setting is enabled and the recipient does not support TLS or have a valid certificate, we drop the message and send a block event with TLS required but not supported as the description. -### DELETE /whitelabel/ips/{id} +### GET /user/settings/enforced_tls ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.DELETE); - request.setEndpoint("whitelabel/ips/{id}"); + request.setMethod(Method.GET); + request.setEndpoint("user/settings/enforced_tls"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -6040,23 +6060,26 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ throw ex; } ``` -## Validate an IP whitelabel +## Update your username -**This endpoint allows you to validate an IP whitelabel.** +**This endpoint allows you to update the username for your account.** -A IP whitelabel consists of a subdomain and domain that will be used to generate a reverse DNS record for a given IP. Once SendGrid has verified that the appropriate A record for the IP has been created, the appropriate reverse DNS record for the IP is generated. +Keeping your user profile up to date is important. This will help SendGrid to verify who you are as well as contact you should we need to. -For more information, please see our [User Guide](https://sendgrid.com/docs/API_Reference/Web_API_v3/Whitelabel/ips.html). +For more information about your user profile: -### POST /whitelabel/ips/{id}/validate +* [SendGrid Account Settings](https://sendgrid.com/docs/User_Guide/Settings/account.html) + +### PUT /user/username ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.POST); - request.setEndpoint("whitelabel/ips/{id}/validate"); + request.setMethod(Method.PUT); + request.setEndpoint("user/username"); + request.setBody("{\"username\":\"test_username\"}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -6065,26 +6088,25 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ throw ex; } ``` -## Create a Link Whitelabel +## Retrieve your username -**This endpoint allows you to create a new link whitelabel.** +**This endpoint allows you to retrieve your current account username.** -Email link whitelabels allow all of the click-tracked links you send in your emails to include the URL of your domain instead of sendgrid.net. +Keeping your user profile up to date is important. This will help SendGrid to verify who you are as well as contact you should we need to. -For more information, please see our [User Guide](https://sendgrid.com/docs/API_Reference/Web_API_v3/Whitelabel/links.html). +For more information about your user profile: -### POST /whitelabel/links +* [SendGrid Account Settings](https://sendgrid.com/docs/User_Guide/Settings/account.html) + +### GET /user/username ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.POST); - request.setEndpoint("whitelabel/links"); - request.setBody("{\"default\":true,\"domain\":\"example.com\",\"subdomain\":\"mail\"}"); - request.addQueryParam("limit", "1"); - request.addQueryParam("offset", "1"); + request.setMethod(Method.GET); + request.setEndpoint("user/username"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -6093,24 +6115,26 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ throw ex; } ``` -## Retrieve all link whitelabels +## Update Event Notification Settings + +**This endpoint allows you to update your current event webhook settings.** -**This endpoint allows you to retrieve all link whitelabels.** +If an event type is marked as `true`, then the event webhook will include information about that event. -Email link whitelabels allow all of the click-tracked links you send in your emails to include the URL of your domain instead of sendgrid.net. +SendGrids Event Webhook will notify a URL of your choice via HTTP POST with information about events that occur as SendGrid processes your email. -For more information, please see our [User Guide](https://sendgrid.com/docs/API_Reference/Web_API_v3/Whitelabel/links.html). +Common uses of this data are to remove unsubscribes, react to spam reports, determine unengaged recipients, identify bounced email addresses, or create advanced analytics of your email program. -### GET /whitelabel/links +### PATCH /user/webhooks/event/settings ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("whitelabel/links"); - request.addQueryParam("limit", "1"); + request.setMethod(Method.PATCH); + request.setEndpoint("user/webhooks/event/settings"); + request.setBody("{\"group_resubscribe\":true,\"delivered\":true,\"group_unsubscribe\":true,\"spam_report\":true,\"url\":\"url\)",\"enabled\":true,\"bounce\":true,\"deferred\":true,\"unsubscribe\":true,\"dropped\":true,\"open\":true,\"click\":true,\"processed\":true}"; Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -6119,22 +6143,17 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ throw ex; } ``` -## Retrieve a Default Link Whitelabel +## Retrieve Event Webhook settings -**This endpoint allows you to retrieve the default link whitelabel.** +**This endpoint allows you to retrieve your current event webhook settings.** -Default link whitelabel is the actual link whitelabel to be used when sending messages. If there are multiple link whitelabels, the default is determined by the following order: -
    -
  • Validated link whitelabels marked as "default"
  • -
  • Legacy link whitelabels (migrated from the whitelabel wizard)
  • -
  • Default SendGrid link whitelabel (i.e. 100.ct.sendgrid.net)
  • -
+If an event type is marked as `true`, then the event webhook will include information about that event. -Email link whitelabels allow all of the click-tracked links you send in your emails to include the URL of your domain instead of sendgrid.net. +SendGrids Event Webhook will notify a URL of your choice via HTTP POST with information about events that occur as SendGrid processes your email. -For more information, please see our [User Guide](https://sendgrid.com/docs/API_Reference/Web_API_v3/Whitelabel/links.html). +Common uses of this data are to remove unsubscribes, react to spam reports, determine unengaged recipients, identify bounced email addresses, or create advanced analytics of your email program. -### GET /whitelabel/links/default +### GET /user/webhooks/event/settings ```java @@ -6142,8 +6161,7 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); request.setMethod(Method.GET); - request.setEndpoint("whitelabel/links/default"); - request.addQueryParam("domain", "test_string"); + request.setEndpoint("user/webhooks/event/settings"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -6152,28 +6170,24 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ throw ex; } ``` -## Retrieve Associated Link Whitelabel - -**This endpoint allows you to retrieve the associated link whitelabel for a subuser.** +## Test Event Notification Settings -Link whitelables can be associated with subusers from the parent account. This functionality allows -subusers to send mail using their parent's link whitelabels. To associate a link whitelabel, the parent account -must first create a whitelabel and validate it. The parent may then associate that whitelabel with a subuser via the API or the Subuser Management page in the user interface. +**This endpoint allows you to test your event webhook by sending a fake event notification post to the provided URL.** -Email link whitelabels allow all of the click-tracked links you send in your emails to include the URL of your domain instead of sendgrid.net. +SendGrids Event Webhook will notify a URL of your choice via HTTP POST with information about events that occur as SendGrid processes your email. -For more information, please see our [User Guide](https://sendgrid.com/docs/API_Reference/Web_API_v3/Whitelabel/links.html). +Common uses of this data are to remove unsubscribes, react to spam reports, determine unengaged recipients, identify bounced email addresses, or create advanced analytics of your email program. -### GET /whitelabel/links/subuser +### POST /user/webhooks/event/test ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("whitelabel/links/subuser"); - request.addQueryParam("username", "test_string"); + request.setMethod(Method.POST); + request.setEndpoint("user/webhooks/event/test"); + request.setBody("{\"url\":\"url\"}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -6182,28 +6196,22 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ throw ex; } ``` -## Disassociate a Link Whitelabel - -**This endpoint allows you to disassociate a link whitelabel from a subuser.** - -Link whitelables can be associated with subusers from the parent account. This functionality allows -subusers to send mail using their parent's link whitelabels. To associate a link whitelabel, the parent account -must first create a whitelabel and validate it. The parent may then associate that whitelabel with a subuser via the API or the Subuser Management page in the user interface. +## Create a parse setting -Email link whitelabels allow all of the click-tracked links you send in your emails to include the URL of your domain instead of sendgrid.net. +**This endpoint allows you to create a new inbound parse setting.** -For more information, please see our [User Guide](https://sendgrid.com/docs/API_Reference/Web_API_v3/Whitelabel/links.html). +The inbound parse webhook allows you to have incoming emails parsed, extracting some or all of the content, and then have that content POSTed by SendGrid to a URL of your choosing. For more information, please see our [User Guide](https://sendgrid.com/docs/API_Reference/Webhooks/parse.html). -### DELETE /whitelabel/links/subuser +### POST /user/webhooks/parse/settings ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.DELETE); - request.setEndpoint("whitelabel/links/subuser"); - request.addQueryParam("username", "test_string"); + request.setMethod(Method.POST); + request.setEndpoint("user/webhooks/parse/settings"); + request.setBody("{\"url\":\"http://email.myhosthame.com\",\"send_raw\":false,\"hostname\":\"myhostname.com\",\"spam)_check\":true}"; Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -6212,24 +6220,21 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ throw ex; } ``` -## Update a Link Whitelabel - -**This endpoint allows you to update a specific link whitelabel. You can use this endpoint to change a link whitelabel's default status.** +## Retrieve all parse settings -Email link whitelabels allow all of the click-tracked links you send in your emails to include the URL of your domain instead of sendgrid.net. +**This endpoint allows you to retrieve all of your current inbound parse settings.** -For more information, please see our [User Guide](https://sendgrid.com/docs/API_Reference/Web_API_v3/Whitelabel/links.html). +The inbound parse webhook allows you to have incoming emails parsed, extracting some or all of the content, and then have that content POSTed by SendGrid to a URL of your choosing. For more information, please see our [User Guide](https://sendgrid.com/docs/API_Reference/Webhooks/parse.html). -### PATCH /whitelabel/links/{id} +### GET /user/webhooks/parse/settings ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.PATCH); - request.setEndpoint("whitelabel/links/{id}"); - request.setBody("{\"default\":true}"); + request.setMethod(Method.GET); + request.setEndpoint("user/webhooks/parse/settings"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -6238,23 +6243,22 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ throw ex; } ``` -## Retrieve a Link Whitelabel - -**This endpoint allows you to retrieve a specific link whitelabel.** +## Update a parse setting -Email link whitelabels allow all of the click-tracked links you send in your emails to include the URL of your domain instead of sendgrid.net. +**This endpoint allows you to update a specific inbound parse setting.** -For more information, please see our [User Guide](https://sendgrid.com/docs/API_Reference/Web_API_v3/Whitelabel/links.html). +The inbound parse webhook allows you to have incoming emails parsed, extracting some or all of the content, and then have that content POSTed by SendGrid to a URL of your choosing. For more information, please see our [User Guide](https://sendgrid.com/docs/API_Reference/Webhooks/parse.html). -### GET /whitelabel/links/{id} +### PATCH /user/webhooks/parse/settings/{hostname} ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("whitelabel/links/{id}"); + request.setMethod(Method.PATCH); + request.setEndpoint("user/webhooks/parse/settings/{hostname}"); + request.setBody("{\"url\":\"http://newdomain.com/parse\",\"send_raw\":true,\"spam_check\":false}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -6263,23 +6267,21 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ throw ex; } ``` -## Delete a Link Whitelabel - -**This endpoint allows you to delete a link whitelabel.** +## Retrieve a specific parse setting -Email link whitelabels allow all of the click-tracked links you send in your emails to include the URL of your domain instead of sendgrid.net. +**This endpoint allows you to retrieve a specific inbound parse setting.** -For more information, please see our [User Guide](https://sendgrid.com/docs/API_Reference/Web_API_v3/Whitelabel/links.html). +The inbound parse webhook allows you to have incoming emails parsed, extracting some or all of the content, and then have that content POSTed by SendGrid to a URL of your choosing. For more information, please see our [User Guide](https://sendgrid.com/docs/API_Reference/Webhooks/parse.html). -### DELETE /whitelabel/links/{id} +### GET /user/webhooks/parse/settings/{hostname} ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.DELETE); - request.setEndpoint("whitelabel/links/{id}"); + request.setMethod(Method.GET); + request.setEndpoint("user/webhooks/parse/settings/{hostname}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -6288,23 +6290,21 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ throw ex; } ``` -## Validate a Link Whitelabel - -**This endpoint allows you to validate a link whitelabel.** +## Delete a parse setting -Email link whitelabels allow all of the click-tracked links you send in your emails to include the URL of your domain instead of sendgrid.net. +**This endpoint allows you to delete a specific inbound parse setting.** -For more information, please see our [User Guide](https://sendgrid.com/docs/API_Reference/Web_API_v3/Whitelabel/links.html). +The inbound parse webhook allows you to have incoming emails parsed, extracting some or all of the content, and then have that content POSTed by SendGrid to a URL of your choosing. For more information, please see our [User Guide](https://sendgrid.com/docs/API_Reference/Webhooks/parse.html). -### POST /whitelabel/links/{id}/validate +### DELETE /user/webhooks/parse/settings/{hostname} ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.POST); - request.setEndpoint("whitelabel/links/{id}/validate"); + request.setMethod(Method.DELETE); + request.setEndpoint("user/webhooks/parse/settings/{hostname}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -6313,28 +6313,28 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ throw ex; } ``` -## Associate a Link Whitelabel - -**This endpoint allows you to associate a link whitelabel with a subuser account.** +## Retrieves Inbound Parse Webhook statistics. -Link whitelables can be associated with subusers from the parent account. This functionality allows -subusers to send mail using their parent's link whitelabels. To associate a link whitelabel, the parent account -must first create a whitelabel and validate it. The parent may then associate that whitelabel with a subuser via the API or the Subuser Management page in the user interface. +**This endpoint allows you to retrieve the statistics for your Parse Webhook usage.** -Email link whitelabels allow all of the click-tracked links you send in your emails to include the URL of your domain instead of sendgrid.net. +SendGrid's Inbound Parse Webhook allows you to parse the contents and attachments of incoming emails. The Parse API can then POST the parsed emails to a URL that you specify. The Inbound Parse Webhook cannot parse messages greater than 20MB in size, including all attachments. -For more information, please see our [User Guide](https://sendgrid.com/docs/API_Reference/Web_API_v3/Whitelabel/links.html). +There are a number of pre-made integrations for the SendGrid Parse Webhook which make processing events easy. You can find these integrations in the [Library Index](https://sendgrid.com/docs/Integrate/libraries.html#-Webhook-Libraries). -### POST /whitelabel/links/{link_id}/subuser +### GET /user/webhooks/parse/stats ```java try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); Request request = new Request(); - request.setMethod(Method.POST); - request.setEndpoint("whitelabel/links/{link_id}/subuser"); - request.setBody("{\"username\":\"jane@example.com\"}"); + request.setMethod(Method.GET); + request.setEndpoint("user/webhooks/parse/stats"); + request.addQueryParam("aggregated_by", "day"); + request.addQueryParam("limit", "test_string"); + request.addQueryParam("start_date", "2016-01-01"); + request.addQueryParam("end_date", "2016-04-01"); + request.addQueryParam("offset", "test_string"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -6343,4 +6343,3 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/API_ throw ex; } ``` - diff --git a/USE_CASES.md b/USE_CASES.md index 0ba2aeb1..ea846b58 100644 --- a/USE_CASES.md +++ b/USE_CASES.md @@ -4,7 +4,7 @@ This documentation provides examples for specific use cases. Please [open an iss * [Transactional Templates](#transactional-templates) * [Legacy Templates](#legacy-templates) -* [How to Setup a Domain Whitelabel](#domain-whitelabel) +* [How to Setup a Domain Authentication](#domain-authentication) * [How to View Email Statistics](#email-stats) @@ -217,12 +217,12 @@ public class Example { } ``` - -# How to Setup a Domain Whitelabel + +# How to Setup a Domain Authentication -You can find documentation for how to setup a domain whitelabel via the UI [here](https://sendgrid.com/docs/Classroom/Basics/Whitelabel/setup_domain_whitelabel.html) and via API [here](https://github.com/sendgrid/sendgrid-java/blob/master/USAGE.md#whitelabel). +You can find documentation for how to setup a domain authentication via the UI [here](https://sendgrid.com/docs/ui/account-and-settings/how-to-set-up-domain-authentication/) and via API [here](https://github.com/sendgrid/sendgrid-nodejs/blob/master/packages/client/USAGE.md#sender-authentication). -Find more information about all of SendGrid's whitelabeling related documentation [here](https://sendgrid.com/docs/Classroom/Basics/Whitelabel/index.html). +Find more information about all of SendGrid's authentication related documentation [here](https://sendgrid.com/docs/ui/account-and-settings/). # How to View Email Statistics diff --git a/examples/whitelabel/domains.java b/examples/senderauthentication/domains.java similarity index 94% rename from examples/whitelabel/domains.java rename to examples/senderauthentication/domains.java index 26a0d0a2..2ffe0a7e 100644 --- a/examples/whitelabel/domains.java +++ b/examples/senderauthentication/domains.java @@ -8,7 +8,7 @@ import java.util.Map; ////////////////////////////////////////////////////////////////// -// Create a domain whitelabel. +// Create a domain authorization. // POST /whitelabel/domains @@ -31,7 +31,7 @@ public static void main(String[] args) throws IOException { } ////////////////////////////////////////////////////////////////// -// List all domain whitelabels. +// List all domain authorization. // GET /whitelabel/domains @@ -58,7 +58,7 @@ public static void main(String[] args) throws IOException { } ////////////////////////////////////////////////////////////////// -// Get the default domain whitelabel. +// Get the default domain authorization. // GET /whitelabel/domains/default @@ -80,7 +80,7 @@ public static void main(String[] args) throws IOException { } ////////////////////////////////////////////////////////////////// -// List the domain whitelabel associated with the given user. +// List the domain authorization associated with the given user. // GET /whitelabel/domains/subuser @@ -102,7 +102,7 @@ public static void main(String[] args) throws IOException { } ////////////////////////////////////////////////////////////////// -// Disassociate a domain whitelabel from a given user. +// Disassociate a domain authorization from a given user. // DELETE /whitelabel/domains/subuser @@ -124,7 +124,7 @@ public static void main(String[] args) throws IOException { } ////////////////////////////////////////////////////////////////// -// Update a domain whitelabel. +// Update a domain authorization. // PATCH /whitelabel/domains/{domain_id} @@ -147,7 +147,7 @@ public static void main(String[] args) throws IOException { } ////////////////////////////////////////////////////////////////// -// Retrieve a domain whitelabel. +// Retrieve a domain authorization. // GET /whitelabel/domains/{domain_id} @@ -169,7 +169,7 @@ public static void main(String[] args) throws IOException { } ////////////////////////////////////////////////////////////////// -// Delete a domain whitelabel. +// Delete a domain authorization. // DELETE /whitelabel/domains/{domain_id} @@ -191,7 +191,7 @@ public static void main(String[] args) throws IOException { } ////////////////////////////////////////////////////////////////// -// Associate a domain whitelabel with a given user. +// Associate a domain authorization with a given user. // POST /whitelabel/domains/{domain_id}/subuser @@ -214,7 +214,7 @@ public static void main(String[] args) throws IOException { } ////////////////////////////////////////////////////////////////// -// Add an IP to a domain whitelabel. +// Add an IP to a domain authorization. // POST /whitelabel/domains/{id}/ips @@ -237,7 +237,7 @@ public static void main(String[] args) throws IOException { } ////////////////////////////////////////////////////////////////// -// Remove an IP from a domain whitelabel. +// Remove an IP from a domain authorization. // DELETE /whitelabel/domains/{id}/ips/{ip} @@ -259,7 +259,7 @@ public static void main(String[] args) throws IOException { } ////////////////////////////////////////////////////////////////// -// Validate a domain whitelabel. +// Validate a domain authorization. // POST /whitelabel/domains/{id}/validate diff --git a/examples/whitelabel/ips.java b/examples/senderauthentication/ips.java similarity index 95% rename from examples/whitelabel/ips.java rename to examples/senderauthentication/ips.java index 22836d99..c1983608 100644 --- a/examples/whitelabel/ips.java +++ b/examples/senderauthentication/ips.java @@ -18,7 +18,7 @@ protected static void init() { } ////////////////////////////////////////////////////////////////// -// Create an IP whitelabel +// Create a reverse DNS record // POST /whitelabel/ips @@ -40,7 +40,7 @@ public static void main(String[] args) throws IOException { } ////////////////////////////////////////////////////////////////// -// Retrieve all IP whitelabels +// Retrieve all reverse DNS records // GET /whitelabel/ips @@ -64,7 +64,7 @@ public static void main(String[] args) throws IOException { } ////////////////////////////////////////////////////////////////// -// Retrieve an IP whitelabel +// Retrieve a reverse DNS record // GET /whitelabel/ips/{id} @@ -85,7 +85,7 @@ public static void main(String[] args) throws IOException { } ////////////////////////////////////////////////////////////////// -// Delete an IP whitelabel +// Delete a reverse DNS record // DELETE /whitelabel/ips/{id} @@ -106,7 +106,7 @@ public static void main(String[] args) throws IOException { } ////////////////////////////////////////////////////////////////// -// Validate an IP whitelabel +// Validate a reverse DNS record // POST /whitelabel/ips/{id}/validate diff --git a/examples/whitelabel/links.java b/examples/senderauthentication/links.java similarity index 95% rename from examples/whitelabel/links.java rename to examples/senderauthentication/links.java index ca7218ff..bf661339 100644 --- a/examples/whitelabel/links.java +++ b/examples/senderauthentication/links.java @@ -8,7 +8,7 @@ import java.util.Map; ////////////////////////////////////////////////////////////////// -// Create a Link Whitelabel +// Create a Branded Link // POST /whitelabel/links @@ -33,7 +33,7 @@ public static void main(String[] args) throws IOException { } ////////////////////////////////////////////////////////////////// -// Retrieve all link whitelabels +// Retrieve all link Branding // GET /whitelabel/links @@ -56,7 +56,7 @@ public static void main(String[] args) throws IOException { } ////////////////////////////////////////////////////////////////// -// Retrieve a Default Link Whitelabel +// Retrieve a Default Link Branding // GET /whitelabel/links/default @@ -79,7 +79,7 @@ public static void main(String[] args) throws IOException { } ////////////////////////////////////////////////////////////////// -// Retrieve Associated Link Whitelabel +// Retrieve Associated Link Branding // GET /whitelabel/links/subuser @@ -102,7 +102,7 @@ public static void main(String[] args) throws IOException { } ////////////////////////////////////////////////////////////////// -// Disassociate a Link Whitelabel +// Disassociate a Link Branding // DELETE /whitelabel/links/subuser @@ -125,7 +125,7 @@ public static void main(String[] args) throws IOException { } ////////////////////////////////////////////////////////////////// -// Update a Link Whitelabel +// Update a Link Branding // PATCH /whitelabel/links/{id} @@ -148,7 +148,7 @@ public static void main(String[] args) throws IOException { } ////////////////////////////////////////////////////////////////// -// Retrieve a Link Whitelabel +// Retrieve a Link Branding // GET /whitelabel/links/{id} @@ -170,7 +170,7 @@ public static void main(String[] args) throws IOException { } ////////////////////////////////////////////////////////////////// -// Delete a Link Whitelabel +// Delete a Link Branding // DELETE /whitelabel/links/{id} @@ -192,7 +192,7 @@ public static void main(String[] args) throws IOException { } ////////////////////////////////////////////////////////////////// -// Validate a Link Whitelabel +// Validate a Link Branding // POST /whitelabel/links/{id}/validate @@ -214,7 +214,7 @@ public static void main(String[] args) throws IOException { } ////////////////////////////////////////////////////////////////// -// Associate a Link Whitelabel +// Associate a Link Branding // POST /whitelabel/links/{link_id}/subuser From a1bac90ed40cabbfb67b414ae51123fd962860bd Mon Sep 17 00:00:00 2001 From: chandler Date: Thu, 1 Nov 2018 12:38:01 -0400 Subject: [PATCH 129/345] Fix typos Signed-off-by: chandler --- USAGE.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/USAGE.md b/USAGE.md index f31ea17d..1eb8d117 100644 --- a/USAGE.md +++ b/USAGE.md @@ -3588,7 +3588,7 @@ A domain authentication allows you to remove the via or sent on behalf of messag Domain authentications can be associated with (i.e. assigned to) subusers from a parent account. This functionality allows subusers to send mail using their parent's authenticated domains. To associate a domain authentication with a subuser, the parent account must first create the domain authentication and validate it. The parent may then associate the domain authentication via the subuser management tools. -For more information on domain authentication, please see our [User Guide]((https://sendgrid.com/docs/ui/account-and-settings/how-to-set-up-domain-authentication/) +For more information on domain authentication, please see our [User Guide](https://sendgrid.com/docs/ui/account-and-settings/how-to-set-up-domain-authentication/) ## URI Parameters | URI Parameter | Type | Description | @@ -3620,7 +3620,7 @@ A domain authentication allows you to remove the via or sent on behalf of messag Domain authentications can be associated with (i.e. assigned to) subusers from a parent account. This functionality allows subusers to send mail using their parent's authenticated domains. To associate a domain authentication with a subuser, the parent account must first create the domain authentication and validate it. The parent may then associate the domain authentication via the subuser management tools. -For more information on domain authentication, please see our [User Guide]((https://sendgrid.com/docs/ui/account-and-settings/how-to-set-up-domain-authentication/) +For more information on domain authentication, please see our [User Guide](https://sendgrid.com/docs/ui/account-and-settings/how-to-set-up-domain-authentication/) ## URI Parameters | URI Parameter | Type | Required? | Description | @@ -3650,7 +3650,7 @@ For more information on domain authentication, please see our [User Guide]((http A domain authentication allows you to remove the via or sent on behalf of message that your recipients see when they read your emails. Authenticating a domain allows you to replace sendgrid.net with your personal sending domain. You will be required to create a subdomain so that SendGrid can generate the DNS records which you must give to your host provider. If you choose to use Automated Security, SendGrid will provide you with 3 CNAME records. If you turn Automated Security off, you will be given 2 TXT records and 1 MX record. -For more information on domain authentication, please see our [User Guide]((https://sendgrid.com/docs/ui/account-and-settings/how-to-set-up-domain-authentication/) +For more information on domain authentication, please see our [User Guide](https://sendgrid.com/docs/ui/account-and-settings/how-to-set-up-domain-authentication/) ### PATCH /whitelabel/domains/{domain_id} @@ -3676,7 +3676,7 @@ For more information on domain authentication, please see our [User Guide]((http A domain authentication allows you to remove the via or sent on behalf of message that your recipients see when they read your emails. Authenticating a domain allows you to replace sendgrid.net with your personal sending domain. You will be required to create a subdomain so that SendGrid can generate the DNS records which you must give to your host provider. If you choose to use Automated Security, SendGrid will provide you with 3 CNAME records. If you turn Automated Security off, you will be given 2 TXT records and 1 MX record. -For more information on domain authentication, please see our [User Guide]((https://sendgrid.com/docs/ui/account-and-settings/how-to-set-up-domain-authentication/) +For more information on domain authentication, please see our [User Guide](https://sendgrid.com/docs/ui/account-and-settings/how-to-set-up-domain-authentication/) ### GET /whitelabel/domains/{domain_id} @@ -3702,7 +3702,7 @@ For more information on domain authentication, please see our [User Guide]((http A domain authentication allows you to remove the via or sent on behalf of message that your recipients see when they read your emails. Authenticating a domain allows you to replace sendgrid.net with your personal sending domain. You will be required to create a subdomain so that SendGrid can generate the DNS records which you must give to your host provider. If you choose to use Automated Security, SendGrid will provide you with 3 CNAME records. If you turn Automated Security off, you will be given 2 TXT records and 1 MX record. -For more information on domain authentication, please see our [User Guide]((https://sendgrid.com/docs/ui/account-and-settings/how-to-set-up-domain-authentication/) +For more information on domain authentication, please see our [User Guide](https://sendgrid.com/docs/ui/account-and-settings/how-to-set-up-domain-authentication/) ### DELETE /whitelabel/domains/{domain_id} @@ -3729,7 +3729,7 @@ A domain authentication allows you to remove the via or sent on behalf of messag Domain authentications can be associated with (i.e. assigned to) subusers from a parent account. This functionality allows subusers to send mail using their parent's authenticated domains. To associate a domain authentication with a subuser, the parent account must first create the domain authentication and validate it. The parent may then associate the domain authentication via the subuser management tools. -For more information on domain authentication, please see our [User Guide]((https://sendgrid.com/docs/ui/account-and-settings/how-to-set-up-domain-authentication/) +For more information on domain authentication, please see our [User Guide](https://sendgrid.com/docs/ui/account-and-settings/how-to-set-up-domain-authentication/) ## URI Parameters | URI Parameter | Type | Description | @@ -3760,7 +3760,7 @@ For more information on domain authentication, please see our [User Guide]((http A domain authentication allows you to remove the via or sent on behalf of message that your recipients see when they read your emails. Authenticating a domain allows you to replace sendgrid.net with your personal sending domain. You will be required to create a subdomain so that SendGrid can generate the DNS records which you must give to your host provider. If you choose to use Automated Security, SendGrid will provide you with 3 CNAME records. If you turn Automated Security off, you will be given 2 TXT records and 1 MX record. -For more information on domain authentication, please see our [User Guide]((https://sendgrid.com/docs/ui/account-and-settings/how-to-set-up-domain-authentication/) +For more information on domain authentication, please see our [User Guide](https://sendgrid.com/docs/ui/account-and-settings/how-to-set-up-domain-authentication/) ## URI Parameters | URI Parameter | Type | Description | @@ -3791,7 +3791,7 @@ For more information on domain authentication, please see our [User Guide]((http A domain authentication allows you to remove the via or sent on behalf of message that your recipients see when they read your emails. Authenticating a domain allows you to replace sendgrid.net with your personal sending domain. You will be required to create a subdomain so that SendGrid can generate the DNS records which you must give to your host provider. If you choose to use Automated Security, SendGrid will provide you with 3 CNAME records. If you turn Automated Security off, you will be given 2 TXT records and 1 MX record. -For more information on domain authentication, please see our [User Guide]((https://sendgrid.com/docs/ui/account-and-settings/how-to-set-up-domain-authentication/) +For more information on domain authentication, please see our [User Guide](https://sendgrid.com/docs/ui/account-and-settings/how-to-set-up-domain-authentication/) ## URI Parameters | URI Parameter | Type | Description | @@ -3822,7 +3822,7 @@ For more information on domain authentication, please see our [User Guide]((http A domain authentication allows you to remove the via or sent on behalf of message that your recipients see when they read your emails. Authenticating a domain allows you to replace sendgrid.net with your personal sending domain. You will be required to create a subdomain so that SendGrid can generate the DNS records which you must give to your host provider. If you choose to use Automated Security, SendGrid will provide you with 3 CNAME records. If you turn Automated Security off, you will be given 2 TXT records and 1 MX record. -For more information on domain authentication, please see our [User Guide]((https://sendgrid.com/docs/ui/account-and-settings/how-to-set-up-domain-authentication/) +For more information on domain authentication, please see our [User Guide](https://sendgrid.com/docs/ui/account-and-settings/how-to-set-up-domain-authentication/) ## URI Parameters | URI Parameter | Type | Description | From 29b78495c12853061edb25d29af0ac6e0eab0623 Mon Sep 17 00:00:00 2001 From: chandler Date: Sat, 3 Nov 2018 20:19:15 -0400 Subject: [PATCH 130/345] Remove more references to 'whitelabel' Signed-off-by: chandler --- USAGE.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/USAGE.md b/USAGE.md index 1eb8d117..df7dc6dc 100644 --- a/USAGE.md +++ b/USAGE.md @@ -2315,7 +2315,7 @@ A single IP address or a range of IP addresses may be dedicated to an account in IP Pools allow you to group your dedicated SendGrid IP addresses together. For example, you could create separate pools for your transactional and marketing email. When sending marketing emails, specify that you want to use the marketing IP pool. This allows you to maintain separate reputations for your different email traffic. -IP pools can only be used with whitelabeled IP addresses. +IP pools can only be used with authenticated IP addresses. If an IP pool is NOT specified for an email, it will use any IP available, including ones in pools. @@ -2343,7 +2343,7 @@ If an IP pool is NOT specified for an email, it will use any IP available, inclu IP Pools allow you to group your dedicated SendGrid IP addresses together. For example, you could create separate pools for your transactional and marketing email. When sending marketing emails, specify that you want to use the marketing IP pool. This allows you to maintain separate reputations for your different email traffic. -IP pools can only be used with whitelabeled IP addresses. +IP pools can only be used with authenticated IP addresses. If an IP pool is NOT specified for an email, it will use any IP available, including ones in pools. @@ -2370,7 +2370,7 @@ If an IP pool is NOT specified for an email, it will use any IP available, inclu IP Pools allow you to group your dedicated SendGrid IP addresses together. For example, you could create separate pools for your transactional and marketing email. When sending marketing emails, specify that you want to use the marketing IP pool. This allows you to maintain separate reputations for your different email traffic. -IP pools can only be used with whitelabeled IP addresses. +IP pools can only be used with authenticated IP addresses. If an IP pool is NOT specified for an email, it will use any IP available, including ones in pools. @@ -2398,7 +2398,7 @@ If an IP pool is NOT specified for an email, it will use any IP available, inclu IP Pools allow you to group your dedicated SendGrid IP addresses together. For example, you could create separate pools for your transactional and marketing email. When sending marketing emails, specify that you want to use the marketing IP pool. This allows you to maintain separate reputations for your different email traffic. -IP pools can only be used with whitelabeled IP addresses. +IP pools can only be used with authenticated IP addresses. If an IP pool is NOT specified for an email, it will use any IP available, including ones in pools. @@ -2425,7 +2425,7 @@ If an IP pool is NOT specified for an email, it will use any IP available, inclu IP Pools allow you to group your dedicated SendGrid IP addresses together. For example, you could create separate pools for your transactional and marketing email. When sending marketing emails, specify that you want to use the marketing IP pool. This allows you to maintain separate reputations for your different email traffic. -IP pools can only be used with whitelabeled IP addresses. +IP pools can only be used with authenticated IP addresses. If an IP pool is NOT specified for an email, it will use any IP available, including ones in pools. @@ -4229,7 +4229,7 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/ui/a ``` ## Associate a Link Branding -**This endpoint allows you to associate a link whitelabel with a subuser account.** +**This endpoint allows you to associate a link branding with a subuser account.** Link branding can be associated with subusers from the parent account. This functionality allows subusers to send mail using their parent's link brands. To associate a link branding, the parent account @@ -4532,7 +4532,7 @@ Each subuser should be assigned to an IP address, from which all of this subuser More information: * [How to request more IPs](https://sendgrid.com/docs/Classroom/Basics/Account/adding_an_additional_dedicated_ip_to_your_account.html) -* [IPs can be whitelabeled](https://sendgrid.com/docs/User_Guide/Settings/Whitelabel/ips.html) +* [How to set up reverse DNS](https://sendgrid.com/docs/ui/account-and-settings/how-to-set-up-reverse-dns/) ### PUT /subusers/{subuser_name}/ips From 22292142bf243d1a838744ee43902b5050bb6e5b Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Thu, 4 Apr 2019 16:25:54 -0700 Subject: [PATCH 131/345] Useability update. --- USE_CASES.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/USE_CASES.md b/USE_CASES.md index ea846b58..11e3f9fa 100644 --- a/USE_CASES.md +++ b/USE_CASES.md @@ -10,7 +10,7 @@ This documentation provides examples for specific use cases. Please [open an iss # Transactional Templates -For this example, we assume you have created a [transactional template](https://sendgrid.com/docs/User_Guide/Transactional_Templates/index.html). Following is the template content we used for testing. +For this example, we assume you have created a [transactional template](https://sendgrid.com/docs/User_Guide/Transactional_Templates/index.html) in the UI or via the API. Following is the template content we used for testing. Template ID (replace with your own): From 055ac4f8cc14b5826795c68b1681f7823e655324 Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Fri, 17 May 2019 09:17:56 -0700 Subject: [PATCH 132/345] SMS example --- USE_CASES.md | 85 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) diff --git a/USE_CASES.md b/USE_CASES.md index 11e3f9fa..522a76f4 100644 --- a/USE_CASES.md +++ b/USE_CASES.md @@ -6,6 +6,7 @@ This documentation provides examples for specific use cases. Please [open an iss * [Legacy Templates](#legacy-templates) * [How to Setup a Domain Authentication](#domain-authentication) * [How to View Email Statistics](#email-stats) +* [Send a SMS Message](#sms) # Transactional Templates @@ -231,3 +232,87 @@ You can find documentation for how to view your email statistics via the UI [her Alternatively, we can post events to a URL of your choice via our [Event Webhook](https://sendgrid.com/docs/API_Reference/Webhooks/event.html) about events that occur as SendGrid processes your email. + +# Send a SMS Message + +Following are the steps to add Twilio SMS to your app: + +## 1. Obtain a Free Twilio Account + +Sign up for a free Twilio account [here](https://www.twilio.com/try-twilio?source=sendgrid-java). + +## 2. Update Your Environment Variables + +You can obtain your Account Sid and Auth Token from [twilio.com/console](https://twilio.com/console). + +### Mac + +```bash +echo "export TWILIO_ACCOUNT_SID='YOUR_TWILIO_ACCOUNT_SID'" > twilio.env +echo "export TWILIO_AUTH_TOKEN='YOUR_TWILIO_AUTH_TOKEN'" >> twilio.env +echo "twilio.env" >> .gitignore +source ./twilio.env +``` + +### Windows + +Temporarily set the environment variable (accessible only during the current CLI session): + +```bash +set TWILIO_ACCOUNT_SID=YOUR_TWILIO_ACCOUNT_SID +set TWILIO_AUTH_TOKEN=YOUR_TWILIO_AUTH_TOKEN +``` + +Permanently set the environment variable (accessible in all subsequent CLI sessions): + +```bash +setx TWILIO_ACCOUNT_SID "YOUR_TWILIO_ACCOUNT_SID" +setx TWILIO_AUTH_TOKEN "YOUR_TWILIO_AUTH_TOKEN" +``` + +## 3. Install the Twilio Helper Library + +`twilio-java` uses Maven. At present the jars *are* available from a public [maven](http://mvnrepository.com/artifact/com.twilio.sdk/twilio) repository. + +Use the following dependency in your project to grab via Maven: + +```xml + + com.twilio.sdk + twilio + 7.X.X + compile + +``` + +or Gradle: +```groovy +compile "com.twilio.sdk:twilio:7.X.X" +```` + +If you want to compile it yourself, here is how: + +```bash +$ git clone git@github.com:twilio/twilio-java +$ cd twilio-java +$ mvn install # Requires maven, download from http://maven.apache.org/download.html +``` + +Then, you can execute the following code. + +```java +String accountSid = Environment.GetEnvironmentVariable("TWILIO_ACCOUNT_SID"); +String authToken = Environment.GetEnvironmentVariable("TWILIO_AUTH_TOKEN"); + +Twilio.init(accountSid, authToken); + +Message message = Message.creator( + new PhoneNumber("+15558881234"), // To number + new PhoneNumber("+15559994321"), // From number + "Hello world!" // SMS body +).create(); + +System.out.println(message.getSid()); +``` + +For more information, please visit the [Twilio SMS Java documentation](https://www.twilio.com/docs/sms/quickstart/java). \ No newline at end of file From c1038b2faf5f62311bdac290a4b8f4866b384159 Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Fri, 17 May 2019 11:03:10 -0700 Subject: [PATCH 133/345] Twilio branding updates & CLA update --- .github/PULL_REQUEST_TEMPLATE | 2 + CODE_OF_CONDUCT.md | 20 +- CONTRIBUTING.md | 32 +-- LICENSE.md | 2 +- README.md | 20 +- TROUBLESHOOTING.md | 27 ++- USAGE.md | 206 +++++++++--------- USE_CASES.md | 6 +- bin/com/sendgrid/helpers/README.md | 2 +- build.gradle | 4 +- docker/Dockerfile | 4 +- docker/README.md | 10 +- docker/USAGE.md | 9 +- examples/helpers/mail/Example.java | 8 +- examples/mail/mail.java | 2 +- proposals/mail-helper-refactor.md | 12 +- src/main/java/com/sendgrid/SendGrid.java | 32 +-- src/main/java/com/sendgrid/SendGridAPI.java | 10 +- src/main/java/com/sendgrid/helpers/README.md | 2 +- .../java/com/sendgrid/helpers/mail/Mail.java | 2 +- 20 files changed, 204 insertions(+), 208 deletions(-) diff --git a/.github/PULL_REQUEST_TEMPLATE b/.github/PULL_REQUEST_TEMPLATE index bd65d2ff..4aa9c567 100644 --- a/.github/PULL_REQUEST_TEMPLATE +++ b/.github/PULL_REQUEST_TEMPLATE @@ -1,6 +1,7 @@ -# Fixes # +# Fixes ### Checklist - [ ] I acknowledge that all my contributions will be made under the project's license @@ -20,7 +20,7 @@ Closes #2 - [ ] I have added in line documentation to the code I modified ### Short description of what this PR does: -- -- +- +- -If you have questions, please send an email to [Sendgrid](mailto:dx@sendgrid.com), or file a Github Issue in this repository. \ No newline at end of file +If you have questions, please send an email to [SendGrid](mailto:dx@sendgrid.com), or file a GitHub Issue in this repository. diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index d2ca9db9..f0883c7d 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -1,42 +1,42 @@ - + # Twilio SendGrid Community Code of Conduct - - The Twilio SendGrid open source community is made up of members from around the globe with a diverse set of skills, personalities, and experiences. It is through these differences that our community experiences successes and continued growth. When you're working with members of the community, we encourage you to follow these guidelines, which help steer our interactions and strive to maintain a positive, successful and growing community. - + + The Twilio SendGrid open source community is made up of members from around the globe with a diverse set of skills, personalities, and experiences. It is through these differences that our community experiences successes and continued growth. When you're working with members of the community, we encourage you to follow these guidelines, which help steer our interactions and strive to maintain a positive, successful and growing community. + ### Be Open Members of the community are open to collaboration, whether it's on pull requests, code reviews, approvals, issues or otherwise. We're receptive to constructive comments and criticism, as the experiences and skill sets of all members contribute to the whole of our efforts. We're accepting of all who wish to take part in our activities, fostering an environment where anyone can participate, and everyone can make a difference. - + ### Be Considerate Members of the community are considerate of their peers, which include other contributors and users of Twilio SendGrid. We're thoughtful when addressing the efforts of others, keeping in mind that often the labor was completed with the intent of the good of the community. We're attentive in our communications, whether in person or online, and we're tactful when approaching differing views. - + ### Be Respectful Members of the community are respectful. We're respectful of others, their positions, their skills, their commitments and their efforts. We're respectful of the volunteer efforts that permeate the Twilio SendGrid community. We're respectful of the processes outlined in the community, and we work within them. When we disagree, we are courteous in raising our issues. Overall, we're good to each other. We contribute to this community not because we have to, but because we want to. If we remember that, these guidelines will come naturally. - - ## Additional Guidance - + + ## Additional Guidance + ### Disclose Potential Conflicts of Interest Community discussions often involve interested parties. We expect participants to be aware when they are conflicted due to employment or other projects they are involved in and disclose those interests to other project members. When in doubt, over-disclose. Perceived conflicts of interest are important to address so that the community’s decisions are credible even when unpopular, difficult or favorable to the interests of one group over another. - + ### Interpretation - This Code is not exhaustive or complete. It is not a rulebook; it serves to distill our common understanding of a collaborative, shared environment and goals. We expect it to be followed in spirit as much as in the letter. When in doubt, try to abide by [Twilio SendGrid’s cultural values](https://sendgrid.com/blog/employee-engagement-the-4h-way) defined by our “4H’s”: Happy, Hungry, Humble and Honest. - + This Code is not exhaustive or complete. It is not a rulebook; it serves to distill our common understanding of a collaborative, shared environment and goals. We expect it to be followed in spirit as much as in the letter. When in doubt, try to abide by [Twilio SendGrid’s cultural values](https://sendgrid.com/blog/employee-engagement-the-4h-way) defined by our “4H’s”: Happy, Hungry, Humble and Honest. + ### Enforcement Most members of the Twilio SendGrid community always comply with this Code, not because of the existence of this Code, but because they have long experience participating in open source communities where the conduct described above is normal and expected. However, failure to observe this Code may be grounds for suspension, reporting the user for abuse or changing permissions for outside contributors. - + ## If you have concerns about someone’s conduct **Initiate Direct Contact** - It is always appropriate to email a community member (if contact information is available), mention that you think their behavior was out of line, and (if necessary) point them to this Code. - + **Discuss Publicly** - Discussing publicly is always acceptable. Note, though, that approaching the person directly may be better, as it tends to make them less defensive, and it respects the time of other community members, so you probably want to try direct contact first. - + **Contact the Moderators** - You can reach the Twilio SendGrid moderators by emailing dx@sendgrid.com. - + ## Submission to Twilio SendGrid Repositories - Finally, just a reminder, changes to the Twilio SendGrid repositories will only be accepted upon completion of the [Twilio SendGrid Contributor Agreement](https://cla.sendgrid.com). - + Finally, just a reminder, changes to the Twilio SendGrid repositories will only be accepted upon completion of the [Twilio SendGrid Contributor Agreement](https://cla.sendgrid.com). + ## Attribution - + Twilio SendGrid thanks the following, on which it draws for content and inspiration: - - * [Python Community Code of Conduct](https://www.python.org/psf/codeofconduct/) - * [Open Source Initiative General Code of Conduct](https://opensource.org/codeofconduct) - * [Apache Code of Conduct](https://www.apache.org/foundation/policies/conduct.html) + + * [Python Community Code of Conduct](https://www.python.org/psf/codeofconduct/) + * [Open Source Initiative General Code of Conduct](https://opensource.org/codeofconduct) + * [Apache Code of Conduct](https://www.apache.org/foundation/policies/conduct.html) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 531dcb88..998199f2 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -41,7 +41,7 @@ A software bug is a demonstrable issue in the code base. In order for us to diag Before you decide to create a new issue, please try the following: -1. Check the Github issues tab if the identified issue has already been reported, if so, please add a +1 to the existing post. +1. Check the GitHub issues tab if the identified issue has already been reported, if so, please add a +1 to the existing post. 2. Update to the latest version of this code and check if issue has already been fixed 3. Copy and fill in the Bug Report Template we have provided below @@ -166,10 +166,10 @@ Please run your code through: ```bash # Clone your fork of the repo into the current directory git clone https://github.com/sendgrid/sendgrid-java - + # Navigate to the newly cloned directory cd sendgrid-java - + # Assign the original repo to a remote called "upstream" git remote add upstream https://github.com/sendgrid/sendgrid-java ``` diff --git a/README.md b/README.md index 3b941063..806ec008 100644 --- a/README.md +++ b/README.md @@ -232,9 +232,10 @@ Please see our [troubleshooting guide](https://github.com/sendgrid/sendgrid-java sendgrid-java is guided and supported by the Twilio Developer Experience Team. -Please email the Developer Experience Team [here](mailto:dx@sendgrid.com) in case of any queries. +Please email the Developer Experience Team [here](mailto:dx@sendgrid.com) in case of any queries. sendgrid-java is maintained and funded by Twilio SendGrid, Inc. The names and logos for sendgrid-java are trademarks of Twilio SendGrid, Inc. # License + [The MIT License (MIT)](LICENSE.md) From 6a5d0496ff30b313450d97ac5888d74530d35384 Mon Sep 17 00:00:00 2001 From: Elise Shanholtz Date: Fri, 31 Jan 2020 11:13:28 -0800 Subject: [PATCH 143/345] chore: prep the repo for automated release (#599) * chore: prep repo for automated releasing Co-authored-by: Elmer Thomas --- .gitignore | 4 +- .maven.xml | 24 + .travis.yml | 57 +- CHANGELOG.md | 3 +- LICENSE.md | 2 +- Makefile | 17 + build.gradle | 173 -- examples/temp.txt | 1917 ++++++++++++++++++++++ examples/temp2.txt | 1917 ++++++++++++++++++++++ gradle.properties.example | 6 - gradle/wrapper/gradle-wrapper.jar | Bin 51348 -> 0 bytes gradle/wrapper/gradle-wrapper.properties | 6 - gradlew | 164 -- gradlew.bat | 90 - pom.xml | 53 +- scripts/upload.sh | 8 - 16 files changed, 3957 insertions(+), 484 deletions(-) create mode 100644 .maven.xml create mode 100644 Makefile delete mode 100644 build.gradle create mode 100644 examples/temp.txt create mode 100644 examples/temp2.txt delete mode 100644 gradle.properties.example delete mode 100644 gradle/wrapper/gradle-wrapper.jar delete mode 100644 gradle/wrapper/gradle-wrapper.properties delete mode 100755 gradlew delete mode 100644 gradlew.bat delete mode 100755 scripts/upload.sh diff --git a/.gitignore b/.gitignore index 551957d8..fa35c4dd 100644 --- a/.gitignore +++ b/.gitignore @@ -14,4 +14,6 @@ examples/Example.java .classpath .project .env -.vscode \ No newline at end of file +.vscode +sendgrid-java.jar +dependency-reduced-pom.xml diff --git a/.maven.xml b/.maven.xml new file mode 100644 index 00000000..bef1ab68 --- /dev/null +++ b/.maven.xml @@ -0,0 +1,24 @@ + + + + + ossrh + ${env.SONATYPE_USERNAME} + ${env.SONATYPE_PASSWORD} + + + + + + ossrh + + true + + + ${env.GPG_EXECUTABLE} + ${env.GPG_PASSPHRASE} + + + + diff --git a/.travis.yml b/.travis.yml index 944f6df3..167344c7 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,34 +1,31 @@ language: java matrix: include: - - jdk: openjdk8 - - jdk: oraclejdk8 + - name: 'OpenJDK 7' + jdk: openjdk7 + - name: 'OpenJDK 8' + jdk: openjdk8 + - name: 'Oracle JDK 7' + jdk: oraclejdk7 + - name: 'Oracle JDK 8' + jdk: oraclejdk8 + - name: 'OpenJDK 11' + jdk: openjdk11 + allow_failures: + - name: 'Oracle JDK 8' # See https://travis-ci.community/t/expected-feature-release-number-in-range-of-9-to-12-but-got-8-installing-oraclejdk8/1345/14 + - name: 'OpenJDK 7' + - name: 'Oracle JDK 7' + - name: 'OpenJDK 11' before_script: -- "./scripts/startPrism.sh &" -- sleep 20 -before_install: - - cat /etc/hosts # optionally check the content *before* - - sudo hostname "$(hostname | cut -c1-63)" - - sed -e "s/^\\(127\\.0\\.0\\.1.*\\)/\\1 $(hostname | cut -c1-63)/" /etc/hosts > /tmp/hosts - - sudo mv /tmp/hosts /etc/hosts - - cat /etc/hosts # optionally check the content *after* -after_script: - - lsof -i :4010 -S # adds some debugging statements - - "./gradlew build" - - "./scripts/upload.sh" -env: - global: - - S3_POLICY: ewogICJleHBpcmF0aW9uIjogIjIxMDAtMDEtMDFUMTI6MDA6MDAuMDAwWiIsCiAgImNvbmRpdGlvbnMiOiBbCiAgICB7ImFjbCI6ICJwdWJsaWMtcmVhZCIgfSwKICAgIHsiYnVja2V0IjogInNlbmRncmlkLW9wZW4tc291cmNlIiB9LAogICAgWyJzdGFydHMtd2l0aCIsICIka2V5IiwgInNlbmRncmlkLWphdmEvIl0sCiAgICBbImNvbnRlbnQtbGVuZ3RoLXJhbmdlIiwgMjA0OCwgMjY4NDM1NDU2XSwKICAgIFsiZXEiLCAiJENvbnRlbnQtVHlwZSIsICJhcHBsaWNhdGlvbi96aXAiXQogIF0KfQo= - - secure: Iki1btwhG1nlyjnEMu90Oh/hoatFpPiiKkqpj7siLnlLp2xbBQ2003jRsn30I3Vujes2ugvzdlHqBJ9lDwRvfGrKXcLlRvYuDQ24N2YKquEiKHUxs+iMOzTQj6Sf64KL5O0aSZd1l5rjWgsQ0qqjHW9u3l5bUjqxzrhAI2Js37U= - - secure: Khi6a4z1lfZmDEDV738MOiWznRcTv5ILZUM+igEw2txX7PGX+B5909WridpAijTGiurJ6eda7jvsUgci8DTPQCXB18LD6N870hnPcSQkuI6zDAhKTx+w/ZsfPLWh28sP2CVzbqGdxaitZDKxRWaVmKnBZpyi8XI9UKjmyK2sjwE= - - secure: wKXAjjBgCLM4h++nP1xDQQtYU10JbwwynY0XB920SoQjI2Uu82cMPtkEXFWTpzyIS2hE5B3qvu75VHNdLqDUtek3e3lBg5k3SpYgGin20dg3SDEJrvA4vlvcApdQ132pMEWdDOVwzbXhm9+JTjALYbc3fX+VAQX1u5daPyeDGC4= -notifications: - hipchat: - rooms: - secure: kJyc36IRkovqK3JuMXJuBBkDFkDfZ9iAE8ZziszzL9zNsfY2fAQWDk4bMrFO0yYW9OwRXl0gT97HVYWBZFDhjtstUJxit0lpUB+TNIDw2lqCkOIPxGKgcBB9mDS795QyLJzletObP/guPxbzSNOGLa6+k4GbTtTMXRhjzN6lF0o= - template: - - '%{repository} - Build %{build_number} on branch %{branch} by %{author}: %{message} - View on GitHub' - format: html - notify: true + - "./scripts/startPrism.sh &" + - sleep 20 +install: + - mvn --settings .maven.xml install -DskipTests=true -Dgpg.skip -Dmaven.javadoc.skip=true -B -V +deploy: + - provider: script + script: mvn clean deploy --settings .maven.xml -DskipTests=true -B -U -Prelease + edge: true + on: + tags: true + jdk: openjdk8 + branch: master diff --git a/CHANGELOG.md b/CHANGELOG.md index ddf44787..1294aa28 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,7 +1,8 @@ # Change Log All notable changes to this project will be documented in this file. -## [4.4.1] - 2019-05-20 +[2019-05-20] Version 4.4.1 +--------------------------- ### Fix - 4.4.0 release not deployed properly to Maven diff --git a/LICENSE.md b/LICENSE.md index e5441aa6..d55059a3 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -1,6 +1,6 @@ The MIT License (MIT) -Copyright (c) 2013-2019 Twilio SendGrid, Inc. +Copyright (c) 2013-2020 Twilio SendGrid, Inc. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/Makefile b/Makefile new file mode 100644 index 00000000..bc1a62ee --- /dev/null +++ b/Makefile @@ -0,0 +1,17 @@ +.PHONY: install test test-integration clean + +VERSION := $(shell mvn help:evaluate -Dexpression=project.version | grep -e '^[^\[]') +install: + @java -version || (echo "Java is not installed, please install Java >= 7"; exit 1); + mvn clean install -DskipTests=true -Dgpg.skip -B + cp target/sendgrid-java-$(VERSION).jar sendgrid-java.jar + +test: + mvn test + +test-integration: + ./scripts/startPrism.sh & + sleep 5 + +clean: + mvn clean diff --git a/build.gradle b/build.gradle deleted file mode 100644 index b414002c..00000000 --- a/build.gradle +++ /dev/null @@ -1,173 +0,0 @@ -/** - * Commands: - * - gradle build - * - gradle test - * - gradle assemble - * - gradle uploadArchives - * - * To execute the 'uploadArchives' task, the following properties must be specified - * in an external 'gradle.properties' file: - * - sonatypeUsername - * - sonatypePassword - */ - -apply plugin: 'java' -apply plugin: 'fatjar' -apply plugin: 'maven' -apply plugin: 'signing' - -group = 'com.sendgrid' -version = '4.4.1' -ext.packaging = 'jar' - -allprojects { - apply plugin: 'java' - sourceCompatibility = 1.7 - targetCompatibility = 1.7 -} - -if (!hasProperty("sonatypeUsername")) { - ext.sonatypeUsername = null - ext.sonatypePassword = null -} - -task wrapper(type: Wrapper) { - gradleVersion = '1.8' -} - -buildscript { - dependencies { - classpath 'eu.appsatori:gradle-fatjar-plugin:0.1.2' // adds fatJar task - } - repositories { - mavenCentral() - } -} - -dependencies { - implementation 'com.sendgrid:java-http-client:4.1.0' - implementation 'com.fasterxml.jackson.core:jackson-core:2.9.9' - implementation 'com.fasterxml.jackson.core:jackson-annotations:2.9.9' - implementation 'com.fasterxml.jackson.core:jackson-databind:2.9.9' - testImplementation group: 'junit', name: 'junit', version: '4.12' -} - -repositories { - mavenCentral() -} - -allprojects { - gradle.projectsEvaluated { - tasks.withType(JavaCompile) { - options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation" - } - } -} - -// adds 'with-dependencies' to the fatJar name -fatJar { - classifier 'jar' - baseName "sendgrid" - manifest { - attributes("Implementation-Title": "Twilio SendGrid", "Implementation-Version": version) - } -} - -// copy fatJar to base project directory so they will be in git (and on github for download) -build << { - copy { - println "Copying ${fatJar.archiveName} to $projectDir/repo/com/sendgrid" - from("$buildDir/libs/${fatJar.archiveName}") - into("$projectDir/repo/com/sendgrid") - } - tasks.renameSendGridVersionJarToSendGridJar.execute() -} - -task renameSendGridVersionJarToSendGridJar { - doLast { - file("$projectDir/repo/com/sendgrid/${fatJar.archiveName}").renameTo(file("$projectDir/repo/com/sendgrid/sendgrid-java-latest.jar")) - copy { - from("$buildDir/libs/${fatJar.archiveName}") - into("$projectDir/repo/com/sendgrid") - } - file("$projectDir/repo/com/sendgrid/${fatJar.archiveName}").renameTo(file("$projectDir/repo/com/sendgrid/sendgrid-java-${version}.jar")) - } -} - -task startPrism(type: Exec) { - workingDir 'scripts' - commandLine './startPrism.sh' -} - -task javadocJar(type: Jar, dependsOn: javadoc) { - classifier = 'javadoc' - from 'build/docs/javadoc' -} - -task sourcesJar(type: Jar) { - from sourceSets.main.allSource - classifier = 'sources' -} - -signing { - required { gradle.taskGraph.hasTask("uploadArchives") } - sign configurations.archives -} - -uploadArchives { - repositories { - mavenDeployer { - beforeDeployment { MavenDeployment deployment -> signing.signPom(deployment) } - repository(url: "https://oss.sonatype.org/service/local/staging/deploy/maven2/") { - authentication(userName: sonatypeUsername, password: sonatypePassword) - } - - pom.project { - name 'sendgrid-java' - packaging 'jar' - description 'Twilio SendGrid Java helper library' - url 'https://github.com/sendgrid/sendgrid-java' - - scm { - url 'scm:git@github.com:sendgrid/sendgrid-java.git' - connection 'scm:git@github.com:sendgrid/sendgrid-java.git' - developerConnection 'scm:git@github.com:sendgrid/sendgrid-java.git' - } - - licenses { - license { - name 'MIT License' - url 'http://opensource.org/licenses/MIT' - distribution 'repo' - } - } - - developers { - developer { - id 'thinkingserious' - name 'Elmer Thomas' - } - developer { - id 'scottmotte' - name 'Scott Motte' - } - developer { - id 'elbou8' - name 'Yamil Asusta' - } - developer { - id 'eddiezane' - name 'Eddie Zaneski' - } - } - } - } - } -} - -artifacts { - archives fatJar - archives jar - archives javadocJar - archives sourcesJar -} diff --git a/examples/temp.txt b/examples/temp.txt new file mode 100644 index 00000000..83556ad8 --- /dev/null +++ b/examples/temp.txt @@ -0,0 +1,1917 @@ +META-INF/ +META-INF/MANIFEST.MF +LICENSE.md +com/ +com/sendgrid/ +com/sendgrid/SendGridAPI.class +com/sendgrid/SendGrid$1.class +com/sendgrid/APICallback.class +com/sendgrid/SendGrid$2.class +com/sendgrid/SendGrid.class +com/sendgrid/SpamCheckSetting.class +com/sendgrid/Attachments$Builder.class +com/sendgrid/OpenTrackingSetting.class +com/sendgrid/Setting.class +com/sendgrid/GoogleAnalyticsSetting.class +com/sendgrid/ASM.class +com/sendgrid/FooterSetting.class +com/sendgrid/Personalization.class +com/sendgrid/Email.class +com/sendgrid/MailSettings.class +com/sendgrid/BccSettings.class +com/sendgrid/Content.class +com/sendgrid/TrackingSettings.class +com/sendgrid/ClickTrackingSetting.class +com/sendgrid/Attachments.class +com/sendgrid/ContentVerifier.class +com/sendgrid/SubscriptionTrackingSetting.class +com/sendgrid/Mail.class +com/sendgrid/RateLimitException.class +META-INF/maven/ +META-INF/maven/com.sendgrid/ +META-INF/maven/com.sendgrid/sendgrid-java/ +META-INF/maven/com.sendgrid/sendgrid-java/pom.xml +META-INF/maven/com.sendgrid/sendgrid-java/pom.properties +com/sendgrid/Client$1.class +com/sendgrid/Client.class +com/sendgrid/HttpDeleteWithBody.class +com/sendgrid/Method.class +com/sendgrid/Request.class +com/sendgrid/Response.class +com/sendgrid/SendGridResponseHandler.class +org/ +org/apache/ +org/apache/http/ +org/apache/http/message/ +org/apache/http/message/BasicHeaderElementIterator.class +org/apache/http/message/LineParser.class +org/apache/http/message/BasicHttpEntityEnclosingRequest.class +org/apache/http/message/HeaderValueFormatter.class +org/apache/http/message/BasicLineFormatter.class +org/apache/http/message/BasicLineParser.class +org/apache/http/message/HeaderGroup.class +org/apache/http/message/BasicNameValuePair.class +org/apache/http/message/BufferedHeader.class +org/apache/http/message/BasicListHeaderIterator.class +org/apache/http/message/BasicHeader.class +org/apache/http/message/LineFormatter.class +org/apache/http/message/BasicHttpResponse.class +org/apache/http/message/BasicTokenIterator.class +org/apache/http/message/BasicRequestLine.class +org/apache/http/message/ParserCursor.class +org/apache/http/message/BasicHeaderValueParser.class +org/apache/http/message/BasicHeaderValueFormatter.class +org/apache/http/message/BasicHttpRequest.class +org/apache/http/message/HeaderValueParser.class +org/apache/http/message/AbstractHttpMessage.class +org/apache/http/message/TokenParser.class +org/apache/http/message/BasicHeaderIterator.class +org/apache/http/message/BasicHeaderElement.class +org/apache/http/message/BasicStatusLine.class +org/apache/http/concurrent/ +org/apache/http/concurrent/BasicFuture.class +org/apache/http/concurrent/Cancellable.class +org/apache/http/concurrent/FutureCallback.class +org/apache/http/HeaderElement.class +org/apache/http/TruncatedChunkException.class +org/apache/http/ExceptionLogger$1.class +org/apache/http/version.properties +org/apache/http/HeaderElementIterator.class +org/apache/http/ProtocolVersion.class +org/apache/http/ExceptionLogger.class +org/apache/http/HttpRequestFactory.class +org/apache/http/HttpConnection.class +org/apache/http/HttpRequestInterceptor.class +org/apache/http/ContentTooLongException.class +org/apache/http/UnsupportedHttpVersionException.class +org/apache/http/HttpResponseInterceptor.class +org/apache/http/HttpInetConnection.class +org/apache/http/HttpEntity.class +org/apache/http/HttpException.class +org/apache/http/annotation/ +org/apache/http/annotation/Obsolete.class +org/apache/http/annotation/Experimental.class +org/apache/http/annotation/NotThreadSafe.class +org/apache/http/annotation/Immutable.class +org/apache/http/annotation/ThreadSafe.class +org/apache/http/annotation/GuardedBy.class +org/apache/http/Consts.class +org/apache/http/HttpConnectionMetrics.class +org/apache/http/HttpMessage.class +org/apache/http/MethodNotSupportedException.class +org/apache/http/ParseException.class +org/apache/http/params/ +org/apache/http/params/CoreProtocolPNames.class +org/apache/http/params/SyncBasicHttpParams.class +org/apache/http/params/DefaultedHttpParams.class +org/apache/http/params/HttpParams.class +org/apache/http/params/AbstractHttpParams.class +org/apache/http/params/HttpAbstractParamBean.class +org/apache/http/params/HttpConnectionParams.class +org/apache/http/params/BasicHttpParams.class +org/apache/http/params/HttpConnectionParamBean.class +org/apache/http/params/CoreConnectionPNames.class +org/apache/http/params/HttpParamConfig.class +org/apache/http/params/HttpProtocolParamBean.class +org/apache/http/params/HttpProtocolParams.class +org/apache/http/params/HttpParamsNames.class +org/apache/http/ReasonPhraseCatalog.class +org/apache/http/MalformedChunkCodingException.class +org/apache/http/FormattedHeader.class +org/apache/http/HttpResponse.class +org/apache/http/HeaderIterator.class +org/apache/http/HttpHeaders.class +org/apache/http/HttpClientConnection.class +org/apache/http/HttpHost.class +org/apache/http/protocol/ +org/apache/http/protocol/ResponseDate.class +org/apache/http/protocol/ChainBuilder.class +org/apache/http/protocol/HttpDateGenerator.class +org/apache/http/protocol/HttpRequestHandlerMapper.class +org/apache/http/protocol/HTTP.class +org/apache/http/protocol/SyncBasicHttpContext.class +org/apache/http/protocol/HttpService$HttpRequestHandlerResolverAdapter.class +org/apache/http/protocol/ImmutableHttpProcessor.class +org/apache/http/protocol/BasicHttpContext.class +org/apache/http/protocol/HttpProcessorBuilder.class +org/apache/http/protocol/RequestTargetHost.class +org/apache/http/protocol/ResponseConnControl.class +org/apache/http/protocol/HttpRequestInterceptorList.class +org/apache/http/protocol/HttpRequestExecutor.class +org/apache/http/protocol/RequestUserAgent.class +org/apache/http/protocol/HttpRequestHandlerResolver.class +org/apache/http/protocol/BasicHttpProcessor.class +org/apache/http/protocol/ResponseServer.class +org/apache/http/protocol/ResponseContent.class +org/apache/http/protocol/RequestDate.class +org/apache/http/protocol/HttpService.class +org/apache/http/protocol/HttpContext.class +org/apache/http/protocol/RequestConnControl.class +org/apache/http/protocol/UriHttpRequestHandlerMapper.class +org/apache/http/protocol/UriPatternMatcher.class +org/apache/http/protocol/HttpCoreContext.class +org/apache/http/protocol/HttpProcessor.class +org/apache/http/protocol/RequestExpectContinue.class +org/apache/http/protocol/HttpExpectationVerifier.class +org/apache/http/protocol/HttpRequestHandlerRegistry.class +org/apache/http/protocol/HttpResponseInterceptorList.class +org/apache/http/protocol/HttpRequestHandler.class +org/apache/http/protocol/ExecutionContext.class +org/apache/http/protocol/RequestContent.class +org/apache/http/protocol/DefaultedHttpContext.class +org/apache/http/HttpStatus.class +org/apache/http/TokenIterator.class +org/apache/http/ssl/ +org/apache/http/ssl/SSLContextBuilder$TrustManagerDelegate.class +org/apache/http/ssl/TrustStrategy.class +org/apache/http/ssl/PrivateKeyStrategy.class +org/apache/http/ssl/SSLContextBuilder$KeyManagerDelegate.class +org/apache/http/ssl/SSLContexts.class +org/apache/http/ssl/SSLContextBuilder.class +org/apache/http/ssl/SSLInitializationException.class +org/apache/http/ssl/PrivateKeyDetails.class +org/apache/http/ConnectionReuseStrategy.class +org/apache/http/pool/ +org/apache/http/pool/AbstractConnPool$4.class +org/apache/http/pool/AbstractConnPool$2.class +org/apache/http/pool/PoolEntry.class +org/apache/http/pool/ConnFactory.class +org/apache/http/pool/RouteSpecificPool.class +org/apache/http/pool/AbstractConnPool$3.class +org/apache/http/pool/PoolEntryCallback.class +org/apache/http/pool/AbstractConnPool.class +org/apache/http/pool/ConnPoolControl.class +org/apache/http/pool/PoolStats.class +org/apache/http/pool/AbstractConnPool$1.class +org/apache/http/pool/ConnPool.class +org/apache/http/pool/PoolEntryFuture.class +org/apache/http/config/ +org/apache/http/config/MessageConstraints$Builder.class +org/apache/http/config/ConnectionConfig.class +org/apache/http/config/SocketConfig.class +org/apache/http/config/Registry.class +org/apache/http/config/ConnectionConfig$Builder.class +org/apache/http/config/RegistryBuilder.class +org/apache/http/config/SocketConfig$Builder.class +org/apache/http/config/MessageConstraints.class +org/apache/http/config/Lookup.class +org/apache/http/HttpResponseFactory.class +org/apache/http/HttpRequest.class +org/apache/http/RequestLine.class +org/apache/http/HttpServerConnection.class +org/apache/http/NameValuePair.class +org/apache/http/util/ +org/apache/http/util/LangUtils.class +org/apache/http/util/NetUtils.class +org/apache/http/util/EntityUtils.class +org/apache/http/util/EncodingUtils.class +org/apache/http/util/TextUtils.class +org/apache/http/util/CharsetUtils.class +org/apache/http/util/CharArrayBuffer.class +org/apache/http/util/ByteArrayBuffer.class +org/apache/http/util/Asserts.class +org/apache/http/util/ExceptionUtils.class +org/apache/http/util/Args.class +org/apache/http/util/VersionInfo.class +org/apache/http/HttpVersion.class +org/apache/http/HttpConnectionFactory.class +org/apache/http/impl/ +org/apache/http/impl/DefaultHttpRequestFactory.class +org/apache/http/impl/SocketHttpClientConnection.class +org/apache/http/impl/bootstrap/ +org/apache/http/impl/bootstrap/SSLServerSetupHandler.class +org/apache/http/impl/bootstrap/HttpServer$Status.class +org/apache/http/impl/bootstrap/ThreadFactoryImpl.class +org/apache/http/impl/bootstrap/Worker.class +org/apache/http/impl/bootstrap/RequestListener.class +org/apache/http/impl/bootstrap/ServerBootstrap.class +org/apache/http/impl/bootstrap/HttpServer.class +org/apache/http/impl/SocketHttpServerConnection.class +org/apache/http/impl/BHttpConnectionBase.class +org/apache/http/impl/DefaultConnectionReuseStrategy.class +org/apache/http/impl/DefaultHttpServerConnection.class +org/apache/http/impl/AbstractHttpClientConnection.class +org/apache/http/impl/EnglishReasonPhraseCatalog.class +org/apache/http/impl/DefaultBHttpServerConnection.class +org/apache/http/impl/DefaultHttpClientConnection.class +org/apache/http/impl/pool/ +org/apache/http/impl/pool/BasicConnPool.class +org/apache/http/impl/pool/BasicConnFactory.class +org/apache/http/impl/pool/BasicPoolEntry.class +org/apache/http/impl/DefaultBHttpClientConnectionFactory.class +org/apache/http/impl/DefaultBHttpClientConnection.class +org/apache/http/impl/AbstractHttpServerConnection.class +org/apache/http/impl/io/ +org/apache/http/impl/io/HttpResponseWriter.class +org/apache/http/impl/io/HttpTransportMetricsImpl.class +org/apache/http/impl/io/AbstractSessionInputBuffer.class +org/apache/http/impl/io/DefaultHttpRequestWriter.class +org/apache/http/impl/io/SessionInputBufferImpl.class +org/apache/http/impl/io/ContentLengthOutputStream.class +org/apache/http/impl/io/SocketInputBuffer.class +org/apache/http/impl/io/DefaultHttpResponseWriterFactory.class +org/apache/http/impl/io/DefaultHttpRequestWriterFactory.class +org/apache/http/impl/io/IdentityOutputStream.class +org/apache/http/impl/io/IdentityInputStream.class +org/apache/http/impl/io/SocketOutputBuffer.class +org/apache/http/impl/io/ChunkedOutputStream.class +org/apache/http/impl/io/DefaultHttpResponseParserFactory.class +org/apache/http/impl/io/ContentLengthInputStream.class +org/apache/http/impl/io/HttpRequestWriter.class +org/apache/http/impl/io/DefaultHttpResponseWriter.class +org/apache/http/impl/io/DefaultHttpRequestParserFactory.class +org/apache/http/impl/io/AbstractMessageParser.class +org/apache/http/impl/io/EmptyInputStream.class +org/apache/http/impl/io/DefaultHttpRequestParser.class +org/apache/http/impl/io/SessionOutputBufferImpl.class +org/apache/http/impl/io/HttpRequestParser.class +org/apache/http/impl/io/AbstractSessionOutputBuffer.class +org/apache/http/impl/io/DefaultHttpResponseParser.class +org/apache/http/impl/io/ChunkedInputStream.class +org/apache/http/impl/io/AbstractMessageWriter.class +org/apache/http/impl/io/HttpResponseParser.class +org/apache/http/impl/entity/ +org/apache/http/impl/entity/DisallowIdentityContentLengthStrategy.class +org/apache/http/impl/entity/LaxContentLengthStrategy.class +org/apache/http/impl/entity/StrictContentLengthStrategy.class +org/apache/http/impl/entity/EntityDeserializer.class +org/apache/http/impl/entity/EntitySerializer.class +org/apache/http/impl/DefaultHttpResponseFactory.class +org/apache/http/impl/DefaultBHttpServerConnectionFactory.class +org/apache/http/impl/HttpConnectionMetricsImpl.class +org/apache/http/impl/ConnSupport.class +org/apache/http/impl/NoConnectionReuseStrategy.class +org/apache/http/ConnectionClosedException.class +org/apache/http/StatusLine.class +org/apache/http/io/ +org/apache/http/io/HttpMessageWriterFactory.class +org/apache/http/io/BufferInfo.class +org/apache/http/io/HttpMessageParserFactory.class +org/apache/http/io/HttpTransportMetrics.class +org/apache/http/io/SessionOutputBuffer.class +org/apache/http/io/HttpMessageParser.class +org/apache/http/io/EofSensor.class +org/apache/http/io/HttpMessageWriter.class +org/apache/http/io/SessionInputBuffer.class +org/apache/http/NoHttpResponseException.class +org/apache/http/HttpEntityEnclosingRequest.class +org/apache/http/entity/ +org/apache/http/entity/ContentLengthStrategy.class +org/apache/http/entity/FileEntity.class +org/apache/http/entity/InputStreamEntity.class +org/apache/http/entity/SerializableEntity.class +org/apache/http/entity/StringEntity.class +org/apache/http/entity/HttpEntityWrapper.class +org/apache/http/entity/ContentProducer.class +org/apache/http/entity/BufferedHttpEntity.class +org/apache/http/entity/ByteArrayEntity.class +org/apache/http/entity/EntityTemplate.class +org/apache/http/entity/BasicHttpEntity.class +org/apache/http/entity/ContentType.class +org/apache/http/entity/AbstractHttpEntity.class +org/apache/http/ProtocolException.class +org/apache/http/MessageConstraintException.class +org/apache/http/ExceptionLogger$2.class +org/apache/http/Header.class +META-INF/DEPENDENCIES +META-INF/NOTICE +META-INF/LICENSE +META-INF/maven/org.apache.httpcomponents/ +META-INF/maven/org.apache.httpcomponents/httpcore/ +META-INF/maven/org.apache.httpcomponents/httpcore/pom.xml +META-INF/maven/org.apache.httpcomponents/httpcore/pom.properties +org/apache/http/auth/ +org/apache/http/auth/KerberosCredentials.class +org/apache/http/auth/AuthSchemeRegistry.class +org/apache/http/auth/ChallengeState.class +org/apache/http/auth/NTUserPrincipal.class +org/apache/http/auth/InvalidCredentialsException.class +org/apache/http/auth/AuthSchemeRegistry$1.class +org/apache/http/auth/NTCredentials.class +org/apache/http/auth/AuthScheme.class +org/apache/http/auth/AuthenticationException.class +org/apache/http/auth/params/ +org/apache/http/auth/params/AuthParams.class +org/apache/http/auth/params/AuthParamBean.class +org/apache/http/auth/params/AuthPNames.class +org/apache/http/auth/BasicUserPrincipal.class +org/apache/http/auth/AuthSchemeProvider.class +org/apache/http/auth/ContextAwareAuthScheme.class +org/apache/http/auth/AuthProtocolState.class +org/apache/http/auth/AuthScope.class +org/apache/http/auth/AuthSchemeFactory.class +org/apache/http/auth/AUTH.class +org/apache/http/auth/Credentials.class +org/apache/http/auth/UsernamePasswordCredentials.class +org/apache/http/auth/AuthOption.class +org/apache/http/auth/MalformedChallengeException.class +org/apache/http/auth/AuthState.class +org/apache/http/cookie/ +org/apache/http/cookie/CookieSpecRegistry.class +org/apache/http/cookie/CookieSpec.class +org/apache/http/cookie/CookieRestrictionViolationException.class +org/apache/http/cookie/CookieIdentityComparator.class +org/apache/http/cookie/SM.class +org/apache/http/cookie/CookieOrigin.class +org/apache/http/cookie/CookieAttributeHandler.class +org/apache/http/cookie/SetCookie2.class +org/apache/http/cookie/params/ +org/apache/http/cookie/params/CookieSpecParamBean.class +org/apache/http/cookie/params/CookieSpecPNames.class +org/apache/http/cookie/MalformedCookieException.class +org/apache/http/cookie/ClientCookie.class +org/apache/http/cookie/CommonCookieAttributeHandler.class +org/apache/http/cookie/CookieSpecRegistry$1.class +org/apache/http/cookie/CookiePathComparator.class +org/apache/http/cookie/SetCookie.class +org/apache/http/cookie/Cookie.class +org/apache/http/cookie/CookieSpecProvider.class +org/apache/http/cookie/CookiePriorityComparator.class +org/apache/http/cookie/CookieSpecFactory.class +org/apache/http/client/ +org/apache/http/client/RedirectStrategy.class +org/apache/http/client/ConnectionBackoffStrategy.class +org/apache/http/client/version.properties +org/apache/http/client/AuthenticationStrategy.class +org/apache/http/client/HttpClient.class +org/apache/http/client/methods/ +org/apache/http/client/methods/HttpOptions.class +org/apache/http/client/methods/AbortableHttpRequest.class +org/apache/http/client/methods/HttpRequestBase.class +org/apache/http/client/methods/AbstractExecutionAwareRequest$2.class +org/apache/http/client/methods/RequestBuilder.class +org/apache/http/client/methods/HttpGet.class +org/apache/http/client/methods/HttpPatch.class +org/apache/http/client/methods/HttpDelete.class +org/apache/http/client/methods/HttpUriRequest.class +org/apache/http/client/methods/CloseableHttpResponse.class +org/apache/http/client/methods/HttpRequestWrapper$1.class +org/apache/http/client/methods/RequestBuilder$InternalEntityEclosingRequest.class +org/apache/http/client/methods/HttpRequestWrapper$HttpEntityEnclosingRequestWrapper.class +org/apache/http/client/methods/RequestBuilder$InternalRequest.class +org/apache/http/client/methods/HttpRequestWrapper.class +org/apache/http/client/methods/HttpHead.class +org/apache/http/client/methods/HttpExecutionAware.class +org/apache/http/client/methods/AbstractExecutionAwareRequest.class +org/apache/http/client/methods/Configurable.class +org/apache/http/client/methods/AbstractExecutionAwareRequest$1.class +org/apache/http/client/methods/HttpPost.class +org/apache/http/client/methods/HttpEntityEnclosingRequestBase.class +org/apache/http/client/methods/HttpTrace.class +org/apache/http/client/methods/HttpPut.class +org/apache/http/client/CredentialsProvider.class +org/apache/http/client/UserTokenHandler.class +org/apache/http/client/CookieStore.class +org/apache/http/client/HttpResponseException.class +org/apache/http/client/ClientProtocolException.class +org/apache/http/client/AuthenticationHandler.class +org/apache/http/client/params/ +org/apache/http/client/params/HttpClientParams.class +org/apache/http/client/params/ClientPNames.class +org/apache/http/client/params/ClientParamBean.class +org/apache/http/client/params/CookiePolicy.class +org/apache/http/client/params/AuthPolicy.class +org/apache/http/client/params/HttpClientParamConfig.class +org/apache/http/client/params/AllClientPNames.class +org/apache/http/client/CircularRedirectException.class +org/apache/http/client/utils/ +org/apache/http/client/utils/Punycode.class +org/apache/http/client/utils/Idn.class +org/apache/http/client/utils/HttpClientUtils.class +org/apache/http/client/utils/URIBuilder.class +org/apache/http/client/utils/URIUtils.class +org/apache/http/client/utils/DateUtils$DateFormatHolder.class +org/apache/http/client/utils/URLEncodedUtils.class +org/apache/http/client/utils/JdkIdn.class +org/apache/http/client/utils/CloneUtils.class +org/apache/http/client/utils/DateUtils.class +org/apache/http/client/utils/Rfc3492Idn.class +org/apache/http/client/protocol/ +org/apache/http/client/protocol/RequestAcceptEncoding.class +org/apache/http/client/protocol/ResponseProcessCookies.class +org/apache/http/client/protocol/RequestDefaultHeaders.class +org/apache/http/client/protocol/ResponseContentEncoding$2.class +org/apache/http/client/protocol/ClientContext.class +org/apache/http/client/protocol/ResponseAuthCache.class +org/apache/http/client/protocol/RequestAuthenticationBase$1.class +org/apache/http/client/protocol/RequestTargetAuthentication.class +org/apache/http/client/protocol/RequestProxyAuthentication.class +org/apache/http/client/protocol/RequestClientConnControl.class +org/apache/http/client/protocol/ResponseAuthCache$1.class +org/apache/http/client/protocol/RequestAddCookies.class +org/apache/http/client/protocol/RequestAuthCache.class +org/apache/http/client/protocol/ClientContextConfigurer.class +org/apache/http/client/protocol/ResponseContentEncoding$1.class +org/apache/http/client/protocol/RequestExpectContinue.class +org/apache/http/client/protocol/ResponseContentEncoding.class +org/apache/http/client/protocol/RequestAuthenticationBase.class +org/apache/http/client/protocol/HttpClientContext.class +org/apache/http/client/BackoffManager.class +org/apache/http/client/config/ +org/apache/http/client/config/RequestConfig$Builder.class +org/apache/http/client/config/RequestConfig.class +org/apache/http/client/config/CookieSpecs.class +org/apache/http/client/config/AuthSchemes.class +org/apache/http/client/AuthCache.class +org/apache/http/client/ResponseHandler.class +org/apache/http/client/RedirectException.class +org/apache/http/client/RedirectHandler.class +org/apache/http/client/NonRepeatableRequestException.class +org/apache/http/client/entity/ +org/apache/http/client/entity/DeflateInputStream.class +org/apache/http/client/entity/InputStreamFactory.class +org/apache/http/client/entity/UrlEncodedFormEntity.class +org/apache/http/client/entity/DeflateInputStream$DeflateStream.class +org/apache/http/client/entity/GzipCompressingEntity.class +org/apache/http/client/entity/EntityBuilder.class +org/apache/http/client/entity/LazyDecompressingInputStream.class +org/apache/http/client/entity/DecompressingEntity.class +org/apache/http/client/entity/GzipDecompressingEntity$1.class +org/apache/http/client/entity/DeflateDecompressingEntity$1.class +org/apache/http/client/entity/GzipDecompressingEntity.class +org/apache/http/client/entity/DeflateDecompressingEntity.class +org/apache/http/client/HttpRequestRetryHandler.class +org/apache/http/client/RequestDirector.class +org/apache/http/client/ServiceUnavailableRetryStrategy.class +org/apache/http/conn/ +org/apache/http/conn/OperatedClientConnection.class +org/apache/http/conn/ManagedClientConnection.class +org/apache/http/conn/ConnectionRequest.class +org/apache/http/conn/EofSensorInputStream.class +org/apache/http/conn/ClientConnectionOperator.class +org/apache/http/conn/HttpClientConnectionOperator.class +org/apache/http/conn/BasicManagedEntity.class +org/apache/http/conn/ConnectionKeepAliveStrategy.class +org/apache/http/conn/ManagedHttpClientConnection.class +org/apache/http/conn/BasicEofSensorWatcher.class +org/apache/http/conn/HttpClientConnectionManager.class +org/apache/http/conn/HttpRoutedConnection.class +org/apache/http/conn/EofSensorWatcher.class +org/apache/http/conn/routing/ +org/apache/http/conn/routing/BasicRouteDirector.class +org/apache/http/conn/routing/RouteInfo$LayerType.class +org/apache/http/conn/routing/RouteInfo.class +org/apache/http/conn/routing/RouteTracker.class +org/apache/http/conn/routing/HttpRouteDirector.class +org/apache/http/conn/routing/HttpRoutePlanner.class +org/apache/http/conn/routing/RouteInfo$TunnelType.class +org/apache/http/conn/routing/HttpRoute.class +org/apache/http/conn/SchemePortResolver.class +org/apache/http/conn/ClientConnectionManager.class +org/apache/http/conn/params/ +org/apache/http/conn/params/ConnManagerParamBean.class +org/apache/http/conn/params/ConnRouteParamBean.class +org/apache/http/conn/params/ConnManagerParams$1.class +org/apache/http/conn/params/ConnManagerPNames.class +org/apache/http/conn/params/ConnConnectionParamBean.class +org/apache/http/conn/params/ConnManagerParams.class +org/apache/http/conn/params/ConnPerRouteBean.class +org/apache/http/conn/params/ConnConnectionPNames.class +org/apache/http/conn/params/ConnPerRoute.class +org/apache/http/conn/params/ConnRoutePNames.class +org/apache/http/conn/params/ConnRouteParams.class +org/apache/http/conn/socket/ +org/apache/http/conn/socket/PlainConnectionSocketFactory.class +org/apache/http/conn/socket/ConnectionSocketFactory.class +org/apache/http/conn/socket/LayeredConnectionSocketFactory.class +org/apache/http/conn/ClientConnectionRequest.class +org/apache/http/conn/ssl/ +org/apache/http/conn/ssl/TrustSelfSignedStrategy.class +org/apache/http/conn/ssl/SSLContextBuilder$TrustManagerDelegate.class +org/apache/http/conn/ssl/DefaultHostnameVerifier$1.class +org/apache/http/conn/ssl/DefaultHostnameVerifier$TYPE.class +org/apache/http/conn/ssl/BrowserCompatHostnameVerifier.class +org/apache/http/conn/ssl/TrustStrategy.class +org/apache/http/conn/ssl/PrivateKeyStrategy.class +org/apache/http/conn/ssl/SSLContextBuilder$KeyManagerDelegate.class +org/apache/http/conn/ssl/X509HostnameVerifier.class +org/apache/http/conn/ssl/AbstractVerifier.class +org/apache/http/conn/ssl/SSLSocketFactory.class +org/apache/http/conn/ssl/SSLConnectionSocketFactory.class +org/apache/http/conn/ssl/SSLContexts.class +org/apache/http/conn/ssl/AllowAllHostnameVerifier.class +org/apache/http/conn/ssl/StrictHostnameVerifier.class +org/apache/http/conn/ssl/SSLContextBuilder.class +org/apache/http/conn/ssl/DefaultHostnameVerifier.class +org/apache/http/conn/ssl/SSLInitializationException.class +org/apache/http/conn/ssl/PrivateKeyDetails.class +org/apache/http/conn/ssl/NoopHostnameVerifier.class +org/apache/http/conn/ConnectionPoolTimeoutException.class +org/apache/http/conn/ConnectionReleaseTrigger.class +org/apache/http/conn/ClientConnectionManagerFactory.class +org/apache/http/conn/scheme/ +org/apache/http/conn/scheme/SchemeSocketFactoryAdaptor.class +org/apache/http/conn/scheme/SchemeLayeredSocketFactory.class +org/apache/http/conn/scheme/PlainSocketFactory.class +org/apache/http/conn/scheme/LayeredSocketFactoryAdaptor.class +org/apache/http/conn/scheme/Scheme.class +org/apache/http/conn/scheme/HostNameResolver.class +org/apache/http/conn/scheme/SchemeRegistry.class +org/apache/http/conn/scheme/SchemeLayeredSocketFactoryAdaptor2.class +org/apache/http/conn/scheme/SchemeLayeredSocketFactoryAdaptor.class +org/apache/http/conn/scheme/SocketFactory.class +org/apache/http/conn/scheme/SchemeSocketFactory.class +org/apache/http/conn/scheme/SocketFactoryAdaptor.class +org/apache/http/conn/scheme/LayeredSchemeSocketFactory.class +org/apache/http/conn/scheme/LayeredSocketFactory.class +org/apache/http/conn/ConnectTimeoutException.class +org/apache/http/conn/util/ +org/apache/http/conn/util/DomainType.class +org/apache/http/conn/util/InetAddressUtils.class +org/apache/http/conn/util/PublicSuffixList.class +org/apache/http/conn/util/PublicSuffixMatcher.class +org/apache/http/conn/util/PublicSuffixListParser.class +org/apache/http/conn/util/PublicSuffixMatcherLoader.class +org/apache/http/conn/HttpInetSocketAddress.class +org/apache/http/conn/HttpConnectionFactory.class +org/apache/http/conn/HttpHostConnectException.class +org/apache/http/conn/DnsResolver.class +org/apache/http/conn/MultihomePlainSocketFactory.class +org/apache/http/conn/UnsupportedSchemeException.class +org/apache/http/impl/auth/ +org/apache/http/impl/auth/NTLMEngineImpl$CipherGen.class +org/apache/http/impl/auth/NTLMScheme$State.class +org/apache/http/impl/auth/GGSSchemeBase$1.class +org/apache/http/impl/auth/NTLMEngineException.class +org/apache/http/impl/auth/KerberosSchemeFactory.class +org/apache/http/impl/auth/RFC2617Scheme.class +org/apache/http/impl/auth/NTLMScheme.class +org/apache/http/impl/auth/KerberosScheme.class +org/apache/http/impl/auth/HttpEntityDigester.class +org/apache/http/impl/auth/SPNegoScheme.class +org/apache/http/impl/auth/BasicSchemeFactory.class +org/apache/http/impl/auth/NegotiateScheme.class +org/apache/http/impl/auth/NTLMSchemeFactory.class +org/apache/http/impl/auth/NTLMEngineImpl$NTLMMessage.class +org/apache/http/impl/auth/GGSSchemeBase.class +org/apache/http/impl/auth/HttpAuthenticator$1.class +org/apache/http/impl/auth/NTLMEngine.class +org/apache/http/impl/auth/DigestScheme.class +org/apache/http/impl/auth/NTLMEngineImpl.class +org/apache/http/impl/auth/AuthSchemeBase.class +org/apache/http/impl/auth/NTLMEngineImpl$Type3Message.class +org/apache/http/impl/auth/NegotiateSchemeFactory.class +org/apache/http/impl/auth/SpnegoTokenGenerator.class +org/apache/http/impl/auth/NTLMEngineImpl$HMACMD5.class +org/apache/http/impl/auth/HttpAuthenticator.class +org/apache/http/impl/auth/GGSSchemeBase$State.class +org/apache/http/impl/auth/NTLMEngineImpl$MD4.class +org/apache/http/impl/auth/NTLMEngineImpl$Type2Message.class +org/apache/http/impl/auth/DigestSchemeFactory.class +org/apache/http/impl/auth/SPNegoSchemeFactory.class +org/apache/http/impl/auth/NTLMEngineImpl$Type1Message.class +org/apache/http/impl/auth/BasicScheme.class +org/apache/http/impl/auth/UnsupportedDigestAlgorithmException.class +org/apache/http/impl/cookie/ +org/apache/http/impl/cookie/BestMatchSpec.class +org/apache/http/impl/cookie/RFC2965DiscardAttributeHandler.class +org/apache/http/impl/cookie/DefaultCookieSpecProvider$CompatibilityLevel.class +org/apache/http/impl/cookie/BasicClientCookie2.class +org/apache/http/impl/cookie/BasicSecureHandler.class +org/apache/http/impl/cookie/RFC2109Spec.class +org/apache/http/impl/cookie/RFC2965Spec.class +org/apache/http/impl/cookie/PublicSuffixFilter.class +org/apache/http/impl/cookie/RFC6265CookieSpecProvider$2.class +org/apache/http/impl/cookie/BasicDomainHandler.class +org/apache/http/impl/cookie/DefaultCookieSpecProvider.class +org/apache/http/impl/cookie/RFC2109VersionHandler.class +org/apache/http/impl/cookie/RFC2109DomainHandler.class +org/apache/http/impl/cookie/BasicMaxAgeHandler.class +org/apache/http/impl/cookie/NetscapeDraftSpec.class +org/apache/http/impl/cookie/LaxExpiresHandler.class +org/apache/http/impl/cookie/BasicExpiresHandler.class +org/apache/http/impl/cookie/BrowserCompatSpec.class +org/apache/http/impl/cookie/RFC2965SpecFactory.class +org/apache/http/impl/cookie/DefaultCookieSpec.class +org/apache/http/impl/cookie/BrowserCompatSpec$1.class +org/apache/http/impl/cookie/BrowserCompatVersionAttributeHandler.class +org/apache/http/impl/cookie/IgnoreSpec.class +org/apache/http/impl/cookie/RFC6265CookieSpecProvider.class +org/apache/http/impl/cookie/BestMatchSpecFactory.class +org/apache/http/impl/cookie/RFC6265CookieSpecProvider$CompatibilityLevel.class +org/apache/http/impl/cookie/RFC6265StrictSpec.class +org/apache/http/impl/cookie/RFC2965PortAttributeHandler.class +org/apache/http/impl/cookie/IgnoreSpecProvider.class +org/apache/http/impl/cookie/BasicClientCookie.class +org/apache/http/impl/cookie/NetscapeDraftHeaderParser.class +org/apache/http/impl/cookie/DefaultCookieSpecProvider$1.class +org/apache/http/impl/cookie/BasicPathHandler.class +org/apache/http/impl/cookie/LaxMaxAgeHandler.class +org/apache/http/impl/cookie/RFC6265CookieSpecBase.class +org/apache/http/impl/cookie/RFC2965SpecProvider.class +org/apache/http/impl/cookie/NetscapeDomainHandler.class +org/apache/http/impl/cookie/RFC2965DomainAttributeHandler.class +org/apache/http/impl/cookie/PublicSuffixDomainFilter.class +org/apache/http/impl/cookie/IgnoreSpecFactory.class +org/apache/http/impl/cookie/RFC6265CookieSpecProvider$1.class +org/apache/http/impl/cookie/RFC2965VersionAttributeHandler.class +org/apache/http/impl/cookie/AbstractCookieAttributeHandler.class +org/apache/http/impl/cookie/BrowserCompatSpecFactory.class +org/apache/http/impl/cookie/RFC2109SpecProvider.class +org/apache/http/impl/cookie/BrowserCompatSpecFactory$SecurityLevel.class +org/apache/http/impl/cookie/NetscapeDraftSpecFactory.class +org/apache/http/impl/cookie/CookieSpecBase.class +org/apache/http/impl/cookie/RFC6265LaxSpec.class +org/apache/http/impl/cookie/DateParseException.class +org/apache/http/impl/cookie/RFC2109SpecFactory.class +org/apache/http/impl/cookie/RFC6265CookieSpec.class +org/apache/http/impl/cookie/PublicSuffixListParser.class +org/apache/http/impl/cookie/AbstractCookieSpec.class +org/apache/http/impl/cookie/BasicCommentHandler.class +org/apache/http/impl/cookie/DateUtils.class +org/apache/http/impl/cookie/RFC2965CommentUrlAttributeHandler.class +org/apache/http/impl/cookie/NetscapeDraftSpecProvider.class +org/apache/http/impl/client/ +org/apache/http/impl/client/TargetAuthenticationStrategy.class +org/apache/http/impl/client/LaxRedirectStrategy.class +org/apache/http/impl/client/NoopUserTokenHandler.class +org/apache/http/impl/client/RoutedRequest.class +org/apache/http/impl/client/AuthenticationStrategyImpl.class +org/apache/http/impl/client/MinimalHttpClient$1.class +org/apache/http/impl/client/CloseableHttpResponseProxy.class +org/apache/http/impl/client/DefaultProxyAuthenticationHandler.class +org/apache/http/impl/client/DefaultRedirectStrategy.class +org/apache/http/impl/client/FutureRequestExecutionService.class +org/apache/http/impl/client/FutureRequestExecutionMetrics$DurationCounter.class +org/apache/http/impl/client/HttpClientBuilder.class +org/apache/http/impl/client/AutoRetryHttpClient.class +org/apache/http/impl/client/BasicCredentialsProvider.class +org/apache/http/impl/client/AbstractResponseHandler.class +org/apache/http/impl/client/IdleConnectionEvictor$DefaultThreadFactory.class +org/apache/http/impl/client/RequestWrapper.class +org/apache/http/impl/client/HttpRequestFutureTask.class +org/apache/http/impl/client/ProxyClient.class +org/apache/http/impl/client/ContentEncodingHttpClient.class +org/apache/http/impl/client/RedirectLocations.class +org/apache/http/impl/client/DefaultHttpRequestRetryHandler.class +org/apache/http/impl/client/HttpRequestTaskCallable.class +org/apache/http/impl/client/StandardHttpRequestRetryHandler.class +org/apache/http/impl/client/AIMDBackoffManager.class +org/apache/http/impl/client/AbstractAuthenticationHandler.class +org/apache/http/impl/client/DecompressingHttpClient.class +org/apache/http/impl/client/SystemClock.class +org/apache/http/impl/client/DefaultRedirectStrategyAdaptor.class +org/apache/http/impl/client/EntityEnclosingRequestWrapper$EntityWrapper.class +org/apache/http/impl/client/AbstractHttpClient.class +org/apache/http/impl/client/Clock.class +org/apache/http/impl/client/DefaultConnectionKeepAliveStrategy.class +org/apache/http/impl/client/InternalHttpClient$1.class +org/apache/http/impl/client/SystemDefaultHttpClient.class +org/apache/http/impl/client/AuthenticationStrategyAdaptor.class +org/apache/http/impl/client/IdleConnectionEvictor.class +org/apache/http/impl/client/SystemDefaultCredentialsProvider.class +org/apache/http/impl/client/FutureRequestExecutionMetrics.class +org/apache/http/impl/client/InternalHttpClient.class +org/apache/http/impl/client/HttpClientBuilder$2.class +org/apache/http/impl/client/NullBackoffStrategy.class +org/apache/http/impl/client/DefaultBackoffStrategy.class +org/apache/http/impl/client/HttpAuthenticator.class +org/apache/http/impl/client/BasicCookieStore.class +org/apache/http/impl/client/EntityEnclosingRequestWrapper.class +org/apache/http/impl/client/CookieSpecRegistries.class +org/apache/http/impl/client/DefaultClientConnectionReuseStrategy.class +org/apache/http/impl/client/DefaultServiceUnavailableRetryStrategy.class +org/apache/http/impl/client/DefaultRedirectHandler.class +org/apache/http/impl/client/HttpClients.class +org/apache/http/impl/client/CloseableHttpClient.class +org/apache/http/impl/client/TunnelRefusedException.class +org/apache/http/impl/client/MinimalHttpClient.class +org/apache/http/impl/client/BasicAuthCache.class +org/apache/http/impl/client/BasicResponseHandler.class +org/apache/http/impl/client/DefaultUserTokenHandler.class +org/apache/http/impl/client/HttpClientBuilder$1.class +org/apache/http/impl/client/ClientParamsStack.class +org/apache/http/impl/client/DefaultRequestDirector.class +org/apache/http/impl/client/DefaultTargetAuthenticationHandler.class +org/apache/http/impl/client/IdleConnectionEvictor$1.class +org/apache/http/impl/client/DefaultHttpClient.class +org/apache/http/impl/client/ProxyAuthenticationStrategy.class +org/apache/http/impl/execchain/ +org/apache/http/impl/execchain/ServiceUnavailableRetryExec.class +org/apache/http/impl/execchain/RequestEntityProxy.class +org/apache/http/impl/execchain/ProtocolExec.class +org/apache/http/impl/execchain/MinimalClientExec.class +org/apache/http/impl/execchain/MainClientExec.class +org/apache/http/impl/execchain/RedirectExec.class +org/apache/http/impl/execchain/ClientExecChain.class +org/apache/http/impl/execchain/ConnectionHolder.class +org/apache/http/impl/execchain/HttpResponseProxy.class +org/apache/http/impl/execchain/RetryExec.class +org/apache/http/impl/execchain/TunnelRefusedException.class +org/apache/http/impl/execchain/RequestAbortedException.class +org/apache/http/impl/execchain/ResponseEntityProxy.class +org/apache/http/impl/execchain/BackoffStrategyExec.class +org/apache/http/impl/conn/ +org/apache/http/impl/conn/HttpPoolEntry.class +org/apache/http/impl/conn/DefaultClientConnection.class +org/apache/http/impl/conn/CPool.class +org/apache/http/impl/conn/PoolingHttpClientConnectionManager.class +org/apache/http/impl/conn/Wire.class +org/apache/http/impl/conn/DefaultHttpClientConnectionOperator.class +org/apache/http/impl/conn/IdleConnectionHandler.class +org/apache/http/impl/conn/ManagedHttpClientConnectionFactory.class +org/apache/http/impl/conn/SystemDefaultRoutePlanner$1.class +org/apache/http/impl/conn/CPoolProxy.class +org/apache/http/impl/conn/DefaultHttpRoutePlanner.class +org/apache/http/impl/conn/PoolingClientConnectionManager.class +org/apache/http/impl/conn/DefaultManagedHttpClientConnection.class +org/apache/http/impl/conn/LoggingSessionInputBuffer.class +org/apache/http/impl/conn/ConnectionShutdownException.class +org/apache/http/impl/conn/LoggingOutputStream.class +org/apache/http/impl/conn/ManagedClientConnectionImpl.class +org/apache/http/impl/conn/PoolingHttpClientConnectionManager$ConfigData.class +org/apache/http/impl/conn/DefaultResponseParser.class +org/apache/http/impl/conn/LoggingInputStream.class +org/apache/http/impl/conn/AbstractClientConnAdapter.class +org/apache/http/impl/conn/SystemDefaultRoutePlanner.class +org/apache/http/impl/conn/tsccm/ +org/apache/http/impl/conn/tsccm/ConnPoolByRoute.class +org/apache/http/impl/conn/tsccm/ThreadSafeClientConnManager$1.class +org/apache/http/impl/conn/tsccm/RouteSpecificPool.class +org/apache/http/impl/conn/tsccm/ConnPoolByRoute$1.class +org/apache/http/impl/conn/tsccm/PoolEntryRequest.class +org/apache/http/impl/conn/tsccm/ThreadSafeClientConnManager.class +org/apache/http/impl/conn/tsccm/WaitingThread.class +org/apache/http/impl/conn/tsccm/WaitingThreadAborter.class +org/apache/http/impl/conn/tsccm/RouteSpecificPool$1.class +org/apache/http/impl/conn/tsccm/AbstractConnPool.class +org/apache/http/impl/conn/tsccm/BasicPoolEntryRef.class +org/apache/http/impl/conn/tsccm/BasicPooledConnAdapter.class +org/apache/http/impl/conn/tsccm/BasicPoolEntry.class +org/apache/http/impl/conn/SingleClientConnManager$ConnAdapter.class +org/apache/http/impl/conn/PoolingHttpClientConnectionManager$InternalConnectionFactory.class +org/apache/http/impl/conn/DefaultHttpResponseParserFactory.class +org/apache/http/impl/conn/AbstractPoolEntry.class +org/apache/http/impl/conn/ProxySelectorRoutePlanner$1.class +org/apache/http/impl/conn/AbstractPooledConnAdapter.class +org/apache/http/impl/conn/SingleClientConnManager$PoolEntry.class +org/apache/http/impl/conn/HttpConnPool$InternalConnFactory.class +org/apache/http/impl/conn/SchemeRegistryFactory.class +org/apache/http/impl/conn/DefaultClientConnectionOperator.class +org/apache/http/impl/conn/LoggingManagedHttpClientConnection.class +org/apache/http/impl/conn/LoggingSessionOutputBuffer.class +org/apache/http/impl/conn/BasicHttpClientConnectionManager$1.class +org/apache/http/impl/conn/DefaultProxyRoutePlanner.class +org/apache/http/impl/conn/BasicClientConnectionManager$1.class +org/apache/http/impl/conn/PoolingHttpClientConnectionManager$1.class +org/apache/http/impl/conn/BasicHttpClientConnectionManager.class +org/apache/http/impl/conn/PoolingClientConnectionManager$1.class +org/apache/http/impl/conn/IdleConnectionHandler$TimeValues.class +org/apache/http/impl/conn/CPoolEntry.class +org/apache/http/impl/conn/DefaultSchemePortResolver.class +org/apache/http/impl/conn/SingleClientConnManager.class +org/apache/http/impl/conn/DefaultRoutePlanner.class +org/apache/http/impl/conn/InMemoryDnsResolver.class +org/apache/http/impl/conn/DefaultHttpResponseParser.class +org/apache/http/impl/conn/HttpConnPool.class +org/apache/http/impl/conn/BasicClientConnectionManager.class +org/apache/http/impl/conn/SingleClientConnManager$1.class +org/apache/http/impl/conn/ProxySelectorRoutePlanner.class +org/apache/http/impl/conn/SystemDefaultDnsResolver.class +mozilla/ +mozilla/public-suffix-list.txt +META-INF/maven/org.apache.httpcomponents/httpclient/ +META-INF/maven/org.apache.httpcomponents/httpclient/pom.xml +META-INF/maven/org.apache.httpcomponents/httpclient/pom.properties +META-INF/NOTICE.txt +META-INF/LICENSE.txt +org/apache/commons/ +org/apache/commons/logging/ +org/apache/commons/logging/impl/ +org/apache/commons/logging/impl/AvalonLogger.class +org/apache/commons/logging/impl/SimpleLog.class +org/apache/commons/logging/impl/Log4JLogger.class +org/apache/commons/logging/impl/WeakHashtable.class +org/apache/commons/logging/impl/WeakHashtable$1.class +org/apache/commons/logging/impl/Jdk14Logger.class +org/apache/commons/logging/impl/ServletContextCleaner.class +org/apache/commons/logging/impl/WeakHashtable$WeakKey.class +org/apache/commons/logging/impl/NoOpLog.class +org/apache/commons/logging/impl/LogKitLogger.class +org/apache/commons/logging/impl/LogFactoryImpl$3.class +org/apache/commons/logging/impl/LogFactoryImpl$1.class +org/apache/commons/logging/impl/WeakHashtable$Referenced.class +org/apache/commons/logging/impl/SimpleLog$1.class +org/apache/commons/logging/impl/Jdk13LumberjackLogger.class +org/apache/commons/logging/impl/LogFactoryImpl.class +org/apache/commons/logging/impl/LogFactoryImpl$2.class +org/apache/commons/logging/impl/WeakHashtable$Entry.class +org/apache/commons/logging/LogSource.class +org/apache/commons/logging/LogFactory$4.class +org/apache/commons/logging/LogFactory$3.class +org/apache/commons/logging/LogFactory$6.class +org/apache/commons/logging/LogConfigurationException.class +org/apache/commons/logging/LogFactory.class +org/apache/commons/logging/LogFactory$5.class +org/apache/commons/logging/LogFactory$1.class +org/apache/commons/logging/LogFactory$2.class +org/apache/commons/logging/Log.class +META-INF/maven/commons-logging/ +META-INF/maven/commons-logging/commons-logging/ +META-INF/maven/commons-logging/commons-logging/pom.xml +META-INF/maven/commons-logging/commons-logging/pom.properties +org/apache/commons/codec/ +org/apache/commons/codec/binary/ +org/apache/commons/codec/binary/Base32.class +org/apache/commons/codec/binary/Base32InputStream.class +org/apache/commons/codec/binary/Base32OutputStream.class +org/apache/commons/codec/binary/Base64.class +org/apache/commons/codec/binary/Base64InputStream.class +org/apache/commons/codec/binary/Base64OutputStream.class +org/apache/commons/codec/binary/BaseNCodec$Context.class +org/apache/commons/codec/binary/BaseNCodec.class +org/apache/commons/codec/binary/BaseNCodecInputStream.class +org/apache/commons/codec/binary/BaseNCodecOutputStream.class +org/apache/commons/codec/binary/BinaryCodec.class +org/apache/commons/codec/binary/Hex.class +org/apache/commons/codec/binary/StringUtils.class +org/apache/commons/codec/BinaryDecoder.class +org/apache/commons/codec/BinaryEncoder.class +org/apache/commons/codec/CharEncoding.class +org/apache/commons/codec/Charsets.class +org/apache/commons/codec/Decoder.class +org/apache/commons/codec/DecoderException.class +org/apache/commons/codec/digest/ +org/apache/commons/codec/digest/B64.class +org/apache/commons/codec/digest/Crypt.class +org/apache/commons/codec/digest/DigestUtils.class +org/apache/commons/codec/digest/Md5Crypt.class +org/apache/commons/codec/digest/MessageDigestAlgorithms.class +org/apache/commons/codec/digest/Sha2Crypt.class +org/apache/commons/codec/digest/UnixCrypt.class +org/apache/commons/codec/Encoder.class +org/apache/commons/codec/EncoderException.class +org/apache/commons/codec/language/ +org/apache/commons/codec/language/AbstractCaverphone.class +org/apache/commons/codec/language/bm/ +org/apache/commons/codec/language/bm/ash_approx_any.txt +org/apache/commons/codec/language/bm/ash_approx_common.txt +org/apache/commons/codec/language/bm/ash_approx_cyrillic.txt +org/apache/commons/codec/language/bm/ash_approx_english.txt +org/apache/commons/codec/language/bm/ash_approx_french.txt +org/apache/commons/codec/language/bm/ash_approx_german.txt +org/apache/commons/codec/language/bm/ash_approx_hebrew.txt +org/apache/commons/codec/language/bm/ash_approx_hungarian.txt +org/apache/commons/codec/language/bm/ash_approx_polish.txt +org/apache/commons/codec/language/bm/ash_approx_romanian.txt +org/apache/commons/codec/language/bm/ash_approx_russian.txt +org/apache/commons/codec/language/bm/ash_approx_spanish.txt +org/apache/commons/codec/language/bm/ash_exact_any.txt +org/apache/commons/codec/language/bm/ash_exact_approx_common.txt +org/apache/commons/codec/language/bm/ash_exact_common.txt +org/apache/commons/codec/language/bm/ash_exact_cyrillic.txt +org/apache/commons/codec/language/bm/ash_exact_english.txt +org/apache/commons/codec/language/bm/ash_exact_french.txt +org/apache/commons/codec/language/bm/ash_exact_german.txt +org/apache/commons/codec/language/bm/ash_exact_hebrew.txt +org/apache/commons/codec/language/bm/ash_exact_hungarian.txt +org/apache/commons/codec/language/bm/ash_exact_polish.txt +org/apache/commons/codec/language/bm/ash_exact_romanian.txt +org/apache/commons/codec/language/bm/ash_exact_russian.txt +org/apache/commons/codec/language/bm/ash_exact_spanish.txt +org/apache/commons/codec/language/bm/ash_hebrew_common.txt +org/apache/commons/codec/language/bm/ash_languages.txt +org/apache/commons/codec/language/bm/ash_rules_any.txt +org/apache/commons/codec/language/bm/ash_rules_cyrillic.txt +org/apache/commons/codec/language/bm/ash_rules_english.txt +org/apache/commons/codec/language/bm/ash_rules_french.txt +org/apache/commons/codec/language/bm/ash_rules_german.txt +org/apache/commons/codec/language/bm/ash_rules_hebrew.txt +org/apache/commons/codec/language/bm/ash_rules_hungarian.txt +org/apache/commons/codec/language/bm/ash_rules_polish.txt +org/apache/commons/codec/language/bm/ash_rules_romanian.txt +org/apache/commons/codec/language/bm/ash_rules_russian.txt +org/apache/commons/codec/language/bm/ash_rules_spanish.txt +org/apache/commons/codec/language/bm/BeiderMorseEncoder.class +org/apache/commons/codec/language/bm/gen_approx_any.txt +org/apache/commons/codec/language/bm/gen_approx_arabic.txt +org/apache/commons/codec/language/bm/gen_approx_common.txt +org/apache/commons/codec/language/bm/gen_approx_cyrillic.txt +org/apache/commons/codec/language/bm/gen_approx_czech.txt +org/apache/commons/codec/language/bm/gen_approx_dutch.txt +org/apache/commons/codec/language/bm/gen_approx_english.txt +org/apache/commons/codec/language/bm/gen_approx_french.txt +org/apache/commons/codec/language/bm/gen_approx_german.txt +org/apache/commons/codec/language/bm/gen_approx_greek.txt +org/apache/commons/codec/language/bm/gen_approx_greeklatin.txt +org/apache/commons/codec/language/bm/gen_approx_hebrew.txt +org/apache/commons/codec/language/bm/gen_approx_hungarian.txt +org/apache/commons/codec/language/bm/gen_approx_italian.txt +org/apache/commons/codec/language/bm/gen_approx_polish.txt +org/apache/commons/codec/language/bm/gen_approx_portuguese.txt +org/apache/commons/codec/language/bm/gen_approx_romanian.txt +org/apache/commons/codec/language/bm/gen_approx_russian.txt +org/apache/commons/codec/language/bm/gen_approx_spanish.txt +org/apache/commons/codec/language/bm/gen_approx_turkish.txt +org/apache/commons/codec/language/bm/gen_exact_any.txt +org/apache/commons/codec/language/bm/gen_exact_approx_common.txt +org/apache/commons/codec/language/bm/gen_exact_arabic.txt +org/apache/commons/codec/language/bm/gen_exact_common.txt +org/apache/commons/codec/language/bm/gen_exact_cyrillic.txt +org/apache/commons/codec/language/bm/gen_exact_czech.txt +org/apache/commons/codec/language/bm/gen_exact_dutch.txt +org/apache/commons/codec/language/bm/gen_exact_english.txt +org/apache/commons/codec/language/bm/gen_exact_french.txt +org/apache/commons/codec/language/bm/gen_exact_german.txt +org/apache/commons/codec/language/bm/gen_exact_greek.txt +org/apache/commons/codec/language/bm/gen_exact_greeklatin.txt +org/apache/commons/codec/language/bm/gen_exact_hebrew.txt +org/apache/commons/codec/language/bm/gen_exact_hungarian.txt +org/apache/commons/codec/language/bm/gen_exact_italian.txt +org/apache/commons/codec/language/bm/gen_exact_polish.txt +org/apache/commons/codec/language/bm/gen_exact_portuguese.txt +org/apache/commons/codec/language/bm/gen_exact_romanian.txt +org/apache/commons/codec/language/bm/gen_exact_russian.txt +org/apache/commons/codec/language/bm/gen_exact_spanish.txt +org/apache/commons/codec/language/bm/gen_exact_turkish.txt +org/apache/commons/codec/language/bm/gen_hebrew_common.txt +org/apache/commons/codec/language/bm/gen_languages.txt +org/apache/commons/codec/language/bm/gen_rules_any.txt +org/apache/commons/codec/language/bm/gen_rules_arabic.txt +org/apache/commons/codec/language/bm/gen_rules_cyrillic.txt +org/apache/commons/codec/language/bm/gen_rules_czech.txt +org/apache/commons/codec/language/bm/gen_rules_dutch.txt +org/apache/commons/codec/language/bm/gen_rules_english.txt +org/apache/commons/codec/language/bm/gen_rules_french.txt +org/apache/commons/codec/language/bm/gen_rules_german.txt +org/apache/commons/codec/language/bm/gen_rules_greek.txt +org/apache/commons/codec/language/bm/gen_rules_greeklatin.txt +org/apache/commons/codec/language/bm/gen_rules_hebrew.txt +org/apache/commons/codec/language/bm/gen_rules_hungarian.txt +org/apache/commons/codec/language/bm/gen_rules_italian.txt +org/apache/commons/codec/language/bm/gen_rules_polish.txt +org/apache/commons/codec/language/bm/gen_rules_portuguese.txt +org/apache/commons/codec/language/bm/gen_rules_romanian.txt +org/apache/commons/codec/language/bm/gen_rules_russian.txt +org/apache/commons/codec/language/bm/gen_rules_spanish.txt +org/apache/commons/codec/language/bm/gen_rules_turkish.txt +org/apache/commons/codec/language/bm/Lang$1.class +org/apache/commons/codec/language/bm/Lang$LangRule.class +org/apache/commons/codec/language/bm/Lang.class +org/apache/commons/codec/language/bm/lang.txt +org/apache/commons/codec/language/bm/Languages$1.class +org/apache/commons/codec/language/bm/Languages$2.class +org/apache/commons/codec/language/bm/Languages$LanguageSet.class +org/apache/commons/codec/language/bm/Languages$SomeLanguages.class +org/apache/commons/codec/language/bm/Languages.class +org/apache/commons/codec/language/bm/NameType.class +org/apache/commons/codec/language/bm/PhoneticEngine$1.class +org/apache/commons/codec/language/bm/PhoneticEngine$PhonemeBuilder.class +org/apache/commons/codec/language/bm/PhoneticEngine$RulesApplication.class +org/apache/commons/codec/language/bm/PhoneticEngine.class +org/apache/commons/codec/language/bm/ResourceConstants.class +org/apache/commons/codec/language/bm/Rule$1.class +org/apache/commons/codec/language/bm/Rule$10.class +org/apache/commons/codec/language/bm/Rule$2.class +org/apache/commons/codec/language/bm/Rule$3.class +org/apache/commons/codec/language/bm/Rule$4.class +org/apache/commons/codec/language/bm/Rule$5.class +org/apache/commons/codec/language/bm/Rule$6.class +org/apache/commons/codec/language/bm/Rule$7.class +org/apache/commons/codec/language/bm/Rule$8.class +org/apache/commons/codec/language/bm/Rule$9.class +org/apache/commons/codec/language/bm/Rule$Phoneme$1.class +org/apache/commons/codec/language/bm/Rule$Phoneme.class +org/apache/commons/codec/language/bm/Rule$PhonemeExpr.class +org/apache/commons/codec/language/bm/Rule$PhonemeList.class +org/apache/commons/codec/language/bm/Rule$RPattern.class +org/apache/commons/codec/language/bm/Rule.class +org/apache/commons/codec/language/bm/RuleType.class +org/apache/commons/codec/language/bm/sep_approx_any.txt +org/apache/commons/codec/language/bm/sep_approx_common.txt +org/apache/commons/codec/language/bm/sep_approx_french.txt +org/apache/commons/codec/language/bm/sep_approx_hebrew.txt +org/apache/commons/codec/language/bm/sep_approx_italian.txt +org/apache/commons/codec/language/bm/sep_approx_portuguese.txt +org/apache/commons/codec/language/bm/sep_approx_spanish.txt +org/apache/commons/codec/language/bm/sep_exact_any.txt +org/apache/commons/codec/language/bm/sep_exact_approx_common.txt +org/apache/commons/codec/language/bm/sep_exact_common.txt +org/apache/commons/codec/language/bm/sep_exact_french.txt +org/apache/commons/codec/language/bm/sep_exact_hebrew.txt +org/apache/commons/codec/language/bm/sep_exact_italian.txt +org/apache/commons/codec/language/bm/sep_exact_portuguese.txt +org/apache/commons/codec/language/bm/sep_exact_spanish.txt +org/apache/commons/codec/language/bm/sep_hebrew_common.txt +org/apache/commons/codec/language/bm/sep_languages.txt +org/apache/commons/codec/language/bm/sep_rules_any.txt +org/apache/commons/codec/language/bm/sep_rules_french.txt +org/apache/commons/codec/language/bm/sep_rules_hebrew.txt +org/apache/commons/codec/language/bm/sep_rules_italian.txt +org/apache/commons/codec/language/bm/sep_rules_portuguese.txt +org/apache/commons/codec/language/bm/sep_rules_spanish.txt +org/apache/commons/codec/language/Caverphone.class +org/apache/commons/codec/language/Caverphone1.class +org/apache/commons/codec/language/Caverphone2.class +org/apache/commons/codec/language/ColognePhonetic$CologneBuffer.class +org/apache/commons/codec/language/ColognePhonetic$CologneInputBuffer.class +org/apache/commons/codec/language/ColognePhonetic$CologneOutputBuffer.class +org/apache/commons/codec/language/ColognePhonetic.class +org/apache/commons/codec/language/DoubleMetaphone$DoubleMetaphoneResult.class +org/apache/commons/codec/language/DoubleMetaphone.class +org/apache/commons/codec/language/MatchRatingApproachEncoder.class +org/apache/commons/codec/language/Metaphone.class +org/apache/commons/codec/language/Nysiis.class +org/apache/commons/codec/language/RefinedSoundex.class +org/apache/commons/codec/language/Soundex.class +org/apache/commons/codec/language/SoundexUtils.class +org/apache/commons/codec/net/ +org/apache/commons/codec/net/BCodec.class +org/apache/commons/codec/net/QCodec.class +org/apache/commons/codec/net/QuotedPrintableCodec.class +org/apache/commons/codec/net/RFC1522Codec.class +org/apache/commons/codec/net/URLCodec.class +org/apache/commons/codec/net/Utils.class +org/apache/commons/codec/StringDecoder.class +org/apache/commons/codec/StringEncoder.class +org/apache/commons/codec/StringEncoderComparator.class +META-INF/maven/commons-codec/ +META-INF/maven/commons-codec/commons-codec/ +META-INF/maven/commons-codec/commons-codec/pom.xml +META-INF/maven/commons-codec/commons-codec/pom.properties +META-INF/maven/com.fasterxml.jackson.core/ +META-INF/maven/com.fasterxml.jackson.core/jackson-core/ +META-INF/maven/com.fasterxml.jackson.core/jackson-core/pom.properties +META-INF/maven/com.fasterxml.jackson.core/jackson-core/pom.xml +META-INF/services/ +META-INF/services/com.fasterxml.jackson.core.JsonFactory +com/fasterxml/ +com/fasterxml/jackson/ +com/fasterxml/jackson/core/ +com/fasterxml/jackson/core/Base64Variant.class +com/fasterxml/jackson/core/Base64Variants.class +com/fasterxml/jackson/core/FormatFeature.class +com/fasterxml/jackson/core/FormatSchema.class +com/fasterxml/jackson/core/JsonEncoding.class +com/fasterxml/jackson/core/JsonFactory$Feature.class +com/fasterxml/jackson/core/JsonFactory.class +com/fasterxml/jackson/core/JsonGenerationException.class +com/fasterxml/jackson/core/JsonGenerator$1.class +com/fasterxml/jackson/core/JsonGenerator$Feature.class +com/fasterxml/jackson/core/JsonGenerator.class +com/fasterxml/jackson/core/JsonLocation.class +com/fasterxml/jackson/core/JsonParseException.class +com/fasterxml/jackson/core/JsonParser$Feature.class +com/fasterxml/jackson/core/JsonParser$NumberType.class +com/fasterxml/jackson/core/JsonParser.class +com/fasterxml/jackson/core/JsonPointer.class +com/fasterxml/jackson/core/JsonProcessingException.class +com/fasterxml/jackson/core/JsonStreamContext.class +com/fasterxml/jackson/core/JsonToken.class +com/fasterxml/jackson/core/JsonTokenId.class +com/fasterxml/jackson/core/JsonpCharacterEscapes.class +com/fasterxml/jackson/core/ObjectCodec.class +com/fasterxml/jackson/core/PrettyPrinter.class +com/fasterxml/jackson/core/SerializableString.class +com/fasterxml/jackson/core/TreeCodec.class +com/fasterxml/jackson/core/TreeNode.class +com/fasterxml/jackson/core/Version.class +com/fasterxml/jackson/core/Versioned.class +com/fasterxml/jackson/core/async/ +com/fasterxml/jackson/core/async/ByteArrayFeeder.class +com/fasterxml/jackson/core/async/ByteBufferFeeder.class +com/fasterxml/jackson/core/async/NonBlockingInputFeeder.class +com/fasterxml/jackson/core/base/ +com/fasterxml/jackson/core/base/GeneratorBase.class +com/fasterxml/jackson/core/base/ParserBase.class +com/fasterxml/jackson/core/base/ParserMinimalBase.class +com/fasterxml/jackson/core/filter/ +com/fasterxml/jackson/core/filter/FilteringGeneratorDelegate.class +com/fasterxml/jackson/core/filter/FilteringParserDelegate.class +com/fasterxml/jackson/core/filter/JsonPointerBasedFilter.class +com/fasterxml/jackson/core/filter/TokenFilter.class +com/fasterxml/jackson/core/filter/TokenFilterContext.class +com/fasterxml/jackson/core/format/ +com/fasterxml/jackson/core/format/DataFormatDetector.class +com/fasterxml/jackson/core/format/DataFormatMatcher.class +com/fasterxml/jackson/core/format/InputAccessor$Std.class +com/fasterxml/jackson/core/format/InputAccessor.class +com/fasterxml/jackson/core/format/MatchStrength.class +com/fasterxml/jackson/core/io/ +com/fasterxml/jackson/core/io/CharTypes.class +com/fasterxml/jackson/core/io/CharacterEscapes.class +com/fasterxml/jackson/core/io/DataOutputAsStream.class +com/fasterxml/jackson/core/io/IOContext.class +com/fasterxml/jackson/core/io/InputDecorator.class +com/fasterxml/jackson/core/io/JsonEOFException.class +com/fasterxml/jackson/core/io/JsonStringEncoder.class +com/fasterxml/jackson/core/io/MergedStream.class +com/fasterxml/jackson/core/io/NumberInput.class +com/fasterxml/jackson/core/io/NumberOutput.class +com/fasterxml/jackson/core/io/OutputDecorator.class +com/fasterxml/jackson/core/io/SegmentedStringWriter.class +com/fasterxml/jackson/core/io/SerializedString.class +com/fasterxml/jackson/core/io/UTF32Reader.class +com/fasterxml/jackson/core/io/UTF8Writer.class +com/fasterxml/jackson/core/json/ +com/fasterxml/jackson/core/json/ByteSourceJsonBootstrapper.class +com/fasterxml/jackson/core/json/DupDetector.class +com/fasterxml/jackson/core/json/JsonGeneratorImpl.class +com/fasterxml/jackson/core/json/JsonReadContext.class +com/fasterxml/jackson/core/json/JsonWriteContext.class +com/fasterxml/jackson/core/json/PackageVersion.class +com/fasterxml/jackson/core/json/ReaderBasedJsonParser.class +com/fasterxml/jackson/core/json/UTF8DataInputJsonParser.class +com/fasterxml/jackson/core/json/UTF8JsonGenerator.class +com/fasterxml/jackson/core/json/UTF8StreamJsonParser.class +com/fasterxml/jackson/core/json/WriterBasedJsonGenerator.class +com/fasterxml/jackson/core/json/async/ +com/fasterxml/jackson/core/json/async/NonBlockingJsonParser.class +com/fasterxml/jackson/core/json/async/NonBlockingJsonParserBase.class +com/fasterxml/jackson/core/sym/ +com/fasterxml/jackson/core/sym/ByteQuadsCanonicalizer$TableInfo.class +com/fasterxml/jackson/core/sym/ByteQuadsCanonicalizer.class +com/fasterxml/jackson/core/sym/CharsToNameCanonicalizer$Bucket.class +com/fasterxml/jackson/core/sym/CharsToNameCanonicalizer$TableInfo.class +com/fasterxml/jackson/core/sym/CharsToNameCanonicalizer.class +com/fasterxml/jackson/core/sym/Name.class +com/fasterxml/jackson/core/sym/Name1.class +com/fasterxml/jackson/core/sym/Name2.class +com/fasterxml/jackson/core/sym/Name3.class +com/fasterxml/jackson/core/sym/NameN.class +com/fasterxml/jackson/core/type/ +com/fasterxml/jackson/core/type/ResolvedType.class +com/fasterxml/jackson/core/type/TypeReference.class +com/fasterxml/jackson/core/type/WritableTypeId$Inclusion.class +com/fasterxml/jackson/core/type/WritableTypeId.class +com/fasterxml/jackson/core/util/ +com/fasterxml/jackson/core/util/BufferRecycler.class +com/fasterxml/jackson/core/util/BufferRecyclers.class +com/fasterxml/jackson/core/util/ByteArrayBuilder.class +com/fasterxml/jackson/core/util/DefaultIndenter.class +com/fasterxml/jackson/core/util/DefaultPrettyPrinter$FixedSpaceIndenter.class +com/fasterxml/jackson/core/util/DefaultPrettyPrinter$Indenter.class +com/fasterxml/jackson/core/util/DefaultPrettyPrinter$NopIndenter.class +com/fasterxml/jackson/core/util/DefaultPrettyPrinter.class +com/fasterxml/jackson/core/util/Instantiatable.class +com/fasterxml/jackson/core/util/InternCache.class +com/fasterxml/jackson/core/util/JsonGeneratorDelegate.class +com/fasterxml/jackson/core/util/JsonParserDelegate.class +com/fasterxml/jackson/core/util/JsonParserSequence.class +com/fasterxml/jackson/core/util/MinimalPrettyPrinter.class +com/fasterxml/jackson/core/util/RequestPayload.class +com/fasterxml/jackson/core/util/Separators.class +com/fasterxml/jackson/core/util/TextBuffer.class +com/fasterxml/jackson/core/util/ThreadLocalBufferManager$ThreadLocalBufferManagerHolder.class +com/fasterxml/jackson/core/util/ThreadLocalBufferManager.class +com/fasterxml/jackson/core/util/VersionUtil.class +META-INF/maven/com.fasterxml.jackson.core/jackson-annotations/ +META-INF/maven/com.fasterxml.jackson.core/jackson-annotations/pom.properties +META-INF/maven/com.fasterxml.jackson.core/jackson-annotations/pom.xml +com/fasterxml/jackson/annotation/ +com/fasterxml/jackson/annotation/JacksonAnnotation.class +com/fasterxml/jackson/annotation/JacksonAnnotationValue.class +com/fasterxml/jackson/annotation/JacksonAnnotationsInside.class +com/fasterxml/jackson/annotation/JacksonInject$Value.class +com/fasterxml/jackson/annotation/JacksonInject.class +com/fasterxml/jackson/annotation/JsonAlias.class +com/fasterxml/jackson/annotation/JsonAnyGetter.class +com/fasterxml/jackson/annotation/JsonAnySetter.class +com/fasterxml/jackson/annotation/JsonAutoDetect$1.class +com/fasterxml/jackson/annotation/JsonAutoDetect$Value.class +com/fasterxml/jackson/annotation/JsonAutoDetect$Visibility.class +com/fasterxml/jackson/annotation/JsonAutoDetect.class +com/fasterxml/jackson/annotation/JsonBackReference.class +com/fasterxml/jackson/annotation/JsonClassDescription.class +com/fasterxml/jackson/annotation/JsonCreator$Mode.class +com/fasterxml/jackson/annotation/JsonCreator.class +com/fasterxml/jackson/annotation/JsonEnumDefaultValue.class +com/fasterxml/jackson/annotation/JsonFilter.class +com/fasterxml/jackson/annotation/JsonFormat$Feature.class +com/fasterxml/jackson/annotation/JsonFormat$Features.class +com/fasterxml/jackson/annotation/JsonFormat$Shape.class +com/fasterxml/jackson/annotation/JsonFormat$Value.class +com/fasterxml/jackson/annotation/JsonFormat.class +com/fasterxml/jackson/annotation/JsonGetter.class +com/fasterxml/jackson/annotation/JsonIdentityInfo.class +com/fasterxml/jackson/annotation/JsonIdentityReference.class +com/fasterxml/jackson/annotation/JsonIgnore.class +com/fasterxml/jackson/annotation/JsonIgnoreProperties$Value.class +com/fasterxml/jackson/annotation/JsonIgnoreProperties.class +com/fasterxml/jackson/annotation/JsonIgnoreType.class +com/fasterxml/jackson/annotation/JsonInclude$Include.class +com/fasterxml/jackson/annotation/JsonInclude$Value.class +com/fasterxml/jackson/annotation/JsonInclude.class +com/fasterxml/jackson/annotation/JsonManagedReference.class +com/fasterxml/jackson/annotation/JsonMerge.class +com/fasterxml/jackson/annotation/JsonProperty$Access.class +com/fasterxml/jackson/annotation/JsonProperty.class +com/fasterxml/jackson/annotation/JsonPropertyDescription.class +com/fasterxml/jackson/annotation/JsonPropertyOrder.class +com/fasterxml/jackson/annotation/JsonRawValue.class +com/fasterxml/jackson/annotation/JsonRootName.class +com/fasterxml/jackson/annotation/JsonSetter$Value.class +com/fasterxml/jackson/annotation/JsonSetter.class +com/fasterxml/jackson/annotation/JsonSubTypes$Type.class +com/fasterxml/jackson/annotation/JsonSubTypes.class +com/fasterxml/jackson/annotation/JsonTypeId.class +com/fasterxml/jackson/annotation/JsonTypeInfo$As.class +com/fasterxml/jackson/annotation/JsonTypeInfo$Id.class +com/fasterxml/jackson/annotation/JsonTypeInfo$None.class +com/fasterxml/jackson/annotation/JsonTypeInfo.class +com/fasterxml/jackson/annotation/JsonTypeName.class +com/fasterxml/jackson/annotation/JsonUnwrapped.class +com/fasterxml/jackson/annotation/JsonValue.class +com/fasterxml/jackson/annotation/JsonView.class +com/fasterxml/jackson/annotation/Nulls.class +com/fasterxml/jackson/annotation/ObjectIdGenerator$IdKey.class +com/fasterxml/jackson/annotation/ObjectIdGenerator.class +com/fasterxml/jackson/annotation/ObjectIdGenerators$Base.class +com/fasterxml/jackson/annotation/ObjectIdGenerators$IntSequenceGenerator.class +com/fasterxml/jackson/annotation/ObjectIdGenerators$None.class +com/fasterxml/jackson/annotation/ObjectIdGenerators$PropertyGenerator.class +com/fasterxml/jackson/annotation/ObjectIdGenerators$StringIdGenerator.class +com/fasterxml/jackson/annotation/ObjectIdGenerators$UUIDGenerator.class +com/fasterxml/jackson/annotation/ObjectIdGenerators.class +com/fasterxml/jackson/annotation/ObjectIdResolver.class +com/fasterxml/jackson/annotation/OptBoolean.class +com/fasterxml/jackson/annotation/PropertyAccessor.class +com/fasterxml/jackson/annotation/SimpleObjectIdResolver.class +META-INF/maven/com.fasterxml.jackson.core/jackson-databind/ +META-INF/maven/com.fasterxml.jackson.core/jackson-databind/pom.properties +META-INF/maven/com.fasterxml.jackson.core/jackson-databind/pom.xml +META-INF/services/com.fasterxml.jackson.core.ObjectCodec +com/fasterxml/jackson/databind/ +com/fasterxml/jackson/databind/AbstractTypeResolver.class +com/fasterxml/jackson/databind/AnnotationIntrospector$ReferenceProperty$Type.class +com/fasterxml/jackson/databind/AnnotationIntrospector$ReferenceProperty.class +com/fasterxml/jackson/databind/AnnotationIntrospector.class +com/fasterxml/jackson/databind/BeanDescription.class +com/fasterxml/jackson/databind/BeanProperty$Bogus.class +com/fasterxml/jackson/databind/BeanProperty$Std.class +com/fasterxml/jackson/databind/BeanProperty.class +com/fasterxml/jackson/databind/DatabindContext.class +com/fasterxml/jackson/databind/DeserializationConfig.class +com/fasterxml/jackson/databind/DeserializationContext.class +com/fasterxml/jackson/databind/DeserializationFeature.class +com/fasterxml/jackson/databind/InjectableValues$Std.class +com/fasterxml/jackson/databind/InjectableValues.class +com/fasterxml/jackson/databind/JavaType.class +com/fasterxml/jackson/databind/JsonDeserializer$None.class +com/fasterxml/jackson/databind/JsonDeserializer.class +com/fasterxml/jackson/databind/JsonMappingException$Reference.class +com/fasterxml/jackson/databind/JsonMappingException.class +com/fasterxml/jackson/databind/JsonNode$1.class +com/fasterxml/jackson/databind/JsonNode.class +com/fasterxml/jackson/databind/JsonSerializable$Base.class +com/fasterxml/jackson/databind/JsonSerializable.class +com/fasterxml/jackson/databind/JsonSerializer$None.class +com/fasterxml/jackson/databind/JsonSerializer.class +com/fasterxml/jackson/databind/KeyDeserializer$None.class +com/fasterxml/jackson/databind/KeyDeserializer.class +com/fasterxml/jackson/databind/MapperFeature.class +com/fasterxml/jackson/databind/MappingIterator.class +com/fasterxml/jackson/databind/MappingJsonFactory.class +com/fasterxml/jackson/databind/Module$SetupContext.class +com/fasterxml/jackson/databind/Module.class +com/fasterxml/jackson/databind/ObjectMapper$1.class +com/fasterxml/jackson/databind/ObjectMapper$2.class +com/fasterxml/jackson/databind/ObjectMapper$3.class +com/fasterxml/jackson/databind/ObjectMapper$DefaultTypeResolverBuilder.class +com/fasterxml/jackson/databind/ObjectMapper$DefaultTyping.class +com/fasterxml/jackson/databind/ObjectMapper.class +com/fasterxml/jackson/databind/ObjectReader.class +com/fasterxml/jackson/databind/ObjectWriter$GeneratorSettings.class +com/fasterxml/jackson/databind/ObjectWriter$Prefetch.class +com/fasterxml/jackson/databind/ObjectWriter.class +com/fasterxml/jackson/databind/PropertyMetadata$MergeInfo.class +com/fasterxml/jackson/databind/PropertyMetadata.class +com/fasterxml/jackson/databind/PropertyName.class +com/fasterxml/jackson/databind/PropertyNamingStrategy$KebabCaseStrategy.class +com/fasterxml/jackson/databind/PropertyNamingStrategy$LowerCaseStrategy.class +com/fasterxml/jackson/databind/PropertyNamingStrategy$LowerCaseWithUnderscoresStrategy.class +com/fasterxml/jackson/databind/PropertyNamingStrategy$PascalCaseStrategy.class +com/fasterxml/jackson/databind/PropertyNamingStrategy$PropertyNamingStrategyBase.class +com/fasterxml/jackson/databind/PropertyNamingStrategy$SnakeCaseStrategy.class +com/fasterxml/jackson/databind/PropertyNamingStrategy$UpperCamelCaseStrategy.class +com/fasterxml/jackson/databind/PropertyNamingStrategy.class +com/fasterxml/jackson/databind/RuntimeJsonMappingException.class +com/fasterxml/jackson/databind/SequenceWriter.class +com/fasterxml/jackson/databind/SerializationConfig.class +com/fasterxml/jackson/databind/SerializationFeature.class +com/fasterxml/jackson/databind/SerializerProvider.class +com/fasterxml/jackson/databind/annotation/ +com/fasterxml/jackson/databind/annotation/JacksonStdImpl.class +com/fasterxml/jackson/databind/annotation/JsonAppend$Attr.class +com/fasterxml/jackson/databind/annotation/JsonAppend$Prop.class +com/fasterxml/jackson/databind/annotation/JsonAppend.class +com/fasterxml/jackson/databind/annotation/JsonDeserialize.class +com/fasterxml/jackson/databind/annotation/JsonNaming.class +com/fasterxml/jackson/databind/annotation/JsonPOJOBuilder$Value.class +com/fasterxml/jackson/databind/annotation/JsonPOJOBuilder.class +com/fasterxml/jackson/databind/annotation/JsonSerialize$Inclusion.class +com/fasterxml/jackson/databind/annotation/JsonSerialize$Typing.class +com/fasterxml/jackson/databind/annotation/JsonSerialize.class +com/fasterxml/jackson/databind/annotation/JsonTypeIdResolver.class +com/fasterxml/jackson/databind/annotation/JsonTypeResolver.class +com/fasterxml/jackson/databind/annotation/JsonValueInstantiator.class +com/fasterxml/jackson/databind/annotation/NoClass.class +com/fasterxml/jackson/databind/cfg/ +com/fasterxml/jackson/databind/cfg/BaseSettings.class +com/fasterxml/jackson/databind/cfg/ConfigFeature.class +com/fasterxml/jackson/databind/cfg/ConfigOverride$Empty.class +com/fasterxml/jackson/databind/cfg/ConfigOverride.class +com/fasterxml/jackson/databind/cfg/ConfigOverrides.class +com/fasterxml/jackson/databind/cfg/ContextAttributes$Impl.class +com/fasterxml/jackson/databind/cfg/ContextAttributes.class +com/fasterxml/jackson/databind/cfg/DeserializerFactoryConfig.class +com/fasterxml/jackson/databind/cfg/HandlerInstantiator.class +com/fasterxml/jackson/databind/cfg/MapperConfig.class +com/fasterxml/jackson/databind/cfg/MapperConfigBase.class +com/fasterxml/jackson/databind/cfg/MutableConfigOverride.class +com/fasterxml/jackson/databind/cfg/PackageVersion.class +com/fasterxml/jackson/databind/cfg/SerializerFactoryConfig.class +com/fasterxml/jackson/databind/deser/ +com/fasterxml/jackson/databind/deser/AbstractDeserializer.class +com/fasterxml/jackson/databind/deser/BasicDeserializerFactory$1.class +com/fasterxml/jackson/databind/deser/BasicDeserializerFactory.class +com/fasterxml/jackson/databind/deser/BeanDeserializer$1.class +com/fasterxml/jackson/databind/deser/BeanDeserializer$BeanReferring.class +com/fasterxml/jackson/databind/deser/BeanDeserializer.class +com/fasterxml/jackson/databind/deser/BeanDeserializerBase.class +com/fasterxml/jackson/databind/deser/BeanDeserializerBuilder.class +com/fasterxml/jackson/databind/deser/BeanDeserializerFactory.class +com/fasterxml/jackson/databind/deser/BeanDeserializerModifier.class +com/fasterxml/jackson/databind/deser/BuilderBasedDeserializer.class +com/fasterxml/jackson/databind/deser/ContextualDeserializer.class +com/fasterxml/jackson/databind/deser/ContextualKeyDeserializer.class +com/fasterxml/jackson/databind/deser/CreatorProperty.class +com/fasterxml/jackson/databind/deser/DataFormatReaders$AccessorForReader.class +com/fasterxml/jackson/databind/deser/DataFormatReaders$Match.class +com/fasterxml/jackson/databind/deser/DataFormatReaders.class +com/fasterxml/jackson/databind/deser/DefaultDeserializationContext$Impl.class +com/fasterxml/jackson/databind/deser/DefaultDeserializationContext.class +com/fasterxml/jackson/databind/deser/DeserializationProblemHandler.class +com/fasterxml/jackson/databind/deser/DeserializerCache.class +com/fasterxml/jackson/databind/deser/DeserializerFactory.class +com/fasterxml/jackson/databind/deser/Deserializers$Base.class +com/fasterxml/jackson/databind/deser/Deserializers.class +com/fasterxml/jackson/databind/deser/KeyDeserializers.class +com/fasterxml/jackson/databind/deser/NullValueProvider.class +com/fasterxml/jackson/databind/deser/ResolvableDeserializer.class +com/fasterxml/jackson/databind/deser/SettableAnyProperty$AnySetterReferring.class +com/fasterxml/jackson/databind/deser/SettableAnyProperty.class +com/fasterxml/jackson/databind/deser/SettableBeanProperty$Delegating.class +com/fasterxml/jackson/databind/deser/SettableBeanProperty.class +com/fasterxml/jackson/databind/deser/UnresolvedForwardReference.class +com/fasterxml/jackson/databind/deser/UnresolvedId.class +com/fasterxml/jackson/databind/deser/ValueInstantiator$Base.class +com/fasterxml/jackson/databind/deser/ValueInstantiator$Gettable.class +com/fasterxml/jackson/databind/deser/ValueInstantiator.class +com/fasterxml/jackson/databind/deser/ValueInstantiators$Base.class +com/fasterxml/jackson/databind/deser/ValueInstantiators.class +com/fasterxml/jackson/databind/deser/impl/ +com/fasterxml/jackson/databind/deser/impl/BeanAsArrayBuilderDeserializer.class +com/fasterxml/jackson/databind/deser/impl/BeanAsArrayDeserializer.class +com/fasterxml/jackson/databind/deser/impl/BeanPropertyMap.class +com/fasterxml/jackson/databind/deser/impl/CreatorCandidate$Param.class +com/fasterxml/jackson/databind/deser/impl/CreatorCandidate.class +com/fasterxml/jackson/databind/deser/impl/CreatorCollector$StdTypeConstructor.class +com/fasterxml/jackson/databind/deser/impl/CreatorCollector.class +com/fasterxml/jackson/databind/deser/impl/ErrorThrowingDeserializer.class +com/fasterxml/jackson/databind/deser/impl/ExternalTypeHandler$Builder.class +com/fasterxml/jackson/databind/deser/impl/ExternalTypeHandler$ExtTypedProperty.class +com/fasterxml/jackson/databind/deser/impl/ExternalTypeHandler.class +com/fasterxml/jackson/databind/deser/impl/FailingDeserializer.class +com/fasterxml/jackson/databind/deser/impl/FieldProperty.class +com/fasterxml/jackson/databind/deser/impl/InnerClassProperty.class +com/fasterxml/jackson/databind/deser/impl/JavaUtilCollectionsDeserializers$1.class +com/fasterxml/jackson/databind/deser/impl/JavaUtilCollectionsDeserializers$JavaUtilCollectionsConverter.class +com/fasterxml/jackson/databind/deser/impl/JavaUtilCollectionsDeserializers.class +com/fasterxml/jackson/databind/deser/impl/ManagedReferenceProperty.class +com/fasterxml/jackson/databind/deser/impl/MergingSettableBeanProperty.class +com/fasterxml/jackson/databind/deser/impl/MethodProperty.class +com/fasterxml/jackson/databind/deser/impl/NullsAsEmptyProvider.class +com/fasterxml/jackson/databind/deser/impl/NullsConstantProvider.class +com/fasterxml/jackson/databind/deser/impl/NullsFailProvider.class +com/fasterxml/jackson/databind/deser/impl/ObjectIdReader.class +com/fasterxml/jackson/databind/deser/impl/ObjectIdReferenceProperty$PropertyReferring.class +com/fasterxml/jackson/databind/deser/impl/ObjectIdReferenceProperty.class +com/fasterxml/jackson/databind/deser/impl/ObjectIdValueProperty.class +com/fasterxml/jackson/databind/deser/impl/PropertyBasedCreator$CaseInsensitiveMap.class +com/fasterxml/jackson/databind/deser/impl/PropertyBasedCreator.class +com/fasterxml/jackson/databind/deser/impl/PropertyBasedObjectIdGenerator.class +com/fasterxml/jackson/databind/deser/impl/PropertyValue$Any.class +com/fasterxml/jackson/databind/deser/impl/PropertyValue$Map.class +com/fasterxml/jackson/databind/deser/impl/PropertyValue$Regular.class +com/fasterxml/jackson/databind/deser/impl/PropertyValue.class +com/fasterxml/jackson/databind/deser/impl/PropertyValueBuffer.class +com/fasterxml/jackson/databind/deser/impl/ReadableObjectId$Referring.class +com/fasterxml/jackson/databind/deser/impl/ReadableObjectId.class +com/fasterxml/jackson/databind/deser/impl/SetterlessProperty.class +com/fasterxml/jackson/databind/deser/impl/TypeWrappedDeserializer.class +com/fasterxml/jackson/databind/deser/impl/UnwrappedPropertyHandler.class +com/fasterxml/jackson/databind/deser/impl/ValueInjector.class +com/fasterxml/jackson/databind/deser/std/ +com/fasterxml/jackson/databind/deser/std/ArrayBlockingQueueDeserializer.class +com/fasterxml/jackson/databind/deser/std/AtomicBooleanDeserializer.class +com/fasterxml/jackson/databind/deser/std/AtomicReferenceDeserializer.class +com/fasterxml/jackson/databind/deser/std/BaseNodeDeserializer.class +com/fasterxml/jackson/databind/deser/std/ByteBufferDeserializer.class +com/fasterxml/jackson/databind/deser/std/CollectionDeserializer$CollectionReferring.class +com/fasterxml/jackson/databind/deser/std/CollectionDeserializer$CollectionReferringAccumulator.class +com/fasterxml/jackson/databind/deser/std/CollectionDeserializer.class +com/fasterxml/jackson/databind/deser/std/ContainerDeserializerBase.class +com/fasterxml/jackson/databind/deser/std/DateDeserializers$CalendarDeserializer.class +com/fasterxml/jackson/databind/deser/std/DateDeserializers$DateBasedDeserializer.class +com/fasterxml/jackson/databind/deser/std/DateDeserializers$DateDeserializer.class +com/fasterxml/jackson/databind/deser/std/DateDeserializers$SqlDateDeserializer.class +com/fasterxml/jackson/databind/deser/std/DateDeserializers$TimestampDeserializer.class +com/fasterxml/jackson/databind/deser/std/DateDeserializers.class +com/fasterxml/jackson/databind/deser/std/DelegatingDeserializer.class +com/fasterxml/jackson/databind/deser/std/EnumDeserializer.class +com/fasterxml/jackson/databind/deser/std/EnumMapDeserializer.class +com/fasterxml/jackson/databind/deser/std/EnumSetDeserializer.class +com/fasterxml/jackson/databind/deser/std/FactoryBasedEnumDeserializer.class +com/fasterxml/jackson/databind/deser/std/FromStringDeserializer$Std.class +com/fasterxml/jackson/databind/deser/std/FromStringDeserializer.class +com/fasterxml/jackson/databind/deser/std/JdkDeserializers.class +com/fasterxml/jackson/databind/deser/std/JsonLocationInstantiator.class +com/fasterxml/jackson/databind/deser/std/JsonNodeDeserializer$ArrayDeserializer.class +com/fasterxml/jackson/databind/deser/std/JsonNodeDeserializer$ObjectDeserializer.class +com/fasterxml/jackson/databind/deser/std/JsonNodeDeserializer.class +com/fasterxml/jackson/databind/deser/std/MapDeserializer$MapReferring.class +com/fasterxml/jackson/databind/deser/std/MapDeserializer$MapReferringAccumulator.class +com/fasterxml/jackson/databind/deser/std/MapDeserializer.class +com/fasterxml/jackson/databind/deser/std/MapEntryDeserializer.class +com/fasterxml/jackson/databind/deser/std/NullifyingDeserializer.class +com/fasterxml/jackson/databind/deser/std/NumberDeserializers$1.class +com/fasterxml/jackson/databind/deser/std/NumberDeserializers$BigDecimalDeserializer.class +com/fasterxml/jackson/databind/deser/std/NumberDeserializers$BigIntegerDeserializer.class +com/fasterxml/jackson/databind/deser/std/NumberDeserializers$BooleanDeserializer.class +com/fasterxml/jackson/databind/deser/std/NumberDeserializers$ByteDeserializer.class +com/fasterxml/jackson/databind/deser/std/NumberDeserializers$CharacterDeserializer.class +com/fasterxml/jackson/databind/deser/std/NumberDeserializers$DoubleDeserializer.class +com/fasterxml/jackson/databind/deser/std/NumberDeserializers$FloatDeserializer.class +com/fasterxml/jackson/databind/deser/std/NumberDeserializers$IntegerDeserializer.class +com/fasterxml/jackson/databind/deser/std/NumberDeserializers$LongDeserializer.class +com/fasterxml/jackson/databind/deser/std/NumberDeserializers$NumberDeserializer.class +com/fasterxml/jackson/databind/deser/std/NumberDeserializers$PrimitiveOrWrapperDeserializer.class +com/fasterxml/jackson/databind/deser/std/NumberDeserializers$ShortDeserializer.class +com/fasterxml/jackson/databind/deser/std/NumberDeserializers.class +com/fasterxml/jackson/databind/deser/std/ObjectArrayDeserializer.class +com/fasterxml/jackson/databind/deser/std/PrimitiveArrayDeserializers$BooleanDeser.class +com/fasterxml/jackson/databind/deser/std/PrimitiveArrayDeserializers$ByteDeser.class +com/fasterxml/jackson/databind/deser/std/PrimitiveArrayDeserializers$CharDeser.class +com/fasterxml/jackson/databind/deser/std/PrimitiveArrayDeserializers$DoubleDeser.class +com/fasterxml/jackson/databind/deser/std/PrimitiveArrayDeserializers$FloatDeser.class +com/fasterxml/jackson/databind/deser/std/PrimitiveArrayDeserializers$IntDeser.class +com/fasterxml/jackson/databind/deser/std/PrimitiveArrayDeserializers$LongDeser.class +com/fasterxml/jackson/databind/deser/std/PrimitiveArrayDeserializers$ShortDeser.class +com/fasterxml/jackson/databind/deser/std/PrimitiveArrayDeserializers.class +com/fasterxml/jackson/databind/deser/std/ReferenceTypeDeserializer.class +com/fasterxml/jackson/databind/deser/std/StackTraceElementDeserializer.class +com/fasterxml/jackson/databind/deser/std/StdDelegatingDeserializer.class +com/fasterxml/jackson/databind/deser/std/StdDeserializer.class +com/fasterxml/jackson/databind/deser/std/StdKeyDeserializer$DelegatingKD.class +com/fasterxml/jackson/databind/deser/std/StdKeyDeserializer$EnumKD.class +com/fasterxml/jackson/databind/deser/std/StdKeyDeserializer$StringCtorKeyDeserializer.class +com/fasterxml/jackson/databind/deser/std/StdKeyDeserializer$StringFactoryKeyDeserializer.class +com/fasterxml/jackson/databind/deser/std/StdKeyDeserializer$StringKD.class +com/fasterxml/jackson/databind/deser/std/StdKeyDeserializer.class +com/fasterxml/jackson/databind/deser/std/StdKeyDeserializers.class +com/fasterxml/jackson/databind/deser/std/StdNodeBasedDeserializer.class +com/fasterxml/jackson/databind/deser/std/StdScalarDeserializer.class +com/fasterxml/jackson/databind/deser/std/StdValueInstantiator.class +com/fasterxml/jackson/databind/deser/std/StringArrayDeserializer.class +com/fasterxml/jackson/databind/deser/std/StringCollectionDeserializer.class +com/fasterxml/jackson/databind/deser/std/StringDeserializer.class +com/fasterxml/jackson/databind/deser/std/ThrowableDeserializer.class +com/fasterxml/jackson/databind/deser/std/TokenBufferDeserializer.class +com/fasterxml/jackson/databind/deser/std/UUIDDeserializer.class +com/fasterxml/jackson/databind/deser/std/UntypedObjectDeserializer$Vanilla.class +com/fasterxml/jackson/databind/deser/std/UntypedObjectDeserializer.class +com/fasterxml/jackson/databind/exc/ +com/fasterxml/jackson/databind/exc/IgnoredPropertyException.class +com/fasterxml/jackson/databind/exc/InvalidDefinitionException.class +com/fasterxml/jackson/databind/exc/InvalidFormatException.class +com/fasterxml/jackson/databind/exc/InvalidNullException.class +com/fasterxml/jackson/databind/exc/InvalidTypeIdException.class +com/fasterxml/jackson/databind/exc/MismatchedInputException.class +com/fasterxml/jackson/databind/exc/PropertyBindingException.class +com/fasterxml/jackson/databind/exc/UnrecognizedPropertyException.class +com/fasterxml/jackson/databind/ext/ +com/fasterxml/jackson/databind/ext/CoreXMLDeserializers$Std.class +com/fasterxml/jackson/databind/ext/CoreXMLDeserializers.class +com/fasterxml/jackson/databind/ext/CoreXMLSerializers$XMLGregorianCalendarSerializer.class +com/fasterxml/jackson/databind/ext/CoreXMLSerializers.class +com/fasterxml/jackson/databind/ext/DOMDeserializer$DocumentDeserializer.class +com/fasterxml/jackson/databind/ext/DOMDeserializer$NodeDeserializer.class +com/fasterxml/jackson/databind/ext/DOMDeserializer.class +com/fasterxml/jackson/databind/ext/DOMSerializer.class +com/fasterxml/jackson/databind/ext/Java7Support.class +com/fasterxml/jackson/databind/ext/Java7SupportImpl.class +com/fasterxml/jackson/databind/ext/NioPathDeserializer.class +com/fasterxml/jackson/databind/ext/NioPathSerializer.class +com/fasterxml/jackson/databind/ext/OptionalHandlerFactory.class +com/fasterxml/jackson/databind/introspect/ +com/fasterxml/jackson/databind/introspect/Annotated.class +com/fasterxml/jackson/databind/introspect/AnnotatedClass$Creators.class +com/fasterxml/jackson/databind/introspect/AnnotatedClass.class +com/fasterxml/jackson/databind/introspect/AnnotatedClassResolver.class +com/fasterxml/jackson/databind/introspect/AnnotatedConstructor$Serialization.class +com/fasterxml/jackson/databind/introspect/AnnotatedConstructor.class +com/fasterxml/jackson/databind/introspect/AnnotatedCreatorCollector.class +com/fasterxml/jackson/databind/introspect/AnnotatedField$Serialization.class +com/fasterxml/jackson/databind/introspect/AnnotatedField.class +com/fasterxml/jackson/databind/introspect/AnnotatedFieldCollector$FieldBuilder.class +com/fasterxml/jackson/databind/introspect/AnnotatedFieldCollector.class +com/fasterxml/jackson/databind/introspect/AnnotatedMember.class +com/fasterxml/jackson/databind/introspect/AnnotatedMethod$Serialization.class +com/fasterxml/jackson/databind/introspect/AnnotatedMethod.class +com/fasterxml/jackson/databind/introspect/AnnotatedMethodCollector$MethodBuilder.class +com/fasterxml/jackson/databind/introspect/AnnotatedMethodCollector.class +com/fasterxml/jackson/databind/introspect/AnnotatedMethodMap.class +com/fasterxml/jackson/databind/introspect/AnnotatedParameter.class +com/fasterxml/jackson/databind/introspect/AnnotatedWithParams.class +com/fasterxml/jackson/databind/introspect/AnnotationCollector$EmptyCollector.class +com/fasterxml/jackson/databind/introspect/AnnotationCollector$NCollector.class +com/fasterxml/jackson/databind/introspect/AnnotationCollector$NoAnnotations.class +com/fasterxml/jackson/databind/introspect/AnnotationCollector$OneAnnotation.class +com/fasterxml/jackson/databind/introspect/AnnotationCollector$OneCollector.class +com/fasterxml/jackson/databind/introspect/AnnotationCollector$TwoAnnotations.class +com/fasterxml/jackson/databind/introspect/AnnotationCollector.class +com/fasterxml/jackson/databind/introspect/AnnotationIntrospectorPair.class +com/fasterxml/jackson/databind/introspect/AnnotationMap.class +com/fasterxml/jackson/databind/introspect/BasicBeanDescription.class +com/fasterxml/jackson/databind/introspect/BasicClassIntrospector.class +com/fasterxml/jackson/databind/introspect/BeanPropertyDefinition.class +com/fasterxml/jackson/databind/introspect/ClassIntrospector$MixInResolver.class +com/fasterxml/jackson/databind/introspect/ClassIntrospector.class +com/fasterxml/jackson/databind/introspect/CollectorBase.class +com/fasterxml/jackson/databind/introspect/ConcreteBeanPropertyBase.class +com/fasterxml/jackson/databind/introspect/JacksonAnnotationIntrospector$1.class +com/fasterxml/jackson/databind/introspect/JacksonAnnotationIntrospector.class +com/fasterxml/jackson/databind/introspect/MemberKey.class +com/fasterxml/jackson/databind/introspect/NopAnnotationIntrospector$1.class +com/fasterxml/jackson/databind/introspect/NopAnnotationIntrospector.class +com/fasterxml/jackson/databind/introspect/ObjectIdInfo.class +com/fasterxml/jackson/databind/introspect/POJOPropertiesCollector.class +com/fasterxml/jackson/databind/introspect/POJOPropertyBuilder$1.class +com/fasterxml/jackson/databind/introspect/POJOPropertyBuilder$10.class +com/fasterxml/jackson/databind/introspect/POJOPropertyBuilder$2.class +com/fasterxml/jackson/databind/introspect/POJOPropertyBuilder$3.class +com/fasterxml/jackson/databind/introspect/POJOPropertyBuilder$4.class +com/fasterxml/jackson/databind/introspect/POJOPropertyBuilder$5.class +com/fasterxml/jackson/databind/introspect/POJOPropertyBuilder$6.class +com/fasterxml/jackson/databind/introspect/POJOPropertyBuilder$7.class +com/fasterxml/jackson/databind/introspect/POJOPropertyBuilder$8.class +com/fasterxml/jackson/databind/introspect/POJOPropertyBuilder$9.class +com/fasterxml/jackson/databind/introspect/POJOPropertyBuilder$Linked.class +com/fasterxml/jackson/databind/introspect/POJOPropertyBuilder$MemberIterator.class +com/fasterxml/jackson/databind/introspect/POJOPropertyBuilder$WithMember.class +com/fasterxml/jackson/databind/introspect/POJOPropertyBuilder.class +com/fasterxml/jackson/databind/introspect/SimpleMixInResolver.class +com/fasterxml/jackson/databind/introspect/TypeResolutionContext$Basic.class +com/fasterxml/jackson/databind/introspect/TypeResolutionContext.class +com/fasterxml/jackson/databind/introspect/VirtualAnnotatedMember.class +com/fasterxml/jackson/databind/introspect/VisibilityChecker$1.class +com/fasterxml/jackson/databind/introspect/VisibilityChecker$Std.class +com/fasterxml/jackson/databind/introspect/VisibilityChecker.class +com/fasterxml/jackson/databind/introspect/WithMember.class +com/fasterxml/jackson/databind/jsonFormatVisitors/ +com/fasterxml/jackson/databind/jsonFormatVisitors/JsonAnyFormatVisitor$Base.class +com/fasterxml/jackson/databind/jsonFormatVisitors/JsonAnyFormatVisitor.class +com/fasterxml/jackson/databind/jsonFormatVisitors/JsonArrayFormatVisitor$Base.class +com/fasterxml/jackson/databind/jsonFormatVisitors/JsonArrayFormatVisitor.class +com/fasterxml/jackson/databind/jsonFormatVisitors/JsonBooleanFormatVisitor$Base.class +com/fasterxml/jackson/databind/jsonFormatVisitors/JsonBooleanFormatVisitor.class +com/fasterxml/jackson/databind/jsonFormatVisitors/JsonFormatTypes.class +com/fasterxml/jackson/databind/jsonFormatVisitors/JsonFormatVisitable.class +com/fasterxml/jackson/databind/jsonFormatVisitors/JsonFormatVisitorWithSerializerProvider.class +com/fasterxml/jackson/databind/jsonFormatVisitors/JsonFormatVisitorWrapper$Base.class +com/fasterxml/jackson/databind/jsonFormatVisitors/JsonFormatVisitorWrapper.class +com/fasterxml/jackson/databind/jsonFormatVisitors/JsonIntegerFormatVisitor$Base.class +com/fasterxml/jackson/databind/jsonFormatVisitors/JsonIntegerFormatVisitor.class +com/fasterxml/jackson/databind/jsonFormatVisitors/JsonMapFormatVisitor$Base.class +com/fasterxml/jackson/databind/jsonFormatVisitors/JsonMapFormatVisitor.class +com/fasterxml/jackson/databind/jsonFormatVisitors/JsonNullFormatVisitor$Base.class +com/fasterxml/jackson/databind/jsonFormatVisitors/JsonNullFormatVisitor.class +com/fasterxml/jackson/databind/jsonFormatVisitors/JsonNumberFormatVisitor$Base.class +com/fasterxml/jackson/databind/jsonFormatVisitors/JsonNumberFormatVisitor.class +com/fasterxml/jackson/databind/jsonFormatVisitors/JsonObjectFormatVisitor$Base.class +com/fasterxml/jackson/databind/jsonFormatVisitors/JsonObjectFormatVisitor.class +com/fasterxml/jackson/databind/jsonFormatVisitors/JsonStringFormatVisitor$Base.class +com/fasterxml/jackson/databind/jsonFormatVisitors/JsonStringFormatVisitor.class +com/fasterxml/jackson/databind/jsonFormatVisitors/JsonValueFormat.class +com/fasterxml/jackson/databind/jsonFormatVisitors/JsonValueFormatVisitor$Base.class +com/fasterxml/jackson/databind/jsonFormatVisitors/JsonValueFormatVisitor.class +com/fasterxml/jackson/databind/jsonschema/ +com/fasterxml/jackson/databind/jsonschema/JsonSchema.class +com/fasterxml/jackson/databind/jsonschema/JsonSerializableSchema.class +com/fasterxml/jackson/databind/jsonschema/SchemaAware.class +com/fasterxml/jackson/databind/jsontype/ +com/fasterxml/jackson/databind/jsontype/NamedType.class +com/fasterxml/jackson/databind/jsontype/SubtypeResolver.class +com/fasterxml/jackson/databind/jsontype/TypeDeserializer$1.class +com/fasterxml/jackson/databind/jsontype/TypeDeserializer.class +com/fasterxml/jackson/databind/jsontype/TypeIdResolver.class +com/fasterxml/jackson/databind/jsontype/TypeResolverBuilder.class +com/fasterxml/jackson/databind/jsontype/TypeSerializer$1.class +com/fasterxml/jackson/databind/jsontype/TypeSerializer.class +com/fasterxml/jackson/databind/jsontype/impl/ +com/fasterxml/jackson/databind/jsontype/impl/AsArrayTypeDeserializer.class +com/fasterxml/jackson/databind/jsontype/impl/AsArrayTypeSerializer.class +com/fasterxml/jackson/databind/jsontype/impl/AsExistingPropertyTypeSerializer.class +com/fasterxml/jackson/databind/jsontype/impl/AsExternalTypeDeserializer.class +com/fasterxml/jackson/databind/jsontype/impl/AsExternalTypeSerializer.class +com/fasterxml/jackson/databind/jsontype/impl/AsPropertyTypeDeserializer.class +com/fasterxml/jackson/databind/jsontype/impl/AsPropertyTypeSerializer.class +com/fasterxml/jackson/databind/jsontype/impl/AsWrapperTypeDeserializer.class +com/fasterxml/jackson/databind/jsontype/impl/AsWrapperTypeSerializer.class +com/fasterxml/jackson/databind/jsontype/impl/ClassNameIdResolver.class +com/fasterxml/jackson/databind/jsontype/impl/MinimalClassNameIdResolver.class +com/fasterxml/jackson/databind/jsontype/impl/StdSubtypeResolver.class +com/fasterxml/jackson/databind/jsontype/impl/StdTypeResolverBuilder$1.class +com/fasterxml/jackson/databind/jsontype/impl/StdTypeResolverBuilder.class +com/fasterxml/jackson/databind/jsontype/impl/SubTypeValidator.class +com/fasterxml/jackson/databind/jsontype/impl/TypeDeserializerBase.class +com/fasterxml/jackson/databind/jsontype/impl/TypeIdResolverBase.class +com/fasterxml/jackson/databind/jsontype/impl/TypeNameIdResolver.class +com/fasterxml/jackson/databind/jsontype/impl/TypeSerializerBase.class +com/fasterxml/jackson/databind/module/ +com/fasterxml/jackson/databind/module/SimpleAbstractTypeResolver.class +com/fasterxml/jackson/databind/module/SimpleDeserializers.class +com/fasterxml/jackson/databind/module/SimpleKeyDeserializers.class +com/fasterxml/jackson/databind/module/SimpleModule.class +com/fasterxml/jackson/databind/module/SimpleSerializers.class +com/fasterxml/jackson/databind/module/SimpleValueInstantiators.class +com/fasterxml/jackson/databind/node/ +com/fasterxml/jackson/databind/node/ArrayNode.class +com/fasterxml/jackson/databind/node/BaseJsonNode.class +com/fasterxml/jackson/databind/node/BigIntegerNode.class +com/fasterxml/jackson/databind/node/BinaryNode.class +com/fasterxml/jackson/databind/node/BooleanNode.class +com/fasterxml/jackson/databind/node/ContainerNode.class +com/fasterxml/jackson/databind/node/DecimalNode.class +com/fasterxml/jackson/databind/node/DoubleNode.class +com/fasterxml/jackson/databind/node/FloatNode.class +com/fasterxml/jackson/databind/node/IntNode.class +com/fasterxml/jackson/databind/node/JsonNodeCreator.class +com/fasterxml/jackson/databind/node/JsonNodeFactory.class +com/fasterxml/jackson/databind/node/JsonNodeType.class +com/fasterxml/jackson/databind/node/LongNode.class +com/fasterxml/jackson/databind/node/MissingNode.class +com/fasterxml/jackson/databind/node/NodeCursor$ArrayCursor.class +com/fasterxml/jackson/databind/node/NodeCursor$ObjectCursor.class +com/fasterxml/jackson/databind/node/NodeCursor$RootCursor.class +com/fasterxml/jackson/databind/node/NodeCursor.class +com/fasterxml/jackson/databind/node/NullNode.class +com/fasterxml/jackson/databind/node/NumericNode.class +com/fasterxml/jackson/databind/node/ObjectNode.class +com/fasterxml/jackson/databind/node/POJONode.class +com/fasterxml/jackson/databind/node/ShortNode.class +com/fasterxml/jackson/databind/node/TextNode.class +com/fasterxml/jackson/databind/node/TreeTraversingParser$1.class +com/fasterxml/jackson/databind/node/TreeTraversingParser.class +com/fasterxml/jackson/databind/node/ValueNode.class +com/fasterxml/jackson/databind/ser/ +com/fasterxml/jackson/databind/ser/AnyGetterWriter.class +com/fasterxml/jackson/databind/ser/BasicSerializerFactory$1.class +com/fasterxml/jackson/databind/ser/BasicSerializerFactory.class +com/fasterxml/jackson/databind/ser/BeanPropertyFilter.class +com/fasterxml/jackson/databind/ser/BeanPropertyWriter.class +com/fasterxml/jackson/databind/ser/BeanSerializer.class +com/fasterxml/jackson/databind/ser/BeanSerializerBuilder.class +com/fasterxml/jackson/databind/ser/BeanSerializerFactory.class +com/fasterxml/jackson/databind/ser/BeanSerializerModifier.class +com/fasterxml/jackson/databind/ser/ContainerSerializer.class +com/fasterxml/jackson/databind/ser/ContextualSerializer.class +com/fasterxml/jackson/databind/ser/DefaultSerializerProvider$Impl.class +com/fasterxml/jackson/databind/ser/DefaultSerializerProvider.class +com/fasterxml/jackson/databind/ser/FilterProvider.class +com/fasterxml/jackson/databind/ser/PropertyBuilder$1.class +com/fasterxml/jackson/databind/ser/PropertyBuilder.class +com/fasterxml/jackson/databind/ser/PropertyFilter.class +com/fasterxml/jackson/databind/ser/PropertyWriter.class +com/fasterxml/jackson/databind/ser/ResolvableSerializer.class +com/fasterxml/jackson/databind/ser/SerializerCache.class +com/fasterxml/jackson/databind/ser/SerializerFactory.class +com/fasterxml/jackson/databind/ser/Serializers$Base.class +com/fasterxml/jackson/databind/ser/Serializers.class +com/fasterxml/jackson/databind/ser/VirtualBeanPropertyWriter.class +com/fasterxml/jackson/databind/ser/impl/ +com/fasterxml/jackson/databind/ser/impl/AttributePropertyWriter.class +com/fasterxml/jackson/databind/ser/impl/BeanAsArraySerializer.class +com/fasterxml/jackson/databind/ser/impl/FailingSerializer.class +com/fasterxml/jackson/databind/ser/impl/FilteredBeanPropertyWriter$MultiView.class +com/fasterxml/jackson/databind/ser/impl/FilteredBeanPropertyWriter$SingleView.class +com/fasterxml/jackson/databind/ser/impl/FilteredBeanPropertyWriter.class +com/fasterxml/jackson/databind/ser/impl/IndexedListSerializer.class +com/fasterxml/jackson/databind/ser/impl/IndexedStringListSerializer.class +com/fasterxml/jackson/databind/ser/impl/IteratorSerializer.class +com/fasterxml/jackson/databind/ser/impl/MapEntrySerializer$1.class +com/fasterxml/jackson/databind/ser/impl/MapEntrySerializer.class +com/fasterxml/jackson/databind/ser/impl/ObjectIdWriter.class +com/fasterxml/jackson/databind/ser/impl/PropertyBasedObjectIdGenerator.class +com/fasterxml/jackson/databind/ser/impl/PropertySerializerMap$Double.class +com/fasterxml/jackson/databind/ser/impl/PropertySerializerMap$Empty.class +com/fasterxml/jackson/databind/ser/impl/PropertySerializerMap$Multi.class +com/fasterxml/jackson/databind/ser/impl/PropertySerializerMap$SerializerAndMapResult.class +com/fasterxml/jackson/databind/ser/impl/PropertySerializerMap$Single.class +com/fasterxml/jackson/databind/ser/impl/PropertySerializerMap$TypeAndSerializer.class +com/fasterxml/jackson/databind/ser/impl/PropertySerializerMap.class +com/fasterxml/jackson/databind/ser/impl/ReadOnlyClassToSerializerMap$Bucket.class +com/fasterxml/jackson/databind/ser/impl/ReadOnlyClassToSerializerMap.class +com/fasterxml/jackson/databind/ser/impl/SimpleBeanPropertyFilter$1.class +com/fasterxml/jackson/databind/ser/impl/SimpleBeanPropertyFilter$FilterExceptFilter.class +com/fasterxml/jackson/databind/ser/impl/SimpleBeanPropertyFilter$SerializeExceptFilter.class +com/fasterxml/jackson/databind/ser/impl/SimpleBeanPropertyFilter.class +com/fasterxml/jackson/databind/ser/impl/SimpleFilterProvider.class +com/fasterxml/jackson/databind/ser/impl/StringArraySerializer.class +com/fasterxml/jackson/databind/ser/impl/StringCollectionSerializer.class +com/fasterxml/jackson/databind/ser/impl/TypeWrappedSerializer.class +com/fasterxml/jackson/databind/ser/impl/UnknownSerializer.class +com/fasterxml/jackson/databind/ser/impl/UnwrappingBeanPropertyWriter$1.class +com/fasterxml/jackson/databind/ser/impl/UnwrappingBeanPropertyWriter.class +com/fasterxml/jackson/databind/ser/impl/UnwrappingBeanSerializer.class +com/fasterxml/jackson/databind/ser/impl/WritableObjectId.class +com/fasterxml/jackson/databind/ser/std/ +com/fasterxml/jackson/databind/ser/std/ArraySerializerBase.class +com/fasterxml/jackson/databind/ser/std/AsArraySerializerBase.class +com/fasterxml/jackson/databind/ser/std/AtomicReferenceSerializer.class +com/fasterxml/jackson/databind/ser/std/BeanSerializerBase$1.class +com/fasterxml/jackson/databind/ser/std/BeanSerializerBase.class +com/fasterxml/jackson/databind/ser/std/BooleanSerializer$AsNumber.class +com/fasterxml/jackson/databind/ser/std/BooleanSerializer.class +com/fasterxml/jackson/databind/ser/std/ByteArraySerializer.class +com/fasterxml/jackson/databind/ser/std/ByteBufferSerializer.class +com/fasterxml/jackson/databind/ser/std/CalendarSerializer.class +com/fasterxml/jackson/databind/ser/std/ClassSerializer.class +com/fasterxml/jackson/databind/ser/std/CollectionSerializer.class +com/fasterxml/jackson/databind/ser/std/DateSerializer.class +com/fasterxml/jackson/databind/ser/std/DateTimeSerializerBase.class +com/fasterxml/jackson/databind/ser/std/EnumSerializer.class +com/fasterxml/jackson/databind/ser/std/EnumSetSerializer.class +com/fasterxml/jackson/databind/ser/std/FileSerializer.class +com/fasterxml/jackson/databind/ser/std/InetAddressSerializer.class +com/fasterxml/jackson/databind/ser/std/InetSocketAddressSerializer.class +com/fasterxml/jackson/databind/ser/std/IterableSerializer.class +com/fasterxml/jackson/databind/ser/std/JsonValueSerializer$TypeSerializerRerouter.class +com/fasterxml/jackson/databind/ser/std/JsonValueSerializer.class +com/fasterxml/jackson/databind/ser/std/MapProperty.class +com/fasterxml/jackson/databind/ser/std/MapSerializer$1.class +com/fasterxml/jackson/databind/ser/std/MapSerializer.class +com/fasterxml/jackson/databind/ser/std/NonTypedScalarSerializerBase.class +com/fasterxml/jackson/databind/ser/std/NullSerializer.class +com/fasterxml/jackson/databind/ser/std/NumberSerializer$1.class +com/fasterxml/jackson/databind/ser/std/NumberSerializer.class +com/fasterxml/jackson/databind/ser/std/NumberSerializers$1.class +com/fasterxml/jackson/databind/ser/std/NumberSerializers$Base.class +com/fasterxml/jackson/databind/ser/std/NumberSerializers$DoubleSerializer.class +com/fasterxml/jackson/databind/ser/std/NumberSerializers$FloatSerializer.class +com/fasterxml/jackson/databind/ser/std/NumberSerializers$IntLikeSerializer.class +com/fasterxml/jackson/databind/ser/std/NumberSerializers$IntegerSerializer.class +com/fasterxml/jackson/databind/ser/std/NumberSerializers$LongSerializer.class +com/fasterxml/jackson/databind/ser/std/NumberSerializers$ShortSerializer.class +com/fasterxml/jackson/databind/ser/std/NumberSerializers.class +com/fasterxml/jackson/databind/ser/std/ObjectArraySerializer.class +com/fasterxml/jackson/databind/ser/std/RawSerializer.class +com/fasterxml/jackson/databind/ser/std/ReferenceTypeSerializer$1.class +com/fasterxml/jackson/databind/ser/std/ReferenceTypeSerializer.class +com/fasterxml/jackson/databind/ser/std/SerializableSerializer.class +com/fasterxml/jackson/databind/ser/std/SqlDateSerializer.class +com/fasterxml/jackson/databind/ser/std/SqlTimeSerializer.class +com/fasterxml/jackson/databind/ser/std/StaticListSerializerBase.class +com/fasterxml/jackson/databind/ser/std/StdArraySerializers$BooleanArraySerializer.class +com/fasterxml/jackson/databind/ser/std/StdArraySerializers$CharArraySerializer.class +com/fasterxml/jackson/databind/ser/std/StdArraySerializers$DoubleArraySerializer.class +com/fasterxml/jackson/databind/ser/std/StdArraySerializers$FloatArraySerializer.class +com/fasterxml/jackson/databind/ser/std/StdArraySerializers$IntArraySerializer.class +com/fasterxml/jackson/databind/ser/std/StdArraySerializers$LongArraySerializer.class +com/fasterxml/jackson/databind/ser/std/StdArraySerializers$ShortArraySerializer.class +com/fasterxml/jackson/databind/ser/std/StdArraySerializers$TypedPrimitiveArraySerializer.class +com/fasterxml/jackson/databind/ser/std/StdArraySerializers.class +com/fasterxml/jackson/databind/ser/std/StdDelegatingSerializer.class +com/fasterxml/jackson/databind/ser/std/StdJdkSerializers$AtomicBooleanSerializer.class +com/fasterxml/jackson/databind/ser/std/StdJdkSerializers$AtomicIntegerSerializer.class +com/fasterxml/jackson/databind/ser/std/StdJdkSerializers$AtomicLongSerializer.class +com/fasterxml/jackson/databind/ser/std/StdJdkSerializers.class +com/fasterxml/jackson/databind/ser/std/StdKeySerializer.class +com/fasterxml/jackson/databind/ser/std/StdKeySerializers$Default.class +com/fasterxml/jackson/databind/ser/std/StdKeySerializers$Dynamic.class +com/fasterxml/jackson/databind/ser/std/StdKeySerializers$EnumKeySerializer.class +com/fasterxml/jackson/databind/ser/std/StdKeySerializers$StringKeySerializer.class +com/fasterxml/jackson/databind/ser/std/StdKeySerializers.class +com/fasterxml/jackson/databind/ser/std/StdScalarSerializer.class +com/fasterxml/jackson/databind/ser/std/StdSerializer.class +com/fasterxml/jackson/databind/ser/std/StringSerializer.class +com/fasterxml/jackson/databind/ser/std/TimeZoneSerializer.class +com/fasterxml/jackson/databind/ser/std/ToStringSerializer.class +com/fasterxml/jackson/databind/ser/std/TokenBufferSerializer.class +com/fasterxml/jackson/databind/ser/std/UUIDSerializer.class +com/fasterxml/jackson/databind/type/ +com/fasterxml/jackson/databind/type/ArrayType.class +com/fasterxml/jackson/databind/type/ClassKey.class +com/fasterxml/jackson/databind/type/ClassStack.class +com/fasterxml/jackson/databind/type/CollectionLikeType.class +com/fasterxml/jackson/databind/type/CollectionType.class +com/fasterxml/jackson/databind/type/MapLikeType.class +com/fasterxml/jackson/databind/type/MapType.class +com/fasterxml/jackson/databind/type/PlaceholderForType.class +com/fasterxml/jackson/databind/type/ReferenceType.class +com/fasterxml/jackson/databind/type/ResolvedRecursiveType.class +com/fasterxml/jackson/databind/type/SimpleType.class +com/fasterxml/jackson/databind/type/TypeBase.class +com/fasterxml/jackson/databind/type/TypeBindings$AsKey.class +com/fasterxml/jackson/databind/type/TypeBindings$TypeParamStash.class +com/fasterxml/jackson/databind/type/TypeBindings.class +com/fasterxml/jackson/databind/type/TypeFactory.class +com/fasterxml/jackson/databind/type/TypeModifier.class +com/fasterxml/jackson/databind/type/TypeParser$MyTokenizer.class +com/fasterxml/jackson/databind/type/TypeParser.class +com/fasterxml/jackson/databind/util/ +com/fasterxml/jackson/databind/util/AccessPattern.class +com/fasterxml/jackson/databind/util/Annotations.class +com/fasterxml/jackson/databind/util/ArrayBuilders$1.class +com/fasterxml/jackson/databind/util/ArrayBuilders$BooleanBuilder.class +com/fasterxml/jackson/databind/util/ArrayBuilders$ByteBuilder.class +com/fasterxml/jackson/databind/util/ArrayBuilders$DoubleBuilder.class +com/fasterxml/jackson/databind/util/ArrayBuilders$FloatBuilder.class +com/fasterxml/jackson/databind/util/ArrayBuilders$IntBuilder.class +com/fasterxml/jackson/databind/util/ArrayBuilders$LongBuilder.class +com/fasterxml/jackson/databind/util/ArrayBuilders$ShortBuilder.class +com/fasterxml/jackson/databind/util/ArrayBuilders.class +com/fasterxml/jackson/databind/util/ArrayIterator.class +com/fasterxml/jackson/databind/util/BeanUtil.class +com/fasterxml/jackson/databind/util/ByteBufferBackedInputStream.class +com/fasterxml/jackson/databind/util/ByteBufferBackedOutputStream.class +com/fasterxml/jackson/databind/util/ClassUtil$Ctor.class +com/fasterxml/jackson/databind/util/ClassUtil$EnumTypeLocator.class +com/fasterxml/jackson/databind/util/ClassUtil.class +com/fasterxml/jackson/databind/util/CompactStringObjectMap.class +com/fasterxml/jackson/databind/util/ConstantValueInstantiator.class +com/fasterxml/jackson/databind/util/Converter$None.class +com/fasterxml/jackson/databind/util/Converter.class +com/fasterxml/jackson/databind/util/EnumResolver.class +com/fasterxml/jackson/databind/util/EnumValues.class +com/fasterxml/jackson/databind/util/ISO8601DateFormat.class +com/fasterxml/jackson/databind/util/ISO8601Utils.class +com/fasterxml/jackson/databind/util/JSONPObject.class +com/fasterxml/jackson/databind/util/JSONWrappedObject.class +com/fasterxml/jackson/databind/util/LRUMap.class +com/fasterxml/jackson/databind/util/LinkedNode.class +com/fasterxml/jackson/databind/util/NameTransformer$1.class +com/fasterxml/jackson/databind/util/NameTransformer$2.class +com/fasterxml/jackson/databind/util/NameTransformer$3.class +com/fasterxml/jackson/databind/util/NameTransformer$Chained.class +com/fasterxml/jackson/databind/util/NameTransformer$NopTransformer.class +com/fasterxml/jackson/databind/util/NameTransformer.class +com/fasterxml/jackson/databind/util/Named.class +com/fasterxml/jackson/databind/util/ObjectBuffer.class +com/fasterxml/jackson/databind/util/PrimitiveArrayBuilder$Node.class +com/fasterxml/jackson/databind/util/PrimitiveArrayBuilder.class +com/fasterxml/jackson/databind/util/RawValue.class +com/fasterxml/jackson/databind/util/RootNameLookup.class +com/fasterxml/jackson/databind/util/SimpleBeanPropertyDefinition.class +com/fasterxml/jackson/databind/util/StdConverter.class +com/fasterxml/jackson/databind/util/StdDateFormat.class +com/fasterxml/jackson/databind/util/TokenBuffer$1.class +com/fasterxml/jackson/databind/util/TokenBuffer$Parser.class +com/fasterxml/jackson/databind/util/TokenBuffer$Segment.class +com/fasterxml/jackson/databind/util/TokenBuffer.class +com/fasterxml/jackson/databind/util/TokenBufferReadContext.class +com/fasterxml/jackson/databind/util/TypeKey.class +com/fasterxml/jackson/databind/util/ViewMatcher$Multi.class +com/fasterxml/jackson/databind/util/ViewMatcher$Single.class +com/fasterxml/jackson/databind/util/ViewMatcher.class diff --git a/examples/temp2.txt b/examples/temp2.txt new file mode 100644 index 00000000..83556ad8 --- /dev/null +++ b/examples/temp2.txt @@ -0,0 +1,1917 @@ +META-INF/ +META-INF/MANIFEST.MF +LICENSE.md +com/ +com/sendgrid/ +com/sendgrid/SendGridAPI.class +com/sendgrid/SendGrid$1.class +com/sendgrid/APICallback.class +com/sendgrid/SendGrid$2.class +com/sendgrid/SendGrid.class +com/sendgrid/SpamCheckSetting.class +com/sendgrid/Attachments$Builder.class +com/sendgrid/OpenTrackingSetting.class +com/sendgrid/Setting.class +com/sendgrid/GoogleAnalyticsSetting.class +com/sendgrid/ASM.class +com/sendgrid/FooterSetting.class +com/sendgrid/Personalization.class +com/sendgrid/Email.class +com/sendgrid/MailSettings.class +com/sendgrid/BccSettings.class +com/sendgrid/Content.class +com/sendgrid/TrackingSettings.class +com/sendgrid/ClickTrackingSetting.class +com/sendgrid/Attachments.class +com/sendgrid/ContentVerifier.class +com/sendgrid/SubscriptionTrackingSetting.class +com/sendgrid/Mail.class +com/sendgrid/RateLimitException.class +META-INF/maven/ +META-INF/maven/com.sendgrid/ +META-INF/maven/com.sendgrid/sendgrid-java/ +META-INF/maven/com.sendgrid/sendgrid-java/pom.xml +META-INF/maven/com.sendgrid/sendgrid-java/pom.properties +com/sendgrid/Client$1.class +com/sendgrid/Client.class +com/sendgrid/HttpDeleteWithBody.class +com/sendgrid/Method.class +com/sendgrid/Request.class +com/sendgrid/Response.class +com/sendgrid/SendGridResponseHandler.class +org/ +org/apache/ +org/apache/http/ +org/apache/http/message/ +org/apache/http/message/BasicHeaderElementIterator.class +org/apache/http/message/LineParser.class +org/apache/http/message/BasicHttpEntityEnclosingRequest.class +org/apache/http/message/HeaderValueFormatter.class +org/apache/http/message/BasicLineFormatter.class +org/apache/http/message/BasicLineParser.class +org/apache/http/message/HeaderGroup.class +org/apache/http/message/BasicNameValuePair.class +org/apache/http/message/BufferedHeader.class +org/apache/http/message/BasicListHeaderIterator.class +org/apache/http/message/BasicHeader.class +org/apache/http/message/LineFormatter.class +org/apache/http/message/BasicHttpResponse.class +org/apache/http/message/BasicTokenIterator.class +org/apache/http/message/BasicRequestLine.class +org/apache/http/message/ParserCursor.class +org/apache/http/message/BasicHeaderValueParser.class +org/apache/http/message/BasicHeaderValueFormatter.class +org/apache/http/message/BasicHttpRequest.class +org/apache/http/message/HeaderValueParser.class +org/apache/http/message/AbstractHttpMessage.class +org/apache/http/message/TokenParser.class +org/apache/http/message/BasicHeaderIterator.class +org/apache/http/message/BasicHeaderElement.class +org/apache/http/message/BasicStatusLine.class +org/apache/http/concurrent/ +org/apache/http/concurrent/BasicFuture.class +org/apache/http/concurrent/Cancellable.class +org/apache/http/concurrent/FutureCallback.class +org/apache/http/HeaderElement.class +org/apache/http/TruncatedChunkException.class +org/apache/http/ExceptionLogger$1.class +org/apache/http/version.properties +org/apache/http/HeaderElementIterator.class +org/apache/http/ProtocolVersion.class +org/apache/http/ExceptionLogger.class +org/apache/http/HttpRequestFactory.class +org/apache/http/HttpConnection.class +org/apache/http/HttpRequestInterceptor.class +org/apache/http/ContentTooLongException.class +org/apache/http/UnsupportedHttpVersionException.class +org/apache/http/HttpResponseInterceptor.class +org/apache/http/HttpInetConnection.class +org/apache/http/HttpEntity.class +org/apache/http/HttpException.class +org/apache/http/annotation/ +org/apache/http/annotation/Obsolete.class +org/apache/http/annotation/Experimental.class +org/apache/http/annotation/NotThreadSafe.class +org/apache/http/annotation/Immutable.class +org/apache/http/annotation/ThreadSafe.class +org/apache/http/annotation/GuardedBy.class +org/apache/http/Consts.class +org/apache/http/HttpConnectionMetrics.class +org/apache/http/HttpMessage.class +org/apache/http/MethodNotSupportedException.class +org/apache/http/ParseException.class +org/apache/http/params/ +org/apache/http/params/CoreProtocolPNames.class +org/apache/http/params/SyncBasicHttpParams.class +org/apache/http/params/DefaultedHttpParams.class +org/apache/http/params/HttpParams.class +org/apache/http/params/AbstractHttpParams.class +org/apache/http/params/HttpAbstractParamBean.class +org/apache/http/params/HttpConnectionParams.class +org/apache/http/params/BasicHttpParams.class +org/apache/http/params/HttpConnectionParamBean.class +org/apache/http/params/CoreConnectionPNames.class +org/apache/http/params/HttpParamConfig.class +org/apache/http/params/HttpProtocolParamBean.class +org/apache/http/params/HttpProtocolParams.class +org/apache/http/params/HttpParamsNames.class +org/apache/http/ReasonPhraseCatalog.class +org/apache/http/MalformedChunkCodingException.class +org/apache/http/FormattedHeader.class +org/apache/http/HttpResponse.class +org/apache/http/HeaderIterator.class +org/apache/http/HttpHeaders.class +org/apache/http/HttpClientConnection.class +org/apache/http/HttpHost.class +org/apache/http/protocol/ +org/apache/http/protocol/ResponseDate.class +org/apache/http/protocol/ChainBuilder.class +org/apache/http/protocol/HttpDateGenerator.class +org/apache/http/protocol/HttpRequestHandlerMapper.class +org/apache/http/protocol/HTTP.class +org/apache/http/protocol/SyncBasicHttpContext.class +org/apache/http/protocol/HttpService$HttpRequestHandlerResolverAdapter.class +org/apache/http/protocol/ImmutableHttpProcessor.class +org/apache/http/protocol/BasicHttpContext.class +org/apache/http/protocol/HttpProcessorBuilder.class +org/apache/http/protocol/RequestTargetHost.class +org/apache/http/protocol/ResponseConnControl.class +org/apache/http/protocol/HttpRequestInterceptorList.class +org/apache/http/protocol/HttpRequestExecutor.class +org/apache/http/protocol/RequestUserAgent.class +org/apache/http/protocol/HttpRequestHandlerResolver.class +org/apache/http/protocol/BasicHttpProcessor.class +org/apache/http/protocol/ResponseServer.class +org/apache/http/protocol/ResponseContent.class +org/apache/http/protocol/RequestDate.class +org/apache/http/protocol/HttpService.class +org/apache/http/protocol/HttpContext.class +org/apache/http/protocol/RequestConnControl.class +org/apache/http/protocol/UriHttpRequestHandlerMapper.class +org/apache/http/protocol/UriPatternMatcher.class +org/apache/http/protocol/HttpCoreContext.class +org/apache/http/protocol/HttpProcessor.class +org/apache/http/protocol/RequestExpectContinue.class +org/apache/http/protocol/HttpExpectationVerifier.class +org/apache/http/protocol/HttpRequestHandlerRegistry.class +org/apache/http/protocol/HttpResponseInterceptorList.class +org/apache/http/protocol/HttpRequestHandler.class +org/apache/http/protocol/ExecutionContext.class +org/apache/http/protocol/RequestContent.class +org/apache/http/protocol/DefaultedHttpContext.class +org/apache/http/HttpStatus.class +org/apache/http/TokenIterator.class +org/apache/http/ssl/ +org/apache/http/ssl/SSLContextBuilder$TrustManagerDelegate.class +org/apache/http/ssl/TrustStrategy.class +org/apache/http/ssl/PrivateKeyStrategy.class +org/apache/http/ssl/SSLContextBuilder$KeyManagerDelegate.class +org/apache/http/ssl/SSLContexts.class +org/apache/http/ssl/SSLContextBuilder.class +org/apache/http/ssl/SSLInitializationException.class +org/apache/http/ssl/PrivateKeyDetails.class +org/apache/http/ConnectionReuseStrategy.class +org/apache/http/pool/ +org/apache/http/pool/AbstractConnPool$4.class +org/apache/http/pool/AbstractConnPool$2.class +org/apache/http/pool/PoolEntry.class +org/apache/http/pool/ConnFactory.class +org/apache/http/pool/RouteSpecificPool.class +org/apache/http/pool/AbstractConnPool$3.class +org/apache/http/pool/PoolEntryCallback.class +org/apache/http/pool/AbstractConnPool.class +org/apache/http/pool/ConnPoolControl.class +org/apache/http/pool/PoolStats.class +org/apache/http/pool/AbstractConnPool$1.class +org/apache/http/pool/ConnPool.class +org/apache/http/pool/PoolEntryFuture.class +org/apache/http/config/ +org/apache/http/config/MessageConstraints$Builder.class +org/apache/http/config/ConnectionConfig.class +org/apache/http/config/SocketConfig.class +org/apache/http/config/Registry.class +org/apache/http/config/ConnectionConfig$Builder.class +org/apache/http/config/RegistryBuilder.class +org/apache/http/config/SocketConfig$Builder.class +org/apache/http/config/MessageConstraints.class +org/apache/http/config/Lookup.class +org/apache/http/HttpResponseFactory.class +org/apache/http/HttpRequest.class +org/apache/http/RequestLine.class +org/apache/http/HttpServerConnection.class +org/apache/http/NameValuePair.class +org/apache/http/util/ +org/apache/http/util/LangUtils.class +org/apache/http/util/NetUtils.class +org/apache/http/util/EntityUtils.class +org/apache/http/util/EncodingUtils.class +org/apache/http/util/TextUtils.class +org/apache/http/util/CharsetUtils.class +org/apache/http/util/CharArrayBuffer.class +org/apache/http/util/ByteArrayBuffer.class +org/apache/http/util/Asserts.class +org/apache/http/util/ExceptionUtils.class +org/apache/http/util/Args.class +org/apache/http/util/VersionInfo.class +org/apache/http/HttpVersion.class +org/apache/http/HttpConnectionFactory.class +org/apache/http/impl/ +org/apache/http/impl/DefaultHttpRequestFactory.class +org/apache/http/impl/SocketHttpClientConnection.class +org/apache/http/impl/bootstrap/ +org/apache/http/impl/bootstrap/SSLServerSetupHandler.class +org/apache/http/impl/bootstrap/HttpServer$Status.class +org/apache/http/impl/bootstrap/ThreadFactoryImpl.class +org/apache/http/impl/bootstrap/Worker.class +org/apache/http/impl/bootstrap/RequestListener.class +org/apache/http/impl/bootstrap/ServerBootstrap.class +org/apache/http/impl/bootstrap/HttpServer.class +org/apache/http/impl/SocketHttpServerConnection.class +org/apache/http/impl/BHttpConnectionBase.class +org/apache/http/impl/DefaultConnectionReuseStrategy.class +org/apache/http/impl/DefaultHttpServerConnection.class +org/apache/http/impl/AbstractHttpClientConnection.class +org/apache/http/impl/EnglishReasonPhraseCatalog.class +org/apache/http/impl/DefaultBHttpServerConnection.class +org/apache/http/impl/DefaultHttpClientConnection.class +org/apache/http/impl/pool/ +org/apache/http/impl/pool/BasicConnPool.class +org/apache/http/impl/pool/BasicConnFactory.class +org/apache/http/impl/pool/BasicPoolEntry.class +org/apache/http/impl/DefaultBHttpClientConnectionFactory.class +org/apache/http/impl/DefaultBHttpClientConnection.class +org/apache/http/impl/AbstractHttpServerConnection.class +org/apache/http/impl/io/ +org/apache/http/impl/io/HttpResponseWriter.class +org/apache/http/impl/io/HttpTransportMetricsImpl.class +org/apache/http/impl/io/AbstractSessionInputBuffer.class +org/apache/http/impl/io/DefaultHttpRequestWriter.class +org/apache/http/impl/io/SessionInputBufferImpl.class +org/apache/http/impl/io/ContentLengthOutputStream.class +org/apache/http/impl/io/SocketInputBuffer.class +org/apache/http/impl/io/DefaultHttpResponseWriterFactory.class +org/apache/http/impl/io/DefaultHttpRequestWriterFactory.class +org/apache/http/impl/io/IdentityOutputStream.class +org/apache/http/impl/io/IdentityInputStream.class +org/apache/http/impl/io/SocketOutputBuffer.class +org/apache/http/impl/io/ChunkedOutputStream.class +org/apache/http/impl/io/DefaultHttpResponseParserFactory.class +org/apache/http/impl/io/ContentLengthInputStream.class +org/apache/http/impl/io/HttpRequestWriter.class +org/apache/http/impl/io/DefaultHttpResponseWriter.class +org/apache/http/impl/io/DefaultHttpRequestParserFactory.class +org/apache/http/impl/io/AbstractMessageParser.class +org/apache/http/impl/io/EmptyInputStream.class +org/apache/http/impl/io/DefaultHttpRequestParser.class +org/apache/http/impl/io/SessionOutputBufferImpl.class +org/apache/http/impl/io/HttpRequestParser.class +org/apache/http/impl/io/AbstractSessionOutputBuffer.class +org/apache/http/impl/io/DefaultHttpResponseParser.class +org/apache/http/impl/io/ChunkedInputStream.class +org/apache/http/impl/io/AbstractMessageWriter.class +org/apache/http/impl/io/HttpResponseParser.class +org/apache/http/impl/entity/ +org/apache/http/impl/entity/DisallowIdentityContentLengthStrategy.class +org/apache/http/impl/entity/LaxContentLengthStrategy.class +org/apache/http/impl/entity/StrictContentLengthStrategy.class +org/apache/http/impl/entity/EntityDeserializer.class +org/apache/http/impl/entity/EntitySerializer.class +org/apache/http/impl/DefaultHttpResponseFactory.class +org/apache/http/impl/DefaultBHttpServerConnectionFactory.class +org/apache/http/impl/HttpConnectionMetricsImpl.class +org/apache/http/impl/ConnSupport.class +org/apache/http/impl/NoConnectionReuseStrategy.class +org/apache/http/ConnectionClosedException.class +org/apache/http/StatusLine.class +org/apache/http/io/ +org/apache/http/io/HttpMessageWriterFactory.class +org/apache/http/io/BufferInfo.class +org/apache/http/io/HttpMessageParserFactory.class +org/apache/http/io/HttpTransportMetrics.class +org/apache/http/io/SessionOutputBuffer.class +org/apache/http/io/HttpMessageParser.class +org/apache/http/io/EofSensor.class +org/apache/http/io/HttpMessageWriter.class +org/apache/http/io/SessionInputBuffer.class +org/apache/http/NoHttpResponseException.class +org/apache/http/HttpEntityEnclosingRequest.class +org/apache/http/entity/ +org/apache/http/entity/ContentLengthStrategy.class +org/apache/http/entity/FileEntity.class +org/apache/http/entity/InputStreamEntity.class +org/apache/http/entity/SerializableEntity.class +org/apache/http/entity/StringEntity.class +org/apache/http/entity/HttpEntityWrapper.class +org/apache/http/entity/ContentProducer.class +org/apache/http/entity/BufferedHttpEntity.class +org/apache/http/entity/ByteArrayEntity.class +org/apache/http/entity/EntityTemplate.class +org/apache/http/entity/BasicHttpEntity.class +org/apache/http/entity/ContentType.class +org/apache/http/entity/AbstractHttpEntity.class +org/apache/http/ProtocolException.class +org/apache/http/MessageConstraintException.class +org/apache/http/ExceptionLogger$2.class +org/apache/http/Header.class +META-INF/DEPENDENCIES +META-INF/NOTICE +META-INF/LICENSE +META-INF/maven/org.apache.httpcomponents/ +META-INF/maven/org.apache.httpcomponents/httpcore/ +META-INF/maven/org.apache.httpcomponents/httpcore/pom.xml +META-INF/maven/org.apache.httpcomponents/httpcore/pom.properties +org/apache/http/auth/ +org/apache/http/auth/KerberosCredentials.class +org/apache/http/auth/AuthSchemeRegistry.class +org/apache/http/auth/ChallengeState.class +org/apache/http/auth/NTUserPrincipal.class +org/apache/http/auth/InvalidCredentialsException.class +org/apache/http/auth/AuthSchemeRegistry$1.class +org/apache/http/auth/NTCredentials.class +org/apache/http/auth/AuthScheme.class +org/apache/http/auth/AuthenticationException.class +org/apache/http/auth/params/ +org/apache/http/auth/params/AuthParams.class +org/apache/http/auth/params/AuthParamBean.class +org/apache/http/auth/params/AuthPNames.class +org/apache/http/auth/BasicUserPrincipal.class +org/apache/http/auth/AuthSchemeProvider.class +org/apache/http/auth/ContextAwareAuthScheme.class +org/apache/http/auth/AuthProtocolState.class +org/apache/http/auth/AuthScope.class +org/apache/http/auth/AuthSchemeFactory.class +org/apache/http/auth/AUTH.class +org/apache/http/auth/Credentials.class +org/apache/http/auth/UsernamePasswordCredentials.class +org/apache/http/auth/AuthOption.class +org/apache/http/auth/MalformedChallengeException.class +org/apache/http/auth/AuthState.class +org/apache/http/cookie/ +org/apache/http/cookie/CookieSpecRegistry.class +org/apache/http/cookie/CookieSpec.class +org/apache/http/cookie/CookieRestrictionViolationException.class +org/apache/http/cookie/CookieIdentityComparator.class +org/apache/http/cookie/SM.class +org/apache/http/cookie/CookieOrigin.class +org/apache/http/cookie/CookieAttributeHandler.class +org/apache/http/cookie/SetCookie2.class +org/apache/http/cookie/params/ +org/apache/http/cookie/params/CookieSpecParamBean.class +org/apache/http/cookie/params/CookieSpecPNames.class +org/apache/http/cookie/MalformedCookieException.class +org/apache/http/cookie/ClientCookie.class +org/apache/http/cookie/CommonCookieAttributeHandler.class +org/apache/http/cookie/CookieSpecRegistry$1.class +org/apache/http/cookie/CookiePathComparator.class +org/apache/http/cookie/SetCookie.class +org/apache/http/cookie/Cookie.class +org/apache/http/cookie/CookieSpecProvider.class +org/apache/http/cookie/CookiePriorityComparator.class +org/apache/http/cookie/CookieSpecFactory.class +org/apache/http/client/ +org/apache/http/client/RedirectStrategy.class +org/apache/http/client/ConnectionBackoffStrategy.class +org/apache/http/client/version.properties +org/apache/http/client/AuthenticationStrategy.class +org/apache/http/client/HttpClient.class +org/apache/http/client/methods/ +org/apache/http/client/methods/HttpOptions.class +org/apache/http/client/methods/AbortableHttpRequest.class +org/apache/http/client/methods/HttpRequestBase.class +org/apache/http/client/methods/AbstractExecutionAwareRequest$2.class +org/apache/http/client/methods/RequestBuilder.class +org/apache/http/client/methods/HttpGet.class +org/apache/http/client/methods/HttpPatch.class +org/apache/http/client/methods/HttpDelete.class +org/apache/http/client/methods/HttpUriRequest.class +org/apache/http/client/methods/CloseableHttpResponse.class +org/apache/http/client/methods/HttpRequestWrapper$1.class +org/apache/http/client/methods/RequestBuilder$InternalEntityEclosingRequest.class +org/apache/http/client/methods/HttpRequestWrapper$HttpEntityEnclosingRequestWrapper.class +org/apache/http/client/methods/RequestBuilder$InternalRequest.class +org/apache/http/client/methods/HttpRequestWrapper.class +org/apache/http/client/methods/HttpHead.class +org/apache/http/client/methods/HttpExecutionAware.class +org/apache/http/client/methods/AbstractExecutionAwareRequest.class +org/apache/http/client/methods/Configurable.class +org/apache/http/client/methods/AbstractExecutionAwareRequest$1.class +org/apache/http/client/methods/HttpPost.class +org/apache/http/client/methods/HttpEntityEnclosingRequestBase.class +org/apache/http/client/methods/HttpTrace.class +org/apache/http/client/methods/HttpPut.class +org/apache/http/client/CredentialsProvider.class +org/apache/http/client/UserTokenHandler.class +org/apache/http/client/CookieStore.class +org/apache/http/client/HttpResponseException.class +org/apache/http/client/ClientProtocolException.class +org/apache/http/client/AuthenticationHandler.class +org/apache/http/client/params/ +org/apache/http/client/params/HttpClientParams.class +org/apache/http/client/params/ClientPNames.class +org/apache/http/client/params/ClientParamBean.class +org/apache/http/client/params/CookiePolicy.class +org/apache/http/client/params/AuthPolicy.class +org/apache/http/client/params/HttpClientParamConfig.class +org/apache/http/client/params/AllClientPNames.class +org/apache/http/client/CircularRedirectException.class +org/apache/http/client/utils/ +org/apache/http/client/utils/Punycode.class +org/apache/http/client/utils/Idn.class +org/apache/http/client/utils/HttpClientUtils.class +org/apache/http/client/utils/URIBuilder.class +org/apache/http/client/utils/URIUtils.class +org/apache/http/client/utils/DateUtils$DateFormatHolder.class +org/apache/http/client/utils/URLEncodedUtils.class +org/apache/http/client/utils/JdkIdn.class +org/apache/http/client/utils/CloneUtils.class +org/apache/http/client/utils/DateUtils.class +org/apache/http/client/utils/Rfc3492Idn.class +org/apache/http/client/protocol/ +org/apache/http/client/protocol/RequestAcceptEncoding.class +org/apache/http/client/protocol/ResponseProcessCookies.class +org/apache/http/client/protocol/RequestDefaultHeaders.class +org/apache/http/client/protocol/ResponseContentEncoding$2.class +org/apache/http/client/protocol/ClientContext.class +org/apache/http/client/protocol/ResponseAuthCache.class +org/apache/http/client/protocol/RequestAuthenticationBase$1.class +org/apache/http/client/protocol/RequestTargetAuthentication.class +org/apache/http/client/protocol/RequestProxyAuthentication.class +org/apache/http/client/protocol/RequestClientConnControl.class +org/apache/http/client/protocol/ResponseAuthCache$1.class +org/apache/http/client/protocol/RequestAddCookies.class +org/apache/http/client/protocol/RequestAuthCache.class +org/apache/http/client/protocol/ClientContextConfigurer.class +org/apache/http/client/protocol/ResponseContentEncoding$1.class +org/apache/http/client/protocol/RequestExpectContinue.class +org/apache/http/client/protocol/ResponseContentEncoding.class +org/apache/http/client/protocol/RequestAuthenticationBase.class +org/apache/http/client/protocol/HttpClientContext.class +org/apache/http/client/BackoffManager.class +org/apache/http/client/config/ +org/apache/http/client/config/RequestConfig$Builder.class +org/apache/http/client/config/RequestConfig.class +org/apache/http/client/config/CookieSpecs.class +org/apache/http/client/config/AuthSchemes.class +org/apache/http/client/AuthCache.class +org/apache/http/client/ResponseHandler.class +org/apache/http/client/RedirectException.class +org/apache/http/client/RedirectHandler.class +org/apache/http/client/NonRepeatableRequestException.class +org/apache/http/client/entity/ +org/apache/http/client/entity/DeflateInputStream.class +org/apache/http/client/entity/InputStreamFactory.class +org/apache/http/client/entity/UrlEncodedFormEntity.class +org/apache/http/client/entity/DeflateInputStream$DeflateStream.class +org/apache/http/client/entity/GzipCompressingEntity.class +org/apache/http/client/entity/EntityBuilder.class +org/apache/http/client/entity/LazyDecompressingInputStream.class +org/apache/http/client/entity/DecompressingEntity.class +org/apache/http/client/entity/GzipDecompressingEntity$1.class +org/apache/http/client/entity/DeflateDecompressingEntity$1.class +org/apache/http/client/entity/GzipDecompressingEntity.class +org/apache/http/client/entity/DeflateDecompressingEntity.class +org/apache/http/client/HttpRequestRetryHandler.class +org/apache/http/client/RequestDirector.class +org/apache/http/client/ServiceUnavailableRetryStrategy.class +org/apache/http/conn/ +org/apache/http/conn/OperatedClientConnection.class +org/apache/http/conn/ManagedClientConnection.class +org/apache/http/conn/ConnectionRequest.class +org/apache/http/conn/EofSensorInputStream.class +org/apache/http/conn/ClientConnectionOperator.class +org/apache/http/conn/HttpClientConnectionOperator.class +org/apache/http/conn/BasicManagedEntity.class +org/apache/http/conn/ConnectionKeepAliveStrategy.class +org/apache/http/conn/ManagedHttpClientConnection.class +org/apache/http/conn/BasicEofSensorWatcher.class +org/apache/http/conn/HttpClientConnectionManager.class +org/apache/http/conn/HttpRoutedConnection.class +org/apache/http/conn/EofSensorWatcher.class +org/apache/http/conn/routing/ +org/apache/http/conn/routing/BasicRouteDirector.class +org/apache/http/conn/routing/RouteInfo$LayerType.class +org/apache/http/conn/routing/RouteInfo.class +org/apache/http/conn/routing/RouteTracker.class +org/apache/http/conn/routing/HttpRouteDirector.class +org/apache/http/conn/routing/HttpRoutePlanner.class +org/apache/http/conn/routing/RouteInfo$TunnelType.class +org/apache/http/conn/routing/HttpRoute.class +org/apache/http/conn/SchemePortResolver.class +org/apache/http/conn/ClientConnectionManager.class +org/apache/http/conn/params/ +org/apache/http/conn/params/ConnManagerParamBean.class +org/apache/http/conn/params/ConnRouteParamBean.class +org/apache/http/conn/params/ConnManagerParams$1.class +org/apache/http/conn/params/ConnManagerPNames.class +org/apache/http/conn/params/ConnConnectionParamBean.class +org/apache/http/conn/params/ConnManagerParams.class +org/apache/http/conn/params/ConnPerRouteBean.class +org/apache/http/conn/params/ConnConnectionPNames.class +org/apache/http/conn/params/ConnPerRoute.class +org/apache/http/conn/params/ConnRoutePNames.class +org/apache/http/conn/params/ConnRouteParams.class +org/apache/http/conn/socket/ +org/apache/http/conn/socket/PlainConnectionSocketFactory.class +org/apache/http/conn/socket/ConnectionSocketFactory.class +org/apache/http/conn/socket/LayeredConnectionSocketFactory.class +org/apache/http/conn/ClientConnectionRequest.class +org/apache/http/conn/ssl/ +org/apache/http/conn/ssl/TrustSelfSignedStrategy.class +org/apache/http/conn/ssl/SSLContextBuilder$TrustManagerDelegate.class +org/apache/http/conn/ssl/DefaultHostnameVerifier$1.class +org/apache/http/conn/ssl/DefaultHostnameVerifier$TYPE.class +org/apache/http/conn/ssl/BrowserCompatHostnameVerifier.class +org/apache/http/conn/ssl/TrustStrategy.class +org/apache/http/conn/ssl/PrivateKeyStrategy.class +org/apache/http/conn/ssl/SSLContextBuilder$KeyManagerDelegate.class +org/apache/http/conn/ssl/X509HostnameVerifier.class +org/apache/http/conn/ssl/AbstractVerifier.class +org/apache/http/conn/ssl/SSLSocketFactory.class +org/apache/http/conn/ssl/SSLConnectionSocketFactory.class +org/apache/http/conn/ssl/SSLContexts.class +org/apache/http/conn/ssl/AllowAllHostnameVerifier.class +org/apache/http/conn/ssl/StrictHostnameVerifier.class +org/apache/http/conn/ssl/SSLContextBuilder.class +org/apache/http/conn/ssl/DefaultHostnameVerifier.class +org/apache/http/conn/ssl/SSLInitializationException.class +org/apache/http/conn/ssl/PrivateKeyDetails.class +org/apache/http/conn/ssl/NoopHostnameVerifier.class +org/apache/http/conn/ConnectionPoolTimeoutException.class +org/apache/http/conn/ConnectionReleaseTrigger.class +org/apache/http/conn/ClientConnectionManagerFactory.class +org/apache/http/conn/scheme/ +org/apache/http/conn/scheme/SchemeSocketFactoryAdaptor.class +org/apache/http/conn/scheme/SchemeLayeredSocketFactory.class +org/apache/http/conn/scheme/PlainSocketFactory.class +org/apache/http/conn/scheme/LayeredSocketFactoryAdaptor.class +org/apache/http/conn/scheme/Scheme.class +org/apache/http/conn/scheme/HostNameResolver.class +org/apache/http/conn/scheme/SchemeRegistry.class +org/apache/http/conn/scheme/SchemeLayeredSocketFactoryAdaptor2.class +org/apache/http/conn/scheme/SchemeLayeredSocketFactoryAdaptor.class +org/apache/http/conn/scheme/SocketFactory.class +org/apache/http/conn/scheme/SchemeSocketFactory.class +org/apache/http/conn/scheme/SocketFactoryAdaptor.class +org/apache/http/conn/scheme/LayeredSchemeSocketFactory.class +org/apache/http/conn/scheme/LayeredSocketFactory.class +org/apache/http/conn/ConnectTimeoutException.class +org/apache/http/conn/util/ +org/apache/http/conn/util/DomainType.class +org/apache/http/conn/util/InetAddressUtils.class +org/apache/http/conn/util/PublicSuffixList.class +org/apache/http/conn/util/PublicSuffixMatcher.class +org/apache/http/conn/util/PublicSuffixListParser.class +org/apache/http/conn/util/PublicSuffixMatcherLoader.class +org/apache/http/conn/HttpInetSocketAddress.class +org/apache/http/conn/HttpConnectionFactory.class +org/apache/http/conn/HttpHostConnectException.class +org/apache/http/conn/DnsResolver.class +org/apache/http/conn/MultihomePlainSocketFactory.class +org/apache/http/conn/UnsupportedSchemeException.class +org/apache/http/impl/auth/ +org/apache/http/impl/auth/NTLMEngineImpl$CipherGen.class +org/apache/http/impl/auth/NTLMScheme$State.class +org/apache/http/impl/auth/GGSSchemeBase$1.class +org/apache/http/impl/auth/NTLMEngineException.class +org/apache/http/impl/auth/KerberosSchemeFactory.class +org/apache/http/impl/auth/RFC2617Scheme.class +org/apache/http/impl/auth/NTLMScheme.class +org/apache/http/impl/auth/KerberosScheme.class +org/apache/http/impl/auth/HttpEntityDigester.class +org/apache/http/impl/auth/SPNegoScheme.class +org/apache/http/impl/auth/BasicSchemeFactory.class +org/apache/http/impl/auth/NegotiateScheme.class +org/apache/http/impl/auth/NTLMSchemeFactory.class +org/apache/http/impl/auth/NTLMEngineImpl$NTLMMessage.class +org/apache/http/impl/auth/GGSSchemeBase.class +org/apache/http/impl/auth/HttpAuthenticator$1.class +org/apache/http/impl/auth/NTLMEngine.class +org/apache/http/impl/auth/DigestScheme.class +org/apache/http/impl/auth/NTLMEngineImpl.class +org/apache/http/impl/auth/AuthSchemeBase.class +org/apache/http/impl/auth/NTLMEngineImpl$Type3Message.class +org/apache/http/impl/auth/NegotiateSchemeFactory.class +org/apache/http/impl/auth/SpnegoTokenGenerator.class +org/apache/http/impl/auth/NTLMEngineImpl$HMACMD5.class +org/apache/http/impl/auth/HttpAuthenticator.class +org/apache/http/impl/auth/GGSSchemeBase$State.class +org/apache/http/impl/auth/NTLMEngineImpl$MD4.class +org/apache/http/impl/auth/NTLMEngineImpl$Type2Message.class +org/apache/http/impl/auth/DigestSchemeFactory.class +org/apache/http/impl/auth/SPNegoSchemeFactory.class +org/apache/http/impl/auth/NTLMEngineImpl$Type1Message.class +org/apache/http/impl/auth/BasicScheme.class +org/apache/http/impl/auth/UnsupportedDigestAlgorithmException.class +org/apache/http/impl/cookie/ +org/apache/http/impl/cookie/BestMatchSpec.class +org/apache/http/impl/cookie/RFC2965DiscardAttributeHandler.class +org/apache/http/impl/cookie/DefaultCookieSpecProvider$CompatibilityLevel.class +org/apache/http/impl/cookie/BasicClientCookie2.class +org/apache/http/impl/cookie/BasicSecureHandler.class +org/apache/http/impl/cookie/RFC2109Spec.class +org/apache/http/impl/cookie/RFC2965Spec.class +org/apache/http/impl/cookie/PublicSuffixFilter.class +org/apache/http/impl/cookie/RFC6265CookieSpecProvider$2.class +org/apache/http/impl/cookie/BasicDomainHandler.class +org/apache/http/impl/cookie/DefaultCookieSpecProvider.class +org/apache/http/impl/cookie/RFC2109VersionHandler.class +org/apache/http/impl/cookie/RFC2109DomainHandler.class +org/apache/http/impl/cookie/BasicMaxAgeHandler.class +org/apache/http/impl/cookie/NetscapeDraftSpec.class +org/apache/http/impl/cookie/LaxExpiresHandler.class +org/apache/http/impl/cookie/BasicExpiresHandler.class +org/apache/http/impl/cookie/BrowserCompatSpec.class +org/apache/http/impl/cookie/RFC2965SpecFactory.class +org/apache/http/impl/cookie/DefaultCookieSpec.class +org/apache/http/impl/cookie/BrowserCompatSpec$1.class +org/apache/http/impl/cookie/BrowserCompatVersionAttributeHandler.class +org/apache/http/impl/cookie/IgnoreSpec.class +org/apache/http/impl/cookie/RFC6265CookieSpecProvider.class +org/apache/http/impl/cookie/BestMatchSpecFactory.class +org/apache/http/impl/cookie/RFC6265CookieSpecProvider$CompatibilityLevel.class +org/apache/http/impl/cookie/RFC6265StrictSpec.class +org/apache/http/impl/cookie/RFC2965PortAttributeHandler.class +org/apache/http/impl/cookie/IgnoreSpecProvider.class +org/apache/http/impl/cookie/BasicClientCookie.class +org/apache/http/impl/cookie/NetscapeDraftHeaderParser.class +org/apache/http/impl/cookie/DefaultCookieSpecProvider$1.class +org/apache/http/impl/cookie/BasicPathHandler.class +org/apache/http/impl/cookie/LaxMaxAgeHandler.class +org/apache/http/impl/cookie/RFC6265CookieSpecBase.class +org/apache/http/impl/cookie/RFC2965SpecProvider.class +org/apache/http/impl/cookie/NetscapeDomainHandler.class +org/apache/http/impl/cookie/RFC2965DomainAttributeHandler.class +org/apache/http/impl/cookie/PublicSuffixDomainFilter.class +org/apache/http/impl/cookie/IgnoreSpecFactory.class +org/apache/http/impl/cookie/RFC6265CookieSpecProvider$1.class +org/apache/http/impl/cookie/RFC2965VersionAttributeHandler.class +org/apache/http/impl/cookie/AbstractCookieAttributeHandler.class +org/apache/http/impl/cookie/BrowserCompatSpecFactory.class +org/apache/http/impl/cookie/RFC2109SpecProvider.class +org/apache/http/impl/cookie/BrowserCompatSpecFactory$SecurityLevel.class +org/apache/http/impl/cookie/NetscapeDraftSpecFactory.class +org/apache/http/impl/cookie/CookieSpecBase.class +org/apache/http/impl/cookie/RFC6265LaxSpec.class +org/apache/http/impl/cookie/DateParseException.class +org/apache/http/impl/cookie/RFC2109SpecFactory.class +org/apache/http/impl/cookie/RFC6265CookieSpec.class +org/apache/http/impl/cookie/PublicSuffixListParser.class +org/apache/http/impl/cookie/AbstractCookieSpec.class +org/apache/http/impl/cookie/BasicCommentHandler.class +org/apache/http/impl/cookie/DateUtils.class +org/apache/http/impl/cookie/RFC2965CommentUrlAttributeHandler.class +org/apache/http/impl/cookie/NetscapeDraftSpecProvider.class +org/apache/http/impl/client/ +org/apache/http/impl/client/TargetAuthenticationStrategy.class +org/apache/http/impl/client/LaxRedirectStrategy.class +org/apache/http/impl/client/NoopUserTokenHandler.class +org/apache/http/impl/client/RoutedRequest.class +org/apache/http/impl/client/AuthenticationStrategyImpl.class +org/apache/http/impl/client/MinimalHttpClient$1.class +org/apache/http/impl/client/CloseableHttpResponseProxy.class +org/apache/http/impl/client/DefaultProxyAuthenticationHandler.class +org/apache/http/impl/client/DefaultRedirectStrategy.class +org/apache/http/impl/client/FutureRequestExecutionService.class +org/apache/http/impl/client/FutureRequestExecutionMetrics$DurationCounter.class +org/apache/http/impl/client/HttpClientBuilder.class +org/apache/http/impl/client/AutoRetryHttpClient.class +org/apache/http/impl/client/BasicCredentialsProvider.class +org/apache/http/impl/client/AbstractResponseHandler.class +org/apache/http/impl/client/IdleConnectionEvictor$DefaultThreadFactory.class +org/apache/http/impl/client/RequestWrapper.class +org/apache/http/impl/client/HttpRequestFutureTask.class +org/apache/http/impl/client/ProxyClient.class +org/apache/http/impl/client/ContentEncodingHttpClient.class +org/apache/http/impl/client/RedirectLocations.class +org/apache/http/impl/client/DefaultHttpRequestRetryHandler.class +org/apache/http/impl/client/HttpRequestTaskCallable.class +org/apache/http/impl/client/StandardHttpRequestRetryHandler.class +org/apache/http/impl/client/AIMDBackoffManager.class +org/apache/http/impl/client/AbstractAuthenticationHandler.class +org/apache/http/impl/client/DecompressingHttpClient.class +org/apache/http/impl/client/SystemClock.class +org/apache/http/impl/client/DefaultRedirectStrategyAdaptor.class +org/apache/http/impl/client/EntityEnclosingRequestWrapper$EntityWrapper.class +org/apache/http/impl/client/AbstractHttpClient.class +org/apache/http/impl/client/Clock.class +org/apache/http/impl/client/DefaultConnectionKeepAliveStrategy.class +org/apache/http/impl/client/InternalHttpClient$1.class +org/apache/http/impl/client/SystemDefaultHttpClient.class +org/apache/http/impl/client/AuthenticationStrategyAdaptor.class +org/apache/http/impl/client/IdleConnectionEvictor.class +org/apache/http/impl/client/SystemDefaultCredentialsProvider.class +org/apache/http/impl/client/FutureRequestExecutionMetrics.class +org/apache/http/impl/client/InternalHttpClient.class +org/apache/http/impl/client/HttpClientBuilder$2.class +org/apache/http/impl/client/NullBackoffStrategy.class +org/apache/http/impl/client/DefaultBackoffStrategy.class +org/apache/http/impl/client/HttpAuthenticator.class +org/apache/http/impl/client/BasicCookieStore.class +org/apache/http/impl/client/EntityEnclosingRequestWrapper.class +org/apache/http/impl/client/CookieSpecRegistries.class +org/apache/http/impl/client/DefaultClientConnectionReuseStrategy.class +org/apache/http/impl/client/DefaultServiceUnavailableRetryStrategy.class +org/apache/http/impl/client/DefaultRedirectHandler.class +org/apache/http/impl/client/HttpClients.class +org/apache/http/impl/client/CloseableHttpClient.class +org/apache/http/impl/client/TunnelRefusedException.class +org/apache/http/impl/client/MinimalHttpClient.class +org/apache/http/impl/client/BasicAuthCache.class +org/apache/http/impl/client/BasicResponseHandler.class +org/apache/http/impl/client/DefaultUserTokenHandler.class +org/apache/http/impl/client/HttpClientBuilder$1.class +org/apache/http/impl/client/ClientParamsStack.class +org/apache/http/impl/client/DefaultRequestDirector.class +org/apache/http/impl/client/DefaultTargetAuthenticationHandler.class +org/apache/http/impl/client/IdleConnectionEvictor$1.class +org/apache/http/impl/client/DefaultHttpClient.class +org/apache/http/impl/client/ProxyAuthenticationStrategy.class +org/apache/http/impl/execchain/ +org/apache/http/impl/execchain/ServiceUnavailableRetryExec.class +org/apache/http/impl/execchain/RequestEntityProxy.class +org/apache/http/impl/execchain/ProtocolExec.class +org/apache/http/impl/execchain/MinimalClientExec.class +org/apache/http/impl/execchain/MainClientExec.class +org/apache/http/impl/execchain/RedirectExec.class +org/apache/http/impl/execchain/ClientExecChain.class +org/apache/http/impl/execchain/ConnectionHolder.class +org/apache/http/impl/execchain/HttpResponseProxy.class +org/apache/http/impl/execchain/RetryExec.class +org/apache/http/impl/execchain/TunnelRefusedException.class +org/apache/http/impl/execchain/RequestAbortedException.class +org/apache/http/impl/execchain/ResponseEntityProxy.class +org/apache/http/impl/execchain/BackoffStrategyExec.class +org/apache/http/impl/conn/ +org/apache/http/impl/conn/HttpPoolEntry.class +org/apache/http/impl/conn/DefaultClientConnection.class +org/apache/http/impl/conn/CPool.class +org/apache/http/impl/conn/PoolingHttpClientConnectionManager.class +org/apache/http/impl/conn/Wire.class +org/apache/http/impl/conn/DefaultHttpClientConnectionOperator.class +org/apache/http/impl/conn/IdleConnectionHandler.class +org/apache/http/impl/conn/ManagedHttpClientConnectionFactory.class +org/apache/http/impl/conn/SystemDefaultRoutePlanner$1.class +org/apache/http/impl/conn/CPoolProxy.class +org/apache/http/impl/conn/DefaultHttpRoutePlanner.class +org/apache/http/impl/conn/PoolingClientConnectionManager.class +org/apache/http/impl/conn/DefaultManagedHttpClientConnection.class +org/apache/http/impl/conn/LoggingSessionInputBuffer.class +org/apache/http/impl/conn/ConnectionShutdownException.class +org/apache/http/impl/conn/LoggingOutputStream.class +org/apache/http/impl/conn/ManagedClientConnectionImpl.class +org/apache/http/impl/conn/PoolingHttpClientConnectionManager$ConfigData.class +org/apache/http/impl/conn/DefaultResponseParser.class +org/apache/http/impl/conn/LoggingInputStream.class +org/apache/http/impl/conn/AbstractClientConnAdapter.class +org/apache/http/impl/conn/SystemDefaultRoutePlanner.class +org/apache/http/impl/conn/tsccm/ +org/apache/http/impl/conn/tsccm/ConnPoolByRoute.class +org/apache/http/impl/conn/tsccm/ThreadSafeClientConnManager$1.class +org/apache/http/impl/conn/tsccm/RouteSpecificPool.class +org/apache/http/impl/conn/tsccm/ConnPoolByRoute$1.class +org/apache/http/impl/conn/tsccm/PoolEntryRequest.class +org/apache/http/impl/conn/tsccm/ThreadSafeClientConnManager.class +org/apache/http/impl/conn/tsccm/WaitingThread.class +org/apache/http/impl/conn/tsccm/WaitingThreadAborter.class +org/apache/http/impl/conn/tsccm/RouteSpecificPool$1.class +org/apache/http/impl/conn/tsccm/AbstractConnPool.class +org/apache/http/impl/conn/tsccm/BasicPoolEntryRef.class +org/apache/http/impl/conn/tsccm/BasicPooledConnAdapter.class +org/apache/http/impl/conn/tsccm/BasicPoolEntry.class +org/apache/http/impl/conn/SingleClientConnManager$ConnAdapter.class +org/apache/http/impl/conn/PoolingHttpClientConnectionManager$InternalConnectionFactory.class +org/apache/http/impl/conn/DefaultHttpResponseParserFactory.class +org/apache/http/impl/conn/AbstractPoolEntry.class +org/apache/http/impl/conn/ProxySelectorRoutePlanner$1.class +org/apache/http/impl/conn/AbstractPooledConnAdapter.class +org/apache/http/impl/conn/SingleClientConnManager$PoolEntry.class +org/apache/http/impl/conn/HttpConnPool$InternalConnFactory.class +org/apache/http/impl/conn/SchemeRegistryFactory.class +org/apache/http/impl/conn/DefaultClientConnectionOperator.class +org/apache/http/impl/conn/LoggingManagedHttpClientConnection.class +org/apache/http/impl/conn/LoggingSessionOutputBuffer.class +org/apache/http/impl/conn/BasicHttpClientConnectionManager$1.class +org/apache/http/impl/conn/DefaultProxyRoutePlanner.class +org/apache/http/impl/conn/BasicClientConnectionManager$1.class +org/apache/http/impl/conn/PoolingHttpClientConnectionManager$1.class +org/apache/http/impl/conn/BasicHttpClientConnectionManager.class +org/apache/http/impl/conn/PoolingClientConnectionManager$1.class +org/apache/http/impl/conn/IdleConnectionHandler$TimeValues.class +org/apache/http/impl/conn/CPoolEntry.class +org/apache/http/impl/conn/DefaultSchemePortResolver.class +org/apache/http/impl/conn/SingleClientConnManager.class +org/apache/http/impl/conn/DefaultRoutePlanner.class +org/apache/http/impl/conn/InMemoryDnsResolver.class +org/apache/http/impl/conn/DefaultHttpResponseParser.class +org/apache/http/impl/conn/HttpConnPool.class +org/apache/http/impl/conn/BasicClientConnectionManager.class +org/apache/http/impl/conn/SingleClientConnManager$1.class +org/apache/http/impl/conn/ProxySelectorRoutePlanner.class +org/apache/http/impl/conn/SystemDefaultDnsResolver.class +mozilla/ +mozilla/public-suffix-list.txt +META-INF/maven/org.apache.httpcomponents/httpclient/ +META-INF/maven/org.apache.httpcomponents/httpclient/pom.xml +META-INF/maven/org.apache.httpcomponents/httpclient/pom.properties +META-INF/NOTICE.txt +META-INF/LICENSE.txt +org/apache/commons/ +org/apache/commons/logging/ +org/apache/commons/logging/impl/ +org/apache/commons/logging/impl/AvalonLogger.class +org/apache/commons/logging/impl/SimpleLog.class +org/apache/commons/logging/impl/Log4JLogger.class +org/apache/commons/logging/impl/WeakHashtable.class +org/apache/commons/logging/impl/WeakHashtable$1.class +org/apache/commons/logging/impl/Jdk14Logger.class +org/apache/commons/logging/impl/ServletContextCleaner.class +org/apache/commons/logging/impl/WeakHashtable$WeakKey.class +org/apache/commons/logging/impl/NoOpLog.class +org/apache/commons/logging/impl/LogKitLogger.class +org/apache/commons/logging/impl/LogFactoryImpl$3.class +org/apache/commons/logging/impl/LogFactoryImpl$1.class +org/apache/commons/logging/impl/WeakHashtable$Referenced.class +org/apache/commons/logging/impl/SimpleLog$1.class +org/apache/commons/logging/impl/Jdk13LumberjackLogger.class +org/apache/commons/logging/impl/LogFactoryImpl.class +org/apache/commons/logging/impl/LogFactoryImpl$2.class +org/apache/commons/logging/impl/WeakHashtable$Entry.class +org/apache/commons/logging/LogSource.class +org/apache/commons/logging/LogFactory$4.class +org/apache/commons/logging/LogFactory$3.class +org/apache/commons/logging/LogFactory$6.class +org/apache/commons/logging/LogConfigurationException.class +org/apache/commons/logging/LogFactory.class +org/apache/commons/logging/LogFactory$5.class +org/apache/commons/logging/LogFactory$1.class +org/apache/commons/logging/LogFactory$2.class +org/apache/commons/logging/Log.class +META-INF/maven/commons-logging/ +META-INF/maven/commons-logging/commons-logging/ +META-INF/maven/commons-logging/commons-logging/pom.xml +META-INF/maven/commons-logging/commons-logging/pom.properties +org/apache/commons/codec/ +org/apache/commons/codec/binary/ +org/apache/commons/codec/binary/Base32.class +org/apache/commons/codec/binary/Base32InputStream.class +org/apache/commons/codec/binary/Base32OutputStream.class +org/apache/commons/codec/binary/Base64.class +org/apache/commons/codec/binary/Base64InputStream.class +org/apache/commons/codec/binary/Base64OutputStream.class +org/apache/commons/codec/binary/BaseNCodec$Context.class +org/apache/commons/codec/binary/BaseNCodec.class +org/apache/commons/codec/binary/BaseNCodecInputStream.class +org/apache/commons/codec/binary/BaseNCodecOutputStream.class +org/apache/commons/codec/binary/BinaryCodec.class +org/apache/commons/codec/binary/Hex.class +org/apache/commons/codec/binary/StringUtils.class +org/apache/commons/codec/BinaryDecoder.class +org/apache/commons/codec/BinaryEncoder.class +org/apache/commons/codec/CharEncoding.class +org/apache/commons/codec/Charsets.class +org/apache/commons/codec/Decoder.class +org/apache/commons/codec/DecoderException.class +org/apache/commons/codec/digest/ +org/apache/commons/codec/digest/B64.class +org/apache/commons/codec/digest/Crypt.class +org/apache/commons/codec/digest/DigestUtils.class +org/apache/commons/codec/digest/Md5Crypt.class +org/apache/commons/codec/digest/MessageDigestAlgorithms.class +org/apache/commons/codec/digest/Sha2Crypt.class +org/apache/commons/codec/digest/UnixCrypt.class +org/apache/commons/codec/Encoder.class +org/apache/commons/codec/EncoderException.class +org/apache/commons/codec/language/ +org/apache/commons/codec/language/AbstractCaverphone.class +org/apache/commons/codec/language/bm/ +org/apache/commons/codec/language/bm/ash_approx_any.txt +org/apache/commons/codec/language/bm/ash_approx_common.txt +org/apache/commons/codec/language/bm/ash_approx_cyrillic.txt +org/apache/commons/codec/language/bm/ash_approx_english.txt +org/apache/commons/codec/language/bm/ash_approx_french.txt +org/apache/commons/codec/language/bm/ash_approx_german.txt +org/apache/commons/codec/language/bm/ash_approx_hebrew.txt +org/apache/commons/codec/language/bm/ash_approx_hungarian.txt +org/apache/commons/codec/language/bm/ash_approx_polish.txt +org/apache/commons/codec/language/bm/ash_approx_romanian.txt +org/apache/commons/codec/language/bm/ash_approx_russian.txt +org/apache/commons/codec/language/bm/ash_approx_spanish.txt +org/apache/commons/codec/language/bm/ash_exact_any.txt +org/apache/commons/codec/language/bm/ash_exact_approx_common.txt +org/apache/commons/codec/language/bm/ash_exact_common.txt +org/apache/commons/codec/language/bm/ash_exact_cyrillic.txt +org/apache/commons/codec/language/bm/ash_exact_english.txt +org/apache/commons/codec/language/bm/ash_exact_french.txt +org/apache/commons/codec/language/bm/ash_exact_german.txt +org/apache/commons/codec/language/bm/ash_exact_hebrew.txt +org/apache/commons/codec/language/bm/ash_exact_hungarian.txt +org/apache/commons/codec/language/bm/ash_exact_polish.txt +org/apache/commons/codec/language/bm/ash_exact_romanian.txt +org/apache/commons/codec/language/bm/ash_exact_russian.txt +org/apache/commons/codec/language/bm/ash_exact_spanish.txt +org/apache/commons/codec/language/bm/ash_hebrew_common.txt +org/apache/commons/codec/language/bm/ash_languages.txt +org/apache/commons/codec/language/bm/ash_rules_any.txt +org/apache/commons/codec/language/bm/ash_rules_cyrillic.txt +org/apache/commons/codec/language/bm/ash_rules_english.txt +org/apache/commons/codec/language/bm/ash_rules_french.txt +org/apache/commons/codec/language/bm/ash_rules_german.txt +org/apache/commons/codec/language/bm/ash_rules_hebrew.txt +org/apache/commons/codec/language/bm/ash_rules_hungarian.txt +org/apache/commons/codec/language/bm/ash_rules_polish.txt +org/apache/commons/codec/language/bm/ash_rules_romanian.txt +org/apache/commons/codec/language/bm/ash_rules_russian.txt +org/apache/commons/codec/language/bm/ash_rules_spanish.txt +org/apache/commons/codec/language/bm/BeiderMorseEncoder.class +org/apache/commons/codec/language/bm/gen_approx_any.txt +org/apache/commons/codec/language/bm/gen_approx_arabic.txt +org/apache/commons/codec/language/bm/gen_approx_common.txt +org/apache/commons/codec/language/bm/gen_approx_cyrillic.txt +org/apache/commons/codec/language/bm/gen_approx_czech.txt +org/apache/commons/codec/language/bm/gen_approx_dutch.txt +org/apache/commons/codec/language/bm/gen_approx_english.txt +org/apache/commons/codec/language/bm/gen_approx_french.txt +org/apache/commons/codec/language/bm/gen_approx_german.txt +org/apache/commons/codec/language/bm/gen_approx_greek.txt +org/apache/commons/codec/language/bm/gen_approx_greeklatin.txt +org/apache/commons/codec/language/bm/gen_approx_hebrew.txt +org/apache/commons/codec/language/bm/gen_approx_hungarian.txt +org/apache/commons/codec/language/bm/gen_approx_italian.txt +org/apache/commons/codec/language/bm/gen_approx_polish.txt +org/apache/commons/codec/language/bm/gen_approx_portuguese.txt +org/apache/commons/codec/language/bm/gen_approx_romanian.txt +org/apache/commons/codec/language/bm/gen_approx_russian.txt +org/apache/commons/codec/language/bm/gen_approx_spanish.txt +org/apache/commons/codec/language/bm/gen_approx_turkish.txt +org/apache/commons/codec/language/bm/gen_exact_any.txt +org/apache/commons/codec/language/bm/gen_exact_approx_common.txt +org/apache/commons/codec/language/bm/gen_exact_arabic.txt +org/apache/commons/codec/language/bm/gen_exact_common.txt +org/apache/commons/codec/language/bm/gen_exact_cyrillic.txt +org/apache/commons/codec/language/bm/gen_exact_czech.txt +org/apache/commons/codec/language/bm/gen_exact_dutch.txt +org/apache/commons/codec/language/bm/gen_exact_english.txt +org/apache/commons/codec/language/bm/gen_exact_french.txt +org/apache/commons/codec/language/bm/gen_exact_german.txt +org/apache/commons/codec/language/bm/gen_exact_greek.txt +org/apache/commons/codec/language/bm/gen_exact_greeklatin.txt +org/apache/commons/codec/language/bm/gen_exact_hebrew.txt +org/apache/commons/codec/language/bm/gen_exact_hungarian.txt +org/apache/commons/codec/language/bm/gen_exact_italian.txt +org/apache/commons/codec/language/bm/gen_exact_polish.txt +org/apache/commons/codec/language/bm/gen_exact_portuguese.txt +org/apache/commons/codec/language/bm/gen_exact_romanian.txt +org/apache/commons/codec/language/bm/gen_exact_russian.txt +org/apache/commons/codec/language/bm/gen_exact_spanish.txt +org/apache/commons/codec/language/bm/gen_exact_turkish.txt +org/apache/commons/codec/language/bm/gen_hebrew_common.txt +org/apache/commons/codec/language/bm/gen_languages.txt +org/apache/commons/codec/language/bm/gen_rules_any.txt +org/apache/commons/codec/language/bm/gen_rules_arabic.txt +org/apache/commons/codec/language/bm/gen_rules_cyrillic.txt +org/apache/commons/codec/language/bm/gen_rules_czech.txt +org/apache/commons/codec/language/bm/gen_rules_dutch.txt +org/apache/commons/codec/language/bm/gen_rules_english.txt +org/apache/commons/codec/language/bm/gen_rules_french.txt +org/apache/commons/codec/language/bm/gen_rules_german.txt +org/apache/commons/codec/language/bm/gen_rules_greek.txt +org/apache/commons/codec/language/bm/gen_rules_greeklatin.txt +org/apache/commons/codec/language/bm/gen_rules_hebrew.txt +org/apache/commons/codec/language/bm/gen_rules_hungarian.txt +org/apache/commons/codec/language/bm/gen_rules_italian.txt +org/apache/commons/codec/language/bm/gen_rules_polish.txt +org/apache/commons/codec/language/bm/gen_rules_portuguese.txt +org/apache/commons/codec/language/bm/gen_rules_romanian.txt +org/apache/commons/codec/language/bm/gen_rules_russian.txt +org/apache/commons/codec/language/bm/gen_rules_spanish.txt +org/apache/commons/codec/language/bm/gen_rules_turkish.txt +org/apache/commons/codec/language/bm/Lang$1.class +org/apache/commons/codec/language/bm/Lang$LangRule.class +org/apache/commons/codec/language/bm/Lang.class +org/apache/commons/codec/language/bm/lang.txt +org/apache/commons/codec/language/bm/Languages$1.class +org/apache/commons/codec/language/bm/Languages$2.class +org/apache/commons/codec/language/bm/Languages$LanguageSet.class +org/apache/commons/codec/language/bm/Languages$SomeLanguages.class +org/apache/commons/codec/language/bm/Languages.class +org/apache/commons/codec/language/bm/NameType.class +org/apache/commons/codec/language/bm/PhoneticEngine$1.class +org/apache/commons/codec/language/bm/PhoneticEngine$PhonemeBuilder.class +org/apache/commons/codec/language/bm/PhoneticEngine$RulesApplication.class +org/apache/commons/codec/language/bm/PhoneticEngine.class +org/apache/commons/codec/language/bm/ResourceConstants.class +org/apache/commons/codec/language/bm/Rule$1.class +org/apache/commons/codec/language/bm/Rule$10.class +org/apache/commons/codec/language/bm/Rule$2.class +org/apache/commons/codec/language/bm/Rule$3.class +org/apache/commons/codec/language/bm/Rule$4.class +org/apache/commons/codec/language/bm/Rule$5.class +org/apache/commons/codec/language/bm/Rule$6.class +org/apache/commons/codec/language/bm/Rule$7.class +org/apache/commons/codec/language/bm/Rule$8.class +org/apache/commons/codec/language/bm/Rule$9.class +org/apache/commons/codec/language/bm/Rule$Phoneme$1.class +org/apache/commons/codec/language/bm/Rule$Phoneme.class +org/apache/commons/codec/language/bm/Rule$PhonemeExpr.class +org/apache/commons/codec/language/bm/Rule$PhonemeList.class +org/apache/commons/codec/language/bm/Rule$RPattern.class +org/apache/commons/codec/language/bm/Rule.class +org/apache/commons/codec/language/bm/RuleType.class +org/apache/commons/codec/language/bm/sep_approx_any.txt +org/apache/commons/codec/language/bm/sep_approx_common.txt +org/apache/commons/codec/language/bm/sep_approx_french.txt +org/apache/commons/codec/language/bm/sep_approx_hebrew.txt +org/apache/commons/codec/language/bm/sep_approx_italian.txt +org/apache/commons/codec/language/bm/sep_approx_portuguese.txt +org/apache/commons/codec/language/bm/sep_approx_spanish.txt +org/apache/commons/codec/language/bm/sep_exact_any.txt +org/apache/commons/codec/language/bm/sep_exact_approx_common.txt +org/apache/commons/codec/language/bm/sep_exact_common.txt +org/apache/commons/codec/language/bm/sep_exact_french.txt +org/apache/commons/codec/language/bm/sep_exact_hebrew.txt +org/apache/commons/codec/language/bm/sep_exact_italian.txt +org/apache/commons/codec/language/bm/sep_exact_portuguese.txt +org/apache/commons/codec/language/bm/sep_exact_spanish.txt +org/apache/commons/codec/language/bm/sep_hebrew_common.txt +org/apache/commons/codec/language/bm/sep_languages.txt +org/apache/commons/codec/language/bm/sep_rules_any.txt +org/apache/commons/codec/language/bm/sep_rules_french.txt +org/apache/commons/codec/language/bm/sep_rules_hebrew.txt +org/apache/commons/codec/language/bm/sep_rules_italian.txt +org/apache/commons/codec/language/bm/sep_rules_portuguese.txt +org/apache/commons/codec/language/bm/sep_rules_spanish.txt +org/apache/commons/codec/language/Caverphone.class +org/apache/commons/codec/language/Caverphone1.class +org/apache/commons/codec/language/Caverphone2.class +org/apache/commons/codec/language/ColognePhonetic$CologneBuffer.class +org/apache/commons/codec/language/ColognePhonetic$CologneInputBuffer.class +org/apache/commons/codec/language/ColognePhonetic$CologneOutputBuffer.class +org/apache/commons/codec/language/ColognePhonetic.class +org/apache/commons/codec/language/DoubleMetaphone$DoubleMetaphoneResult.class +org/apache/commons/codec/language/DoubleMetaphone.class +org/apache/commons/codec/language/MatchRatingApproachEncoder.class +org/apache/commons/codec/language/Metaphone.class +org/apache/commons/codec/language/Nysiis.class +org/apache/commons/codec/language/RefinedSoundex.class +org/apache/commons/codec/language/Soundex.class +org/apache/commons/codec/language/SoundexUtils.class +org/apache/commons/codec/net/ +org/apache/commons/codec/net/BCodec.class +org/apache/commons/codec/net/QCodec.class +org/apache/commons/codec/net/QuotedPrintableCodec.class +org/apache/commons/codec/net/RFC1522Codec.class +org/apache/commons/codec/net/URLCodec.class +org/apache/commons/codec/net/Utils.class +org/apache/commons/codec/StringDecoder.class +org/apache/commons/codec/StringEncoder.class +org/apache/commons/codec/StringEncoderComparator.class +META-INF/maven/commons-codec/ +META-INF/maven/commons-codec/commons-codec/ +META-INF/maven/commons-codec/commons-codec/pom.xml +META-INF/maven/commons-codec/commons-codec/pom.properties +META-INF/maven/com.fasterxml.jackson.core/ +META-INF/maven/com.fasterxml.jackson.core/jackson-core/ +META-INF/maven/com.fasterxml.jackson.core/jackson-core/pom.properties +META-INF/maven/com.fasterxml.jackson.core/jackson-core/pom.xml +META-INF/services/ +META-INF/services/com.fasterxml.jackson.core.JsonFactory +com/fasterxml/ +com/fasterxml/jackson/ +com/fasterxml/jackson/core/ +com/fasterxml/jackson/core/Base64Variant.class +com/fasterxml/jackson/core/Base64Variants.class +com/fasterxml/jackson/core/FormatFeature.class +com/fasterxml/jackson/core/FormatSchema.class +com/fasterxml/jackson/core/JsonEncoding.class +com/fasterxml/jackson/core/JsonFactory$Feature.class +com/fasterxml/jackson/core/JsonFactory.class +com/fasterxml/jackson/core/JsonGenerationException.class +com/fasterxml/jackson/core/JsonGenerator$1.class +com/fasterxml/jackson/core/JsonGenerator$Feature.class +com/fasterxml/jackson/core/JsonGenerator.class +com/fasterxml/jackson/core/JsonLocation.class +com/fasterxml/jackson/core/JsonParseException.class +com/fasterxml/jackson/core/JsonParser$Feature.class +com/fasterxml/jackson/core/JsonParser$NumberType.class +com/fasterxml/jackson/core/JsonParser.class +com/fasterxml/jackson/core/JsonPointer.class +com/fasterxml/jackson/core/JsonProcessingException.class +com/fasterxml/jackson/core/JsonStreamContext.class +com/fasterxml/jackson/core/JsonToken.class +com/fasterxml/jackson/core/JsonTokenId.class +com/fasterxml/jackson/core/JsonpCharacterEscapes.class +com/fasterxml/jackson/core/ObjectCodec.class +com/fasterxml/jackson/core/PrettyPrinter.class +com/fasterxml/jackson/core/SerializableString.class +com/fasterxml/jackson/core/TreeCodec.class +com/fasterxml/jackson/core/TreeNode.class +com/fasterxml/jackson/core/Version.class +com/fasterxml/jackson/core/Versioned.class +com/fasterxml/jackson/core/async/ +com/fasterxml/jackson/core/async/ByteArrayFeeder.class +com/fasterxml/jackson/core/async/ByteBufferFeeder.class +com/fasterxml/jackson/core/async/NonBlockingInputFeeder.class +com/fasterxml/jackson/core/base/ +com/fasterxml/jackson/core/base/GeneratorBase.class +com/fasterxml/jackson/core/base/ParserBase.class +com/fasterxml/jackson/core/base/ParserMinimalBase.class +com/fasterxml/jackson/core/filter/ +com/fasterxml/jackson/core/filter/FilteringGeneratorDelegate.class +com/fasterxml/jackson/core/filter/FilteringParserDelegate.class +com/fasterxml/jackson/core/filter/JsonPointerBasedFilter.class +com/fasterxml/jackson/core/filter/TokenFilter.class +com/fasterxml/jackson/core/filter/TokenFilterContext.class +com/fasterxml/jackson/core/format/ +com/fasterxml/jackson/core/format/DataFormatDetector.class +com/fasterxml/jackson/core/format/DataFormatMatcher.class +com/fasterxml/jackson/core/format/InputAccessor$Std.class +com/fasterxml/jackson/core/format/InputAccessor.class +com/fasterxml/jackson/core/format/MatchStrength.class +com/fasterxml/jackson/core/io/ +com/fasterxml/jackson/core/io/CharTypes.class +com/fasterxml/jackson/core/io/CharacterEscapes.class +com/fasterxml/jackson/core/io/DataOutputAsStream.class +com/fasterxml/jackson/core/io/IOContext.class +com/fasterxml/jackson/core/io/InputDecorator.class +com/fasterxml/jackson/core/io/JsonEOFException.class +com/fasterxml/jackson/core/io/JsonStringEncoder.class +com/fasterxml/jackson/core/io/MergedStream.class +com/fasterxml/jackson/core/io/NumberInput.class +com/fasterxml/jackson/core/io/NumberOutput.class +com/fasterxml/jackson/core/io/OutputDecorator.class +com/fasterxml/jackson/core/io/SegmentedStringWriter.class +com/fasterxml/jackson/core/io/SerializedString.class +com/fasterxml/jackson/core/io/UTF32Reader.class +com/fasterxml/jackson/core/io/UTF8Writer.class +com/fasterxml/jackson/core/json/ +com/fasterxml/jackson/core/json/ByteSourceJsonBootstrapper.class +com/fasterxml/jackson/core/json/DupDetector.class +com/fasterxml/jackson/core/json/JsonGeneratorImpl.class +com/fasterxml/jackson/core/json/JsonReadContext.class +com/fasterxml/jackson/core/json/JsonWriteContext.class +com/fasterxml/jackson/core/json/PackageVersion.class +com/fasterxml/jackson/core/json/ReaderBasedJsonParser.class +com/fasterxml/jackson/core/json/UTF8DataInputJsonParser.class +com/fasterxml/jackson/core/json/UTF8JsonGenerator.class +com/fasterxml/jackson/core/json/UTF8StreamJsonParser.class +com/fasterxml/jackson/core/json/WriterBasedJsonGenerator.class +com/fasterxml/jackson/core/json/async/ +com/fasterxml/jackson/core/json/async/NonBlockingJsonParser.class +com/fasterxml/jackson/core/json/async/NonBlockingJsonParserBase.class +com/fasterxml/jackson/core/sym/ +com/fasterxml/jackson/core/sym/ByteQuadsCanonicalizer$TableInfo.class +com/fasterxml/jackson/core/sym/ByteQuadsCanonicalizer.class +com/fasterxml/jackson/core/sym/CharsToNameCanonicalizer$Bucket.class +com/fasterxml/jackson/core/sym/CharsToNameCanonicalizer$TableInfo.class +com/fasterxml/jackson/core/sym/CharsToNameCanonicalizer.class +com/fasterxml/jackson/core/sym/Name.class +com/fasterxml/jackson/core/sym/Name1.class +com/fasterxml/jackson/core/sym/Name2.class +com/fasterxml/jackson/core/sym/Name3.class +com/fasterxml/jackson/core/sym/NameN.class +com/fasterxml/jackson/core/type/ +com/fasterxml/jackson/core/type/ResolvedType.class +com/fasterxml/jackson/core/type/TypeReference.class +com/fasterxml/jackson/core/type/WritableTypeId$Inclusion.class +com/fasterxml/jackson/core/type/WritableTypeId.class +com/fasterxml/jackson/core/util/ +com/fasterxml/jackson/core/util/BufferRecycler.class +com/fasterxml/jackson/core/util/BufferRecyclers.class +com/fasterxml/jackson/core/util/ByteArrayBuilder.class +com/fasterxml/jackson/core/util/DefaultIndenter.class +com/fasterxml/jackson/core/util/DefaultPrettyPrinter$FixedSpaceIndenter.class +com/fasterxml/jackson/core/util/DefaultPrettyPrinter$Indenter.class +com/fasterxml/jackson/core/util/DefaultPrettyPrinter$NopIndenter.class +com/fasterxml/jackson/core/util/DefaultPrettyPrinter.class +com/fasterxml/jackson/core/util/Instantiatable.class +com/fasterxml/jackson/core/util/InternCache.class +com/fasterxml/jackson/core/util/JsonGeneratorDelegate.class +com/fasterxml/jackson/core/util/JsonParserDelegate.class +com/fasterxml/jackson/core/util/JsonParserSequence.class +com/fasterxml/jackson/core/util/MinimalPrettyPrinter.class +com/fasterxml/jackson/core/util/RequestPayload.class +com/fasterxml/jackson/core/util/Separators.class +com/fasterxml/jackson/core/util/TextBuffer.class +com/fasterxml/jackson/core/util/ThreadLocalBufferManager$ThreadLocalBufferManagerHolder.class +com/fasterxml/jackson/core/util/ThreadLocalBufferManager.class +com/fasterxml/jackson/core/util/VersionUtil.class +META-INF/maven/com.fasterxml.jackson.core/jackson-annotations/ +META-INF/maven/com.fasterxml.jackson.core/jackson-annotations/pom.properties +META-INF/maven/com.fasterxml.jackson.core/jackson-annotations/pom.xml +com/fasterxml/jackson/annotation/ +com/fasterxml/jackson/annotation/JacksonAnnotation.class +com/fasterxml/jackson/annotation/JacksonAnnotationValue.class +com/fasterxml/jackson/annotation/JacksonAnnotationsInside.class +com/fasterxml/jackson/annotation/JacksonInject$Value.class +com/fasterxml/jackson/annotation/JacksonInject.class +com/fasterxml/jackson/annotation/JsonAlias.class +com/fasterxml/jackson/annotation/JsonAnyGetter.class +com/fasterxml/jackson/annotation/JsonAnySetter.class +com/fasterxml/jackson/annotation/JsonAutoDetect$1.class +com/fasterxml/jackson/annotation/JsonAutoDetect$Value.class +com/fasterxml/jackson/annotation/JsonAutoDetect$Visibility.class +com/fasterxml/jackson/annotation/JsonAutoDetect.class +com/fasterxml/jackson/annotation/JsonBackReference.class +com/fasterxml/jackson/annotation/JsonClassDescription.class +com/fasterxml/jackson/annotation/JsonCreator$Mode.class +com/fasterxml/jackson/annotation/JsonCreator.class +com/fasterxml/jackson/annotation/JsonEnumDefaultValue.class +com/fasterxml/jackson/annotation/JsonFilter.class +com/fasterxml/jackson/annotation/JsonFormat$Feature.class +com/fasterxml/jackson/annotation/JsonFormat$Features.class +com/fasterxml/jackson/annotation/JsonFormat$Shape.class +com/fasterxml/jackson/annotation/JsonFormat$Value.class +com/fasterxml/jackson/annotation/JsonFormat.class +com/fasterxml/jackson/annotation/JsonGetter.class +com/fasterxml/jackson/annotation/JsonIdentityInfo.class +com/fasterxml/jackson/annotation/JsonIdentityReference.class +com/fasterxml/jackson/annotation/JsonIgnore.class +com/fasterxml/jackson/annotation/JsonIgnoreProperties$Value.class +com/fasterxml/jackson/annotation/JsonIgnoreProperties.class +com/fasterxml/jackson/annotation/JsonIgnoreType.class +com/fasterxml/jackson/annotation/JsonInclude$Include.class +com/fasterxml/jackson/annotation/JsonInclude$Value.class +com/fasterxml/jackson/annotation/JsonInclude.class +com/fasterxml/jackson/annotation/JsonManagedReference.class +com/fasterxml/jackson/annotation/JsonMerge.class +com/fasterxml/jackson/annotation/JsonProperty$Access.class +com/fasterxml/jackson/annotation/JsonProperty.class +com/fasterxml/jackson/annotation/JsonPropertyDescription.class +com/fasterxml/jackson/annotation/JsonPropertyOrder.class +com/fasterxml/jackson/annotation/JsonRawValue.class +com/fasterxml/jackson/annotation/JsonRootName.class +com/fasterxml/jackson/annotation/JsonSetter$Value.class +com/fasterxml/jackson/annotation/JsonSetter.class +com/fasterxml/jackson/annotation/JsonSubTypes$Type.class +com/fasterxml/jackson/annotation/JsonSubTypes.class +com/fasterxml/jackson/annotation/JsonTypeId.class +com/fasterxml/jackson/annotation/JsonTypeInfo$As.class +com/fasterxml/jackson/annotation/JsonTypeInfo$Id.class +com/fasterxml/jackson/annotation/JsonTypeInfo$None.class +com/fasterxml/jackson/annotation/JsonTypeInfo.class +com/fasterxml/jackson/annotation/JsonTypeName.class +com/fasterxml/jackson/annotation/JsonUnwrapped.class +com/fasterxml/jackson/annotation/JsonValue.class +com/fasterxml/jackson/annotation/JsonView.class +com/fasterxml/jackson/annotation/Nulls.class +com/fasterxml/jackson/annotation/ObjectIdGenerator$IdKey.class +com/fasterxml/jackson/annotation/ObjectIdGenerator.class +com/fasterxml/jackson/annotation/ObjectIdGenerators$Base.class +com/fasterxml/jackson/annotation/ObjectIdGenerators$IntSequenceGenerator.class +com/fasterxml/jackson/annotation/ObjectIdGenerators$None.class +com/fasterxml/jackson/annotation/ObjectIdGenerators$PropertyGenerator.class +com/fasterxml/jackson/annotation/ObjectIdGenerators$StringIdGenerator.class +com/fasterxml/jackson/annotation/ObjectIdGenerators$UUIDGenerator.class +com/fasterxml/jackson/annotation/ObjectIdGenerators.class +com/fasterxml/jackson/annotation/ObjectIdResolver.class +com/fasterxml/jackson/annotation/OptBoolean.class +com/fasterxml/jackson/annotation/PropertyAccessor.class +com/fasterxml/jackson/annotation/SimpleObjectIdResolver.class +META-INF/maven/com.fasterxml.jackson.core/jackson-databind/ +META-INF/maven/com.fasterxml.jackson.core/jackson-databind/pom.properties +META-INF/maven/com.fasterxml.jackson.core/jackson-databind/pom.xml +META-INF/services/com.fasterxml.jackson.core.ObjectCodec +com/fasterxml/jackson/databind/ +com/fasterxml/jackson/databind/AbstractTypeResolver.class +com/fasterxml/jackson/databind/AnnotationIntrospector$ReferenceProperty$Type.class +com/fasterxml/jackson/databind/AnnotationIntrospector$ReferenceProperty.class +com/fasterxml/jackson/databind/AnnotationIntrospector.class +com/fasterxml/jackson/databind/BeanDescription.class +com/fasterxml/jackson/databind/BeanProperty$Bogus.class +com/fasterxml/jackson/databind/BeanProperty$Std.class +com/fasterxml/jackson/databind/BeanProperty.class +com/fasterxml/jackson/databind/DatabindContext.class +com/fasterxml/jackson/databind/DeserializationConfig.class +com/fasterxml/jackson/databind/DeserializationContext.class +com/fasterxml/jackson/databind/DeserializationFeature.class +com/fasterxml/jackson/databind/InjectableValues$Std.class +com/fasterxml/jackson/databind/InjectableValues.class +com/fasterxml/jackson/databind/JavaType.class +com/fasterxml/jackson/databind/JsonDeserializer$None.class +com/fasterxml/jackson/databind/JsonDeserializer.class +com/fasterxml/jackson/databind/JsonMappingException$Reference.class +com/fasterxml/jackson/databind/JsonMappingException.class +com/fasterxml/jackson/databind/JsonNode$1.class +com/fasterxml/jackson/databind/JsonNode.class +com/fasterxml/jackson/databind/JsonSerializable$Base.class +com/fasterxml/jackson/databind/JsonSerializable.class +com/fasterxml/jackson/databind/JsonSerializer$None.class +com/fasterxml/jackson/databind/JsonSerializer.class +com/fasterxml/jackson/databind/KeyDeserializer$None.class +com/fasterxml/jackson/databind/KeyDeserializer.class +com/fasterxml/jackson/databind/MapperFeature.class +com/fasterxml/jackson/databind/MappingIterator.class +com/fasterxml/jackson/databind/MappingJsonFactory.class +com/fasterxml/jackson/databind/Module$SetupContext.class +com/fasterxml/jackson/databind/Module.class +com/fasterxml/jackson/databind/ObjectMapper$1.class +com/fasterxml/jackson/databind/ObjectMapper$2.class +com/fasterxml/jackson/databind/ObjectMapper$3.class +com/fasterxml/jackson/databind/ObjectMapper$DefaultTypeResolverBuilder.class +com/fasterxml/jackson/databind/ObjectMapper$DefaultTyping.class +com/fasterxml/jackson/databind/ObjectMapper.class +com/fasterxml/jackson/databind/ObjectReader.class +com/fasterxml/jackson/databind/ObjectWriter$GeneratorSettings.class +com/fasterxml/jackson/databind/ObjectWriter$Prefetch.class +com/fasterxml/jackson/databind/ObjectWriter.class +com/fasterxml/jackson/databind/PropertyMetadata$MergeInfo.class +com/fasterxml/jackson/databind/PropertyMetadata.class +com/fasterxml/jackson/databind/PropertyName.class +com/fasterxml/jackson/databind/PropertyNamingStrategy$KebabCaseStrategy.class +com/fasterxml/jackson/databind/PropertyNamingStrategy$LowerCaseStrategy.class +com/fasterxml/jackson/databind/PropertyNamingStrategy$LowerCaseWithUnderscoresStrategy.class +com/fasterxml/jackson/databind/PropertyNamingStrategy$PascalCaseStrategy.class +com/fasterxml/jackson/databind/PropertyNamingStrategy$PropertyNamingStrategyBase.class +com/fasterxml/jackson/databind/PropertyNamingStrategy$SnakeCaseStrategy.class +com/fasterxml/jackson/databind/PropertyNamingStrategy$UpperCamelCaseStrategy.class +com/fasterxml/jackson/databind/PropertyNamingStrategy.class +com/fasterxml/jackson/databind/RuntimeJsonMappingException.class +com/fasterxml/jackson/databind/SequenceWriter.class +com/fasterxml/jackson/databind/SerializationConfig.class +com/fasterxml/jackson/databind/SerializationFeature.class +com/fasterxml/jackson/databind/SerializerProvider.class +com/fasterxml/jackson/databind/annotation/ +com/fasterxml/jackson/databind/annotation/JacksonStdImpl.class +com/fasterxml/jackson/databind/annotation/JsonAppend$Attr.class +com/fasterxml/jackson/databind/annotation/JsonAppend$Prop.class +com/fasterxml/jackson/databind/annotation/JsonAppend.class +com/fasterxml/jackson/databind/annotation/JsonDeserialize.class +com/fasterxml/jackson/databind/annotation/JsonNaming.class +com/fasterxml/jackson/databind/annotation/JsonPOJOBuilder$Value.class +com/fasterxml/jackson/databind/annotation/JsonPOJOBuilder.class +com/fasterxml/jackson/databind/annotation/JsonSerialize$Inclusion.class +com/fasterxml/jackson/databind/annotation/JsonSerialize$Typing.class +com/fasterxml/jackson/databind/annotation/JsonSerialize.class +com/fasterxml/jackson/databind/annotation/JsonTypeIdResolver.class +com/fasterxml/jackson/databind/annotation/JsonTypeResolver.class +com/fasterxml/jackson/databind/annotation/JsonValueInstantiator.class +com/fasterxml/jackson/databind/annotation/NoClass.class +com/fasterxml/jackson/databind/cfg/ +com/fasterxml/jackson/databind/cfg/BaseSettings.class +com/fasterxml/jackson/databind/cfg/ConfigFeature.class +com/fasterxml/jackson/databind/cfg/ConfigOverride$Empty.class +com/fasterxml/jackson/databind/cfg/ConfigOverride.class +com/fasterxml/jackson/databind/cfg/ConfigOverrides.class +com/fasterxml/jackson/databind/cfg/ContextAttributes$Impl.class +com/fasterxml/jackson/databind/cfg/ContextAttributes.class +com/fasterxml/jackson/databind/cfg/DeserializerFactoryConfig.class +com/fasterxml/jackson/databind/cfg/HandlerInstantiator.class +com/fasterxml/jackson/databind/cfg/MapperConfig.class +com/fasterxml/jackson/databind/cfg/MapperConfigBase.class +com/fasterxml/jackson/databind/cfg/MutableConfigOverride.class +com/fasterxml/jackson/databind/cfg/PackageVersion.class +com/fasterxml/jackson/databind/cfg/SerializerFactoryConfig.class +com/fasterxml/jackson/databind/deser/ +com/fasterxml/jackson/databind/deser/AbstractDeserializer.class +com/fasterxml/jackson/databind/deser/BasicDeserializerFactory$1.class +com/fasterxml/jackson/databind/deser/BasicDeserializerFactory.class +com/fasterxml/jackson/databind/deser/BeanDeserializer$1.class +com/fasterxml/jackson/databind/deser/BeanDeserializer$BeanReferring.class +com/fasterxml/jackson/databind/deser/BeanDeserializer.class +com/fasterxml/jackson/databind/deser/BeanDeserializerBase.class +com/fasterxml/jackson/databind/deser/BeanDeserializerBuilder.class +com/fasterxml/jackson/databind/deser/BeanDeserializerFactory.class +com/fasterxml/jackson/databind/deser/BeanDeserializerModifier.class +com/fasterxml/jackson/databind/deser/BuilderBasedDeserializer.class +com/fasterxml/jackson/databind/deser/ContextualDeserializer.class +com/fasterxml/jackson/databind/deser/ContextualKeyDeserializer.class +com/fasterxml/jackson/databind/deser/CreatorProperty.class +com/fasterxml/jackson/databind/deser/DataFormatReaders$AccessorForReader.class +com/fasterxml/jackson/databind/deser/DataFormatReaders$Match.class +com/fasterxml/jackson/databind/deser/DataFormatReaders.class +com/fasterxml/jackson/databind/deser/DefaultDeserializationContext$Impl.class +com/fasterxml/jackson/databind/deser/DefaultDeserializationContext.class +com/fasterxml/jackson/databind/deser/DeserializationProblemHandler.class +com/fasterxml/jackson/databind/deser/DeserializerCache.class +com/fasterxml/jackson/databind/deser/DeserializerFactory.class +com/fasterxml/jackson/databind/deser/Deserializers$Base.class +com/fasterxml/jackson/databind/deser/Deserializers.class +com/fasterxml/jackson/databind/deser/KeyDeserializers.class +com/fasterxml/jackson/databind/deser/NullValueProvider.class +com/fasterxml/jackson/databind/deser/ResolvableDeserializer.class +com/fasterxml/jackson/databind/deser/SettableAnyProperty$AnySetterReferring.class +com/fasterxml/jackson/databind/deser/SettableAnyProperty.class +com/fasterxml/jackson/databind/deser/SettableBeanProperty$Delegating.class +com/fasterxml/jackson/databind/deser/SettableBeanProperty.class +com/fasterxml/jackson/databind/deser/UnresolvedForwardReference.class +com/fasterxml/jackson/databind/deser/UnresolvedId.class +com/fasterxml/jackson/databind/deser/ValueInstantiator$Base.class +com/fasterxml/jackson/databind/deser/ValueInstantiator$Gettable.class +com/fasterxml/jackson/databind/deser/ValueInstantiator.class +com/fasterxml/jackson/databind/deser/ValueInstantiators$Base.class +com/fasterxml/jackson/databind/deser/ValueInstantiators.class +com/fasterxml/jackson/databind/deser/impl/ +com/fasterxml/jackson/databind/deser/impl/BeanAsArrayBuilderDeserializer.class +com/fasterxml/jackson/databind/deser/impl/BeanAsArrayDeserializer.class +com/fasterxml/jackson/databind/deser/impl/BeanPropertyMap.class +com/fasterxml/jackson/databind/deser/impl/CreatorCandidate$Param.class +com/fasterxml/jackson/databind/deser/impl/CreatorCandidate.class +com/fasterxml/jackson/databind/deser/impl/CreatorCollector$StdTypeConstructor.class +com/fasterxml/jackson/databind/deser/impl/CreatorCollector.class +com/fasterxml/jackson/databind/deser/impl/ErrorThrowingDeserializer.class +com/fasterxml/jackson/databind/deser/impl/ExternalTypeHandler$Builder.class +com/fasterxml/jackson/databind/deser/impl/ExternalTypeHandler$ExtTypedProperty.class +com/fasterxml/jackson/databind/deser/impl/ExternalTypeHandler.class +com/fasterxml/jackson/databind/deser/impl/FailingDeserializer.class +com/fasterxml/jackson/databind/deser/impl/FieldProperty.class +com/fasterxml/jackson/databind/deser/impl/InnerClassProperty.class +com/fasterxml/jackson/databind/deser/impl/JavaUtilCollectionsDeserializers$1.class +com/fasterxml/jackson/databind/deser/impl/JavaUtilCollectionsDeserializers$JavaUtilCollectionsConverter.class +com/fasterxml/jackson/databind/deser/impl/JavaUtilCollectionsDeserializers.class +com/fasterxml/jackson/databind/deser/impl/ManagedReferenceProperty.class +com/fasterxml/jackson/databind/deser/impl/MergingSettableBeanProperty.class +com/fasterxml/jackson/databind/deser/impl/MethodProperty.class +com/fasterxml/jackson/databind/deser/impl/NullsAsEmptyProvider.class +com/fasterxml/jackson/databind/deser/impl/NullsConstantProvider.class +com/fasterxml/jackson/databind/deser/impl/NullsFailProvider.class +com/fasterxml/jackson/databind/deser/impl/ObjectIdReader.class +com/fasterxml/jackson/databind/deser/impl/ObjectIdReferenceProperty$PropertyReferring.class +com/fasterxml/jackson/databind/deser/impl/ObjectIdReferenceProperty.class +com/fasterxml/jackson/databind/deser/impl/ObjectIdValueProperty.class +com/fasterxml/jackson/databind/deser/impl/PropertyBasedCreator$CaseInsensitiveMap.class +com/fasterxml/jackson/databind/deser/impl/PropertyBasedCreator.class +com/fasterxml/jackson/databind/deser/impl/PropertyBasedObjectIdGenerator.class +com/fasterxml/jackson/databind/deser/impl/PropertyValue$Any.class +com/fasterxml/jackson/databind/deser/impl/PropertyValue$Map.class +com/fasterxml/jackson/databind/deser/impl/PropertyValue$Regular.class +com/fasterxml/jackson/databind/deser/impl/PropertyValue.class +com/fasterxml/jackson/databind/deser/impl/PropertyValueBuffer.class +com/fasterxml/jackson/databind/deser/impl/ReadableObjectId$Referring.class +com/fasterxml/jackson/databind/deser/impl/ReadableObjectId.class +com/fasterxml/jackson/databind/deser/impl/SetterlessProperty.class +com/fasterxml/jackson/databind/deser/impl/TypeWrappedDeserializer.class +com/fasterxml/jackson/databind/deser/impl/UnwrappedPropertyHandler.class +com/fasterxml/jackson/databind/deser/impl/ValueInjector.class +com/fasterxml/jackson/databind/deser/std/ +com/fasterxml/jackson/databind/deser/std/ArrayBlockingQueueDeserializer.class +com/fasterxml/jackson/databind/deser/std/AtomicBooleanDeserializer.class +com/fasterxml/jackson/databind/deser/std/AtomicReferenceDeserializer.class +com/fasterxml/jackson/databind/deser/std/BaseNodeDeserializer.class +com/fasterxml/jackson/databind/deser/std/ByteBufferDeserializer.class +com/fasterxml/jackson/databind/deser/std/CollectionDeserializer$CollectionReferring.class +com/fasterxml/jackson/databind/deser/std/CollectionDeserializer$CollectionReferringAccumulator.class +com/fasterxml/jackson/databind/deser/std/CollectionDeserializer.class +com/fasterxml/jackson/databind/deser/std/ContainerDeserializerBase.class +com/fasterxml/jackson/databind/deser/std/DateDeserializers$CalendarDeserializer.class +com/fasterxml/jackson/databind/deser/std/DateDeserializers$DateBasedDeserializer.class +com/fasterxml/jackson/databind/deser/std/DateDeserializers$DateDeserializer.class +com/fasterxml/jackson/databind/deser/std/DateDeserializers$SqlDateDeserializer.class +com/fasterxml/jackson/databind/deser/std/DateDeserializers$TimestampDeserializer.class +com/fasterxml/jackson/databind/deser/std/DateDeserializers.class +com/fasterxml/jackson/databind/deser/std/DelegatingDeserializer.class +com/fasterxml/jackson/databind/deser/std/EnumDeserializer.class +com/fasterxml/jackson/databind/deser/std/EnumMapDeserializer.class +com/fasterxml/jackson/databind/deser/std/EnumSetDeserializer.class +com/fasterxml/jackson/databind/deser/std/FactoryBasedEnumDeserializer.class +com/fasterxml/jackson/databind/deser/std/FromStringDeserializer$Std.class +com/fasterxml/jackson/databind/deser/std/FromStringDeserializer.class +com/fasterxml/jackson/databind/deser/std/JdkDeserializers.class +com/fasterxml/jackson/databind/deser/std/JsonLocationInstantiator.class +com/fasterxml/jackson/databind/deser/std/JsonNodeDeserializer$ArrayDeserializer.class +com/fasterxml/jackson/databind/deser/std/JsonNodeDeserializer$ObjectDeserializer.class +com/fasterxml/jackson/databind/deser/std/JsonNodeDeserializer.class +com/fasterxml/jackson/databind/deser/std/MapDeserializer$MapReferring.class +com/fasterxml/jackson/databind/deser/std/MapDeserializer$MapReferringAccumulator.class +com/fasterxml/jackson/databind/deser/std/MapDeserializer.class +com/fasterxml/jackson/databind/deser/std/MapEntryDeserializer.class +com/fasterxml/jackson/databind/deser/std/NullifyingDeserializer.class +com/fasterxml/jackson/databind/deser/std/NumberDeserializers$1.class +com/fasterxml/jackson/databind/deser/std/NumberDeserializers$BigDecimalDeserializer.class +com/fasterxml/jackson/databind/deser/std/NumberDeserializers$BigIntegerDeserializer.class +com/fasterxml/jackson/databind/deser/std/NumberDeserializers$BooleanDeserializer.class +com/fasterxml/jackson/databind/deser/std/NumberDeserializers$ByteDeserializer.class +com/fasterxml/jackson/databind/deser/std/NumberDeserializers$CharacterDeserializer.class +com/fasterxml/jackson/databind/deser/std/NumberDeserializers$DoubleDeserializer.class +com/fasterxml/jackson/databind/deser/std/NumberDeserializers$FloatDeserializer.class +com/fasterxml/jackson/databind/deser/std/NumberDeserializers$IntegerDeserializer.class +com/fasterxml/jackson/databind/deser/std/NumberDeserializers$LongDeserializer.class +com/fasterxml/jackson/databind/deser/std/NumberDeserializers$NumberDeserializer.class +com/fasterxml/jackson/databind/deser/std/NumberDeserializers$PrimitiveOrWrapperDeserializer.class +com/fasterxml/jackson/databind/deser/std/NumberDeserializers$ShortDeserializer.class +com/fasterxml/jackson/databind/deser/std/NumberDeserializers.class +com/fasterxml/jackson/databind/deser/std/ObjectArrayDeserializer.class +com/fasterxml/jackson/databind/deser/std/PrimitiveArrayDeserializers$BooleanDeser.class +com/fasterxml/jackson/databind/deser/std/PrimitiveArrayDeserializers$ByteDeser.class +com/fasterxml/jackson/databind/deser/std/PrimitiveArrayDeserializers$CharDeser.class +com/fasterxml/jackson/databind/deser/std/PrimitiveArrayDeserializers$DoubleDeser.class +com/fasterxml/jackson/databind/deser/std/PrimitiveArrayDeserializers$FloatDeser.class +com/fasterxml/jackson/databind/deser/std/PrimitiveArrayDeserializers$IntDeser.class +com/fasterxml/jackson/databind/deser/std/PrimitiveArrayDeserializers$LongDeser.class +com/fasterxml/jackson/databind/deser/std/PrimitiveArrayDeserializers$ShortDeser.class +com/fasterxml/jackson/databind/deser/std/PrimitiveArrayDeserializers.class +com/fasterxml/jackson/databind/deser/std/ReferenceTypeDeserializer.class +com/fasterxml/jackson/databind/deser/std/StackTraceElementDeserializer.class +com/fasterxml/jackson/databind/deser/std/StdDelegatingDeserializer.class +com/fasterxml/jackson/databind/deser/std/StdDeserializer.class +com/fasterxml/jackson/databind/deser/std/StdKeyDeserializer$DelegatingKD.class +com/fasterxml/jackson/databind/deser/std/StdKeyDeserializer$EnumKD.class +com/fasterxml/jackson/databind/deser/std/StdKeyDeserializer$StringCtorKeyDeserializer.class +com/fasterxml/jackson/databind/deser/std/StdKeyDeserializer$StringFactoryKeyDeserializer.class +com/fasterxml/jackson/databind/deser/std/StdKeyDeserializer$StringKD.class +com/fasterxml/jackson/databind/deser/std/StdKeyDeserializer.class +com/fasterxml/jackson/databind/deser/std/StdKeyDeserializers.class +com/fasterxml/jackson/databind/deser/std/StdNodeBasedDeserializer.class +com/fasterxml/jackson/databind/deser/std/StdScalarDeserializer.class +com/fasterxml/jackson/databind/deser/std/StdValueInstantiator.class +com/fasterxml/jackson/databind/deser/std/StringArrayDeserializer.class +com/fasterxml/jackson/databind/deser/std/StringCollectionDeserializer.class +com/fasterxml/jackson/databind/deser/std/StringDeserializer.class +com/fasterxml/jackson/databind/deser/std/ThrowableDeserializer.class +com/fasterxml/jackson/databind/deser/std/TokenBufferDeserializer.class +com/fasterxml/jackson/databind/deser/std/UUIDDeserializer.class +com/fasterxml/jackson/databind/deser/std/UntypedObjectDeserializer$Vanilla.class +com/fasterxml/jackson/databind/deser/std/UntypedObjectDeserializer.class +com/fasterxml/jackson/databind/exc/ +com/fasterxml/jackson/databind/exc/IgnoredPropertyException.class +com/fasterxml/jackson/databind/exc/InvalidDefinitionException.class +com/fasterxml/jackson/databind/exc/InvalidFormatException.class +com/fasterxml/jackson/databind/exc/InvalidNullException.class +com/fasterxml/jackson/databind/exc/InvalidTypeIdException.class +com/fasterxml/jackson/databind/exc/MismatchedInputException.class +com/fasterxml/jackson/databind/exc/PropertyBindingException.class +com/fasterxml/jackson/databind/exc/UnrecognizedPropertyException.class +com/fasterxml/jackson/databind/ext/ +com/fasterxml/jackson/databind/ext/CoreXMLDeserializers$Std.class +com/fasterxml/jackson/databind/ext/CoreXMLDeserializers.class +com/fasterxml/jackson/databind/ext/CoreXMLSerializers$XMLGregorianCalendarSerializer.class +com/fasterxml/jackson/databind/ext/CoreXMLSerializers.class +com/fasterxml/jackson/databind/ext/DOMDeserializer$DocumentDeserializer.class +com/fasterxml/jackson/databind/ext/DOMDeserializer$NodeDeserializer.class +com/fasterxml/jackson/databind/ext/DOMDeserializer.class +com/fasterxml/jackson/databind/ext/DOMSerializer.class +com/fasterxml/jackson/databind/ext/Java7Support.class +com/fasterxml/jackson/databind/ext/Java7SupportImpl.class +com/fasterxml/jackson/databind/ext/NioPathDeserializer.class +com/fasterxml/jackson/databind/ext/NioPathSerializer.class +com/fasterxml/jackson/databind/ext/OptionalHandlerFactory.class +com/fasterxml/jackson/databind/introspect/ +com/fasterxml/jackson/databind/introspect/Annotated.class +com/fasterxml/jackson/databind/introspect/AnnotatedClass$Creators.class +com/fasterxml/jackson/databind/introspect/AnnotatedClass.class +com/fasterxml/jackson/databind/introspect/AnnotatedClassResolver.class +com/fasterxml/jackson/databind/introspect/AnnotatedConstructor$Serialization.class +com/fasterxml/jackson/databind/introspect/AnnotatedConstructor.class +com/fasterxml/jackson/databind/introspect/AnnotatedCreatorCollector.class +com/fasterxml/jackson/databind/introspect/AnnotatedField$Serialization.class +com/fasterxml/jackson/databind/introspect/AnnotatedField.class +com/fasterxml/jackson/databind/introspect/AnnotatedFieldCollector$FieldBuilder.class +com/fasterxml/jackson/databind/introspect/AnnotatedFieldCollector.class +com/fasterxml/jackson/databind/introspect/AnnotatedMember.class +com/fasterxml/jackson/databind/introspect/AnnotatedMethod$Serialization.class +com/fasterxml/jackson/databind/introspect/AnnotatedMethod.class +com/fasterxml/jackson/databind/introspect/AnnotatedMethodCollector$MethodBuilder.class +com/fasterxml/jackson/databind/introspect/AnnotatedMethodCollector.class +com/fasterxml/jackson/databind/introspect/AnnotatedMethodMap.class +com/fasterxml/jackson/databind/introspect/AnnotatedParameter.class +com/fasterxml/jackson/databind/introspect/AnnotatedWithParams.class +com/fasterxml/jackson/databind/introspect/AnnotationCollector$EmptyCollector.class +com/fasterxml/jackson/databind/introspect/AnnotationCollector$NCollector.class +com/fasterxml/jackson/databind/introspect/AnnotationCollector$NoAnnotations.class +com/fasterxml/jackson/databind/introspect/AnnotationCollector$OneAnnotation.class +com/fasterxml/jackson/databind/introspect/AnnotationCollector$OneCollector.class +com/fasterxml/jackson/databind/introspect/AnnotationCollector$TwoAnnotations.class +com/fasterxml/jackson/databind/introspect/AnnotationCollector.class +com/fasterxml/jackson/databind/introspect/AnnotationIntrospectorPair.class +com/fasterxml/jackson/databind/introspect/AnnotationMap.class +com/fasterxml/jackson/databind/introspect/BasicBeanDescription.class +com/fasterxml/jackson/databind/introspect/BasicClassIntrospector.class +com/fasterxml/jackson/databind/introspect/BeanPropertyDefinition.class +com/fasterxml/jackson/databind/introspect/ClassIntrospector$MixInResolver.class +com/fasterxml/jackson/databind/introspect/ClassIntrospector.class +com/fasterxml/jackson/databind/introspect/CollectorBase.class +com/fasterxml/jackson/databind/introspect/ConcreteBeanPropertyBase.class +com/fasterxml/jackson/databind/introspect/JacksonAnnotationIntrospector$1.class +com/fasterxml/jackson/databind/introspect/JacksonAnnotationIntrospector.class +com/fasterxml/jackson/databind/introspect/MemberKey.class +com/fasterxml/jackson/databind/introspect/NopAnnotationIntrospector$1.class +com/fasterxml/jackson/databind/introspect/NopAnnotationIntrospector.class +com/fasterxml/jackson/databind/introspect/ObjectIdInfo.class +com/fasterxml/jackson/databind/introspect/POJOPropertiesCollector.class +com/fasterxml/jackson/databind/introspect/POJOPropertyBuilder$1.class +com/fasterxml/jackson/databind/introspect/POJOPropertyBuilder$10.class +com/fasterxml/jackson/databind/introspect/POJOPropertyBuilder$2.class +com/fasterxml/jackson/databind/introspect/POJOPropertyBuilder$3.class +com/fasterxml/jackson/databind/introspect/POJOPropertyBuilder$4.class +com/fasterxml/jackson/databind/introspect/POJOPropertyBuilder$5.class +com/fasterxml/jackson/databind/introspect/POJOPropertyBuilder$6.class +com/fasterxml/jackson/databind/introspect/POJOPropertyBuilder$7.class +com/fasterxml/jackson/databind/introspect/POJOPropertyBuilder$8.class +com/fasterxml/jackson/databind/introspect/POJOPropertyBuilder$9.class +com/fasterxml/jackson/databind/introspect/POJOPropertyBuilder$Linked.class +com/fasterxml/jackson/databind/introspect/POJOPropertyBuilder$MemberIterator.class +com/fasterxml/jackson/databind/introspect/POJOPropertyBuilder$WithMember.class +com/fasterxml/jackson/databind/introspect/POJOPropertyBuilder.class +com/fasterxml/jackson/databind/introspect/SimpleMixInResolver.class +com/fasterxml/jackson/databind/introspect/TypeResolutionContext$Basic.class +com/fasterxml/jackson/databind/introspect/TypeResolutionContext.class +com/fasterxml/jackson/databind/introspect/VirtualAnnotatedMember.class +com/fasterxml/jackson/databind/introspect/VisibilityChecker$1.class +com/fasterxml/jackson/databind/introspect/VisibilityChecker$Std.class +com/fasterxml/jackson/databind/introspect/VisibilityChecker.class +com/fasterxml/jackson/databind/introspect/WithMember.class +com/fasterxml/jackson/databind/jsonFormatVisitors/ +com/fasterxml/jackson/databind/jsonFormatVisitors/JsonAnyFormatVisitor$Base.class +com/fasterxml/jackson/databind/jsonFormatVisitors/JsonAnyFormatVisitor.class +com/fasterxml/jackson/databind/jsonFormatVisitors/JsonArrayFormatVisitor$Base.class +com/fasterxml/jackson/databind/jsonFormatVisitors/JsonArrayFormatVisitor.class +com/fasterxml/jackson/databind/jsonFormatVisitors/JsonBooleanFormatVisitor$Base.class +com/fasterxml/jackson/databind/jsonFormatVisitors/JsonBooleanFormatVisitor.class +com/fasterxml/jackson/databind/jsonFormatVisitors/JsonFormatTypes.class +com/fasterxml/jackson/databind/jsonFormatVisitors/JsonFormatVisitable.class +com/fasterxml/jackson/databind/jsonFormatVisitors/JsonFormatVisitorWithSerializerProvider.class +com/fasterxml/jackson/databind/jsonFormatVisitors/JsonFormatVisitorWrapper$Base.class +com/fasterxml/jackson/databind/jsonFormatVisitors/JsonFormatVisitorWrapper.class +com/fasterxml/jackson/databind/jsonFormatVisitors/JsonIntegerFormatVisitor$Base.class +com/fasterxml/jackson/databind/jsonFormatVisitors/JsonIntegerFormatVisitor.class +com/fasterxml/jackson/databind/jsonFormatVisitors/JsonMapFormatVisitor$Base.class +com/fasterxml/jackson/databind/jsonFormatVisitors/JsonMapFormatVisitor.class +com/fasterxml/jackson/databind/jsonFormatVisitors/JsonNullFormatVisitor$Base.class +com/fasterxml/jackson/databind/jsonFormatVisitors/JsonNullFormatVisitor.class +com/fasterxml/jackson/databind/jsonFormatVisitors/JsonNumberFormatVisitor$Base.class +com/fasterxml/jackson/databind/jsonFormatVisitors/JsonNumberFormatVisitor.class +com/fasterxml/jackson/databind/jsonFormatVisitors/JsonObjectFormatVisitor$Base.class +com/fasterxml/jackson/databind/jsonFormatVisitors/JsonObjectFormatVisitor.class +com/fasterxml/jackson/databind/jsonFormatVisitors/JsonStringFormatVisitor$Base.class +com/fasterxml/jackson/databind/jsonFormatVisitors/JsonStringFormatVisitor.class +com/fasterxml/jackson/databind/jsonFormatVisitors/JsonValueFormat.class +com/fasterxml/jackson/databind/jsonFormatVisitors/JsonValueFormatVisitor$Base.class +com/fasterxml/jackson/databind/jsonFormatVisitors/JsonValueFormatVisitor.class +com/fasterxml/jackson/databind/jsonschema/ +com/fasterxml/jackson/databind/jsonschema/JsonSchema.class +com/fasterxml/jackson/databind/jsonschema/JsonSerializableSchema.class +com/fasterxml/jackson/databind/jsonschema/SchemaAware.class +com/fasterxml/jackson/databind/jsontype/ +com/fasterxml/jackson/databind/jsontype/NamedType.class +com/fasterxml/jackson/databind/jsontype/SubtypeResolver.class +com/fasterxml/jackson/databind/jsontype/TypeDeserializer$1.class +com/fasterxml/jackson/databind/jsontype/TypeDeserializer.class +com/fasterxml/jackson/databind/jsontype/TypeIdResolver.class +com/fasterxml/jackson/databind/jsontype/TypeResolverBuilder.class +com/fasterxml/jackson/databind/jsontype/TypeSerializer$1.class +com/fasterxml/jackson/databind/jsontype/TypeSerializer.class +com/fasterxml/jackson/databind/jsontype/impl/ +com/fasterxml/jackson/databind/jsontype/impl/AsArrayTypeDeserializer.class +com/fasterxml/jackson/databind/jsontype/impl/AsArrayTypeSerializer.class +com/fasterxml/jackson/databind/jsontype/impl/AsExistingPropertyTypeSerializer.class +com/fasterxml/jackson/databind/jsontype/impl/AsExternalTypeDeserializer.class +com/fasterxml/jackson/databind/jsontype/impl/AsExternalTypeSerializer.class +com/fasterxml/jackson/databind/jsontype/impl/AsPropertyTypeDeserializer.class +com/fasterxml/jackson/databind/jsontype/impl/AsPropertyTypeSerializer.class +com/fasterxml/jackson/databind/jsontype/impl/AsWrapperTypeDeserializer.class +com/fasterxml/jackson/databind/jsontype/impl/AsWrapperTypeSerializer.class +com/fasterxml/jackson/databind/jsontype/impl/ClassNameIdResolver.class +com/fasterxml/jackson/databind/jsontype/impl/MinimalClassNameIdResolver.class +com/fasterxml/jackson/databind/jsontype/impl/StdSubtypeResolver.class +com/fasterxml/jackson/databind/jsontype/impl/StdTypeResolverBuilder$1.class +com/fasterxml/jackson/databind/jsontype/impl/StdTypeResolverBuilder.class +com/fasterxml/jackson/databind/jsontype/impl/SubTypeValidator.class +com/fasterxml/jackson/databind/jsontype/impl/TypeDeserializerBase.class +com/fasterxml/jackson/databind/jsontype/impl/TypeIdResolverBase.class +com/fasterxml/jackson/databind/jsontype/impl/TypeNameIdResolver.class +com/fasterxml/jackson/databind/jsontype/impl/TypeSerializerBase.class +com/fasterxml/jackson/databind/module/ +com/fasterxml/jackson/databind/module/SimpleAbstractTypeResolver.class +com/fasterxml/jackson/databind/module/SimpleDeserializers.class +com/fasterxml/jackson/databind/module/SimpleKeyDeserializers.class +com/fasterxml/jackson/databind/module/SimpleModule.class +com/fasterxml/jackson/databind/module/SimpleSerializers.class +com/fasterxml/jackson/databind/module/SimpleValueInstantiators.class +com/fasterxml/jackson/databind/node/ +com/fasterxml/jackson/databind/node/ArrayNode.class +com/fasterxml/jackson/databind/node/BaseJsonNode.class +com/fasterxml/jackson/databind/node/BigIntegerNode.class +com/fasterxml/jackson/databind/node/BinaryNode.class +com/fasterxml/jackson/databind/node/BooleanNode.class +com/fasterxml/jackson/databind/node/ContainerNode.class +com/fasterxml/jackson/databind/node/DecimalNode.class +com/fasterxml/jackson/databind/node/DoubleNode.class +com/fasterxml/jackson/databind/node/FloatNode.class +com/fasterxml/jackson/databind/node/IntNode.class +com/fasterxml/jackson/databind/node/JsonNodeCreator.class +com/fasterxml/jackson/databind/node/JsonNodeFactory.class +com/fasterxml/jackson/databind/node/JsonNodeType.class +com/fasterxml/jackson/databind/node/LongNode.class +com/fasterxml/jackson/databind/node/MissingNode.class +com/fasterxml/jackson/databind/node/NodeCursor$ArrayCursor.class +com/fasterxml/jackson/databind/node/NodeCursor$ObjectCursor.class +com/fasterxml/jackson/databind/node/NodeCursor$RootCursor.class +com/fasterxml/jackson/databind/node/NodeCursor.class +com/fasterxml/jackson/databind/node/NullNode.class +com/fasterxml/jackson/databind/node/NumericNode.class +com/fasterxml/jackson/databind/node/ObjectNode.class +com/fasterxml/jackson/databind/node/POJONode.class +com/fasterxml/jackson/databind/node/ShortNode.class +com/fasterxml/jackson/databind/node/TextNode.class +com/fasterxml/jackson/databind/node/TreeTraversingParser$1.class +com/fasterxml/jackson/databind/node/TreeTraversingParser.class +com/fasterxml/jackson/databind/node/ValueNode.class +com/fasterxml/jackson/databind/ser/ +com/fasterxml/jackson/databind/ser/AnyGetterWriter.class +com/fasterxml/jackson/databind/ser/BasicSerializerFactory$1.class +com/fasterxml/jackson/databind/ser/BasicSerializerFactory.class +com/fasterxml/jackson/databind/ser/BeanPropertyFilter.class +com/fasterxml/jackson/databind/ser/BeanPropertyWriter.class +com/fasterxml/jackson/databind/ser/BeanSerializer.class +com/fasterxml/jackson/databind/ser/BeanSerializerBuilder.class +com/fasterxml/jackson/databind/ser/BeanSerializerFactory.class +com/fasterxml/jackson/databind/ser/BeanSerializerModifier.class +com/fasterxml/jackson/databind/ser/ContainerSerializer.class +com/fasterxml/jackson/databind/ser/ContextualSerializer.class +com/fasterxml/jackson/databind/ser/DefaultSerializerProvider$Impl.class +com/fasterxml/jackson/databind/ser/DefaultSerializerProvider.class +com/fasterxml/jackson/databind/ser/FilterProvider.class +com/fasterxml/jackson/databind/ser/PropertyBuilder$1.class +com/fasterxml/jackson/databind/ser/PropertyBuilder.class +com/fasterxml/jackson/databind/ser/PropertyFilter.class +com/fasterxml/jackson/databind/ser/PropertyWriter.class +com/fasterxml/jackson/databind/ser/ResolvableSerializer.class +com/fasterxml/jackson/databind/ser/SerializerCache.class +com/fasterxml/jackson/databind/ser/SerializerFactory.class +com/fasterxml/jackson/databind/ser/Serializers$Base.class +com/fasterxml/jackson/databind/ser/Serializers.class +com/fasterxml/jackson/databind/ser/VirtualBeanPropertyWriter.class +com/fasterxml/jackson/databind/ser/impl/ +com/fasterxml/jackson/databind/ser/impl/AttributePropertyWriter.class +com/fasterxml/jackson/databind/ser/impl/BeanAsArraySerializer.class +com/fasterxml/jackson/databind/ser/impl/FailingSerializer.class +com/fasterxml/jackson/databind/ser/impl/FilteredBeanPropertyWriter$MultiView.class +com/fasterxml/jackson/databind/ser/impl/FilteredBeanPropertyWriter$SingleView.class +com/fasterxml/jackson/databind/ser/impl/FilteredBeanPropertyWriter.class +com/fasterxml/jackson/databind/ser/impl/IndexedListSerializer.class +com/fasterxml/jackson/databind/ser/impl/IndexedStringListSerializer.class +com/fasterxml/jackson/databind/ser/impl/IteratorSerializer.class +com/fasterxml/jackson/databind/ser/impl/MapEntrySerializer$1.class +com/fasterxml/jackson/databind/ser/impl/MapEntrySerializer.class +com/fasterxml/jackson/databind/ser/impl/ObjectIdWriter.class +com/fasterxml/jackson/databind/ser/impl/PropertyBasedObjectIdGenerator.class +com/fasterxml/jackson/databind/ser/impl/PropertySerializerMap$Double.class +com/fasterxml/jackson/databind/ser/impl/PropertySerializerMap$Empty.class +com/fasterxml/jackson/databind/ser/impl/PropertySerializerMap$Multi.class +com/fasterxml/jackson/databind/ser/impl/PropertySerializerMap$SerializerAndMapResult.class +com/fasterxml/jackson/databind/ser/impl/PropertySerializerMap$Single.class +com/fasterxml/jackson/databind/ser/impl/PropertySerializerMap$TypeAndSerializer.class +com/fasterxml/jackson/databind/ser/impl/PropertySerializerMap.class +com/fasterxml/jackson/databind/ser/impl/ReadOnlyClassToSerializerMap$Bucket.class +com/fasterxml/jackson/databind/ser/impl/ReadOnlyClassToSerializerMap.class +com/fasterxml/jackson/databind/ser/impl/SimpleBeanPropertyFilter$1.class +com/fasterxml/jackson/databind/ser/impl/SimpleBeanPropertyFilter$FilterExceptFilter.class +com/fasterxml/jackson/databind/ser/impl/SimpleBeanPropertyFilter$SerializeExceptFilter.class +com/fasterxml/jackson/databind/ser/impl/SimpleBeanPropertyFilter.class +com/fasterxml/jackson/databind/ser/impl/SimpleFilterProvider.class +com/fasterxml/jackson/databind/ser/impl/StringArraySerializer.class +com/fasterxml/jackson/databind/ser/impl/StringCollectionSerializer.class +com/fasterxml/jackson/databind/ser/impl/TypeWrappedSerializer.class +com/fasterxml/jackson/databind/ser/impl/UnknownSerializer.class +com/fasterxml/jackson/databind/ser/impl/UnwrappingBeanPropertyWriter$1.class +com/fasterxml/jackson/databind/ser/impl/UnwrappingBeanPropertyWriter.class +com/fasterxml/jackson/databind/ser/impl/UnwrappingBeanSerializer.class +com/fasterxml/jackson/databind/ser/impl/WritableObjectId.class +com/fasterxml/jackson/databind/ser/std/ +com/fasterxml/jackson/databind/ser/std/ArraySerializerBase.class +com/fasterxml/jackson/databind/ser/std/AsArraySerializerBase.class +com/fasterxml/jackson/databind/ser/std/AtomicReferenceSerializer.class +com/fasterxml/jackson/databind/ser/std/BeanSerializerBase$1.class +com/fasterxml/jackson/databind/ser/std/BeanSerializerBase.class +com/fasterxml/jackson/databind/ser/std/BooleanSerializer$AsNumber.class +com/fasterxml/jackson/databind/ser/std/BooleanSerializer.class +com/fasterxml/jackson/databind/ser/std/ByteArraySerializer.class +com/fasterxml/jackson/databind/ser/std/ByteBufferSerializer.class +com/fasterxml/jackson/databind/ser/std/CalendarSerializer.class +com/fasterxml/jackson/databind/ser/std/ClassSerializer.class +com/fasterxml/jackson/databind/ser/std/CollectionSerializer.class +com/fasterxml/jackson/databind/ser/std/DateSerializer.class +com/fasterxml/jackson/databind/ser/std/DateTimeSerializerBase.class +com/fasterxml/jackson/databind/ser/std/EnumSerializer.class +com/fasterxml/jackson/databind/ser/std/EnumSetSerializer.class +com/fasterxml/jackson/databind/ser/std/FileSerializer.class +com/fasterxml/jackson/databind/ser/std/InetAddressSerializer.class +com/fasterxml/jackson/databind/ser/std/InetSocketAddressSerializer.class +com/fasterxml/jackson/databind/ser/std/IterableSerializer.class +com/fasterxml/jackson/databind/ser/std/JsonValueSerializer$TypeSerializerRerouter.class +com/fasterxml/jackson/databind/ser/std/JsonValueSerializer.class +com/fasterxml/jackson/databind/ser/std/MapProperty.class +com/fasterxml/jackson/databind/ser/std/MapSerializer$1.class +com/fasterxml/jackson/databind/ser/std/MapSerializer.class +com/fasterxml/jackson/databind/ser/std/NonTypedScalarSerializerBase.class +com/fasterxml/jackson/databind/ser/std/NullSerializer.class +com/fasterxml/jackson/databind/ser/std/NumberSerializer$1.class +com/fasterxml/jackson/databind/ser/std/NumberSerializer.class +com/fasterxml/jackson/databind/ser/std/NumberSerializers$1.class +com/fasterxml/jackson/databind/ser/std/NumberSerializers$Base.class +com/fasterxml/jackson/databind/ser/std/NumberSerializers$DoubleSerializer.class +com/fasterxml/jackson/databind/ser/std/NumberSerializers$FloatSerializer.class +com/fasterxml/jackson/databind/ser/std/NumberSerializers$IntLikeSerializer.class +com/fasterxml/jackson/databind/ser/std/NumberSerializers$IntegerSerializer.class +com/fasterxml/jackson/databind/ser/std/NumberSerializers$LongSerializer.class +com/fasterxml/jackson/databind/ser/std/NumberSerializers$ShortSerializer.class +com/fasterxml/jackson/databind/ser/std/NumberSerializers.class +com/fasterxml/jackson/databind/ser/std/ObjectArraySerializer.class +com/fasterxml/jackson/databind/ser/std/RawSerializer.class +com/fasterxml/jackson/databind/ser/std/ReferenceTypeSerializer$1.class +com/fasterxml/jackson/databind/ser/std/ReferenceTypeSerializer.class +com/fasterxml/jackson/databind/ser/std/SerializableSerializer.class +com/fasterxml/jackson/databind/ser/std/SqlDateSerializer.class +com/fasterxml/jackson/databind/ser/std/SqlTimeSerializer.class +com/fasterxml/jackson/databind/ser/std/StaticListSerializerBase.class +com/fasterxml/jackson/databind/ser/std/StdArraySerializers$BooleanArraySerializer.class +com/fasterxml/jackson/databind/ser/std/StdArraySerializers$CharArraySerializer.class +com/fasterxml/jackson/databind/ser/std/StdArraySerializers$DoubleArraySerializer.class +com/fasterxml/jackson/databind/ser/std/StdArraySerializers$FloatArraySerializer.class +com/fasterxml/jackson/databind/ser/std/StdArraySerializers$IntArraySerializer.class +com/fasterxml/jackson/databind/ser/std/StdArraySerializers$LongArraySerializer.class +com/fasterxml/jackson/databind/ser/std/StdArraySerializers$ShortArraySerializer.class +com/fasterxml/jackson/databind/ser/std/StdArraySerializers$TypedPrimitiveArraySerializer.class +com/fasterxml/jackson/databind/ser/std/StdArraySerializers.class +com/fasterxml/jackson/databind/ser/std/StdDelegatingSerializer.class +com/fasterxml/jackson/databind/ser/std/StdJdkSerializers$AtomicBooleanSerializer.class +com/fasterxml/jackson/databind/ser/std/StdJdkSerializers$AtomicIntegerSerializer.class +com/fasterxml/jackson/databind/ser/std/StdJdkSerializers$AtomicLongSerializer.class +com/fasterxml/jackson/databind/ser/std/StdJdkSerializers.class +com/fasterxml/jackson/databind/ser/std/StdKeySerializer.class +com/fasterxml/jackson/databind/ser/std/StdKeySerializers$Default.class +com/fasterxml/jackson/databind/ser/std/StdKeySerializers$Dynamic.class +com/fasterxml/jackson/databind/ser/std/StdKeySerializers$EnumKeySerializer.class +com/fasterxml/jackson/databind/ser/std/StdKeySerializers$StringKeySerializer.class +com/fasterxml/jackson/databind/ser/std/StdKeySerializers.class +com/fasterxml/jackson/databind/ser/std/StdScalarSerializer.class +com/fasterxml/jackson/databind/ser/std/StdSerializer.class +com/fasterxml/jackson/databind/ser/std/StringSerializer.class +com/fasterxml/jackson/databind/ser/std/TimeZoneSerializer.class +com/fasterxml/jackson/databind/ser/std/ToStringSerializer.class +com/fasterxml/jackson/databind/ser/std/TokenBufferSerializer.class +com/fasterxml/jackson/databind/ser/std/UUIDSerializer.class +com/fasterxml/jackson/databind/type/ +com/fasterxml/jackson/databind/type/ArrayType.class +com/fasterxml/jackson/databind/type/ClassKey.class +com/fasterxml/jackson/databind/type/ClassStack.class +com/fasterxml/jackson/databind/type/CollectionLikeType.class +com/fasterxml/jackson/databind/type/CollectionType.class +com/fasterxml/jackson/databind/type/MapLikeType.class +com/fasterxml/jackson/databind/type/MapType.class +com/fasterxml/jackson/databind/type/PlaceholderForType.class +com/fasterxml/jackson/databind/type/ReferenceType.class +com/fasterxml/jackson/databind/type/ResolvedRecursiveType.class +com/fasterxml/jackson/databind/type/SimpleType.class +com/fasterxml/jackson/databind/type/TypeBase.class +com/fasterxml/jackson/databind/type/TypeBindings$AsKey.class +com/fasterxml/jackson/databind/type/TypeBindings$TypeParamStash.class +com/fasterxml/jackson/databind/type/TypeBindings.class +com/fasterxml/jackson/databind/type/TypeFactory.class +com/fasterxml/jackson/databind/type/TypeModifier.class +com/fasterxml/jackson/databind/type/TypeParser$MyTokenizer.class +com/fasterxml/jackson/databind/type/TypeParser.class +com/fasterxml/jackson/databind/util/ +com/fasterxml/jackson/databind/util/AccessPattern.class +com/fasterxml/jackson/databind/util/Annotations.class +com/fasterxml/jackson/databind/util/ArrayBuilders$1.class +com/fasterxml/jackson/databind/util/ArrayBuilders$BooleanBuilder.class +com/fasterxml/jackson/databind/util/ArrayBuilders$ByteBuilder.class +com/fasterxml/jackson/databind/util/ArrayBuilders$DoubleBuilder.class +com/fasterxml/jackson/databind/util/ArrayBuilders$FloatBuilder.class +com/fasterxml/jackson/databind/util/ArrayBuilders$IntBuilder.class +com/fasterxml/jackson/databind/util/ArrayBuilders$LongBuilder.class +com/fasterxml/jackson/databind/util/ArrayBuilders$ShortBuilder.class +com/fasterxml/jackson/databind/util/ArrayBuilders.class +com/fasterxml/jackson/databind/util/ArrayIterator.class +com/fasterxml/jackson/databind/util/BeanUtil.class +com/fasterxml/jackson/databind/util/ByteBufferBackedInputStream.class +com/fasterxml/jackson/databind/util/ByteBufferBackedOutputStream.class +com/fasterxml/jackson/databind/util/ClassUtil$Ctor.class +com/fasterxml/jackson/databind/util/ClassUtil$EnumTypeLocator.class +com/fasterxml/jackson/databind/util/ClassUtil.class +com/fasterxml/jackson/databind/util/CompactStringObjectMap.class +com/fasterxml/jackson/databind/util/ConstantValueInstantiator.class +com/fasterxml/jackson/databind/util/Converter$None.class +com/fasterxml/jackson/databind/util/Converter.class +com/fasterxml/jackson/databind/util/EnumResolver.class +com/fasterxml/jackson/databind/util/EnumValues.class +com/fasterxml/jackson/databind/util/ISO8601DateFormat.class +com/fasterxml/jackson/databind/util/ISO8601Utils.class +com/fasterxml/jackson/databind/util/JSONPObject.class +com/fasterxml/jackson/databind/util/JSONWrappedObject.class +com/fasterxml/jackson/databind/util/LRUMap.class +com/fasterxml/jackson/databind/util/LinkedNode.class +com/fasterxml/jackson/databind/util/NameTransformer$1.class +com/fasterxml/jackson/databind/util/NameTransformer$2.class +com/fasterxml/jackson/databind/util/NameTransformer$3.class +com/fasterxml/jackson/databind/util/NameTransformer$Chained.class +com/fasterxml/jackson/databind/util/NameTransformer$NopTransformer.class +com/fasterxml/jackson/databind/util/NameTransformer.class +com/fasterxml/jackson/databind/util/Named.class +com/fasterxml/jackson/databind/util/ObjectBuffer.class +com/fasterxml/jackson/databind/util/PrimitiveArrayBuilder$Node.class +com/fasterxml/jackson/databind/util/PrimitiveArrayBuilder.class +com/fasterxml/jackson/databind/util/RawValue.class +com/fasterxml/jackson/databind/util/RootNameLookup.class +com/fasterxml/jackson/databind/util/SimpleBeanPropertyDefinition.class +com/fasterxml/jackson/databind/util/StdConverter.class +com/fasterxml/jackson/databind/util/StdDateFormat.class +com/fasterxml/jackson/databind/util/TokenBuffer$1.class +com/fasterxml/jackson/databind/util/TokenBuffer$Parser.class +com/fasterxml/jackson/databind/util/TokenBuffer$Segment.class +com/fasterxml/jackson/databind/util/TokenBuffer.class +com/fasterxml/jackson/databind/util/TokenBufferReadContext.class +com/fasterxml/jackson/databind/util/TypeKey.class +com/fasterxml/jackson/databind/util/ViewMatcher$Multi.class +com/fasterxml/jackson/databind/util/ViewMatcher$Single.class +com/fasterxml/jackson/databind/util/ViewMatcher.class diff --git a/gradle.properties.example b/gradle.properties.example deleted file mode 100644 index cde593ea..00000000 --- a/gradle.properties.example +++ /dev/null @@ -1,6 +0,0 @@ -signing.keyId= -signing.password= -signing.secretKeyRingFile=/Users/yourusername/.gnupg/secring.gpg - -sonatypeUsername= -sonatypePassword= diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar deleted file mode 100644 index 0087cd3b18659b5577cf6ad3ef61f8eb9416ebba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 51348 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

CflOl1i4(-2^1KXo)&I5QlgjRKFQgM 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 z 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 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties deleted file mode 100644 index b0c3cf1e..00000000 --- a/gradle/wrapper/gradle-wrapper.properties +++ /dev/null @@ -1,6 +0,0 @@ -#Mon May 26 17:38:02 PDT 2014 -distributionBase=GRADLE_USER_HOME -distributionPath=wrapper/dists -zipStoreBase=GRADLE_USER_HOME -zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-1.8-bin.zip diff --git a/gradlew b/gradlew deleted file mode 100755 index 91a7e269..00000000 --- a/gradlew +++ /dev/null @@ -1,164 +0,0 @@ -#!/usr/bin/env bash - -############################################################################## -## -## Gradle start up script for UN*X -## -############################################################################## - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS="" - -APP_NAME="Gradle" -APP_BASE_NAME=`basename "$0"` - -# Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD="maximum" - -warn ( ) { - echo "$*" -} - -die ( ) { - echo - echo "$*" - echo - exit 1 -} - -# OS specific support (must be 'true' or 'false'). -cygwin=false -msys=false -darwin=false -case "`uname`" in - CYGWIN* ) - cygwin=true - ;; - Darwin* ) - darwin=true - ;; - MINGW* ) - msys=true - ;; -esac - -# For Cygwin, ensure paths are in UNIX format before anything is touched. -if $cygwin ; then - [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"` -fi - -# Attempt to set APP_HOME -# Resolve links: $0 may be a link -PRG="$0" -# Need this for relative symlinks. -while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`"/$link" - fi -done -SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >&- -APP_HOME="`pwd -P`" -cd "$SAVED" >&- - -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar - -# Determine the Java command to use to start the JVM. -if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" - else - JAVACMD="$JAVA_HOME/bin/java" - fi - if [ ! -x "$JAVACMD" ] ; then - die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -else - JAVACMD="java" - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." -fi - -# Increase the maximum file descriptors if we can. -if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then - MAX_FD_LIMIT=`ulimit -H -n` - if [ $? -eq 0 ] ; then - if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then - MAX_FD="$MAX_FD_LIMIT" - fi - ulimit -n $MAX_FD - if [ $? -ne 0 ] ; then - warn "Could not set maximum file descriptor limit: $MAX_FD" - fi - else - warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" - fi -fi - -# For Darwin, add options to specify how the application appears in the dock -if $darwin; then - GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" -fi - -# For Cygwin, switch paths to Windows format before running java -if $cygwin ; then - APP_HOME=`cygpath --path --mixed "$APP_HOME"` - CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` - - # We build the pattern for arguments to be converted via cygpath - ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` - SEP="" - for dir in $ROOTDIRSRAW ; do - ROOTDIRS="$ROOTDIRS$SEP$dir" - SEP="|" - done - OURCYGPATTERN="(^($ROOTDIRS))" - # Add a user-defined pattern to the cygpath arguments - if [ "$GRADLE_CYGPATTERN" != "" ] ; then - OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" - fi - # Now convert the arguments - kludge to limit ourselves to /bin/sh - i=0 - for arg in "$@" ; do - CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` - CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option - - if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition - eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` - else - eval `echo args$i`="\"$arg\"" - fi - i=$((i+1)) - done - case $i in - (0) set -- ;; - (1) set -- "$args0" ;; - (2) set -- "$args0" "$args1" ;; - (3) set -- "$args0" "$args1" "$args2" ;; - (4) set -- "$args0" "$args1" "$args2" "$args3" ;; - (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; - esac -fi - -# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules -function splitJvmOpts() { - JVM_OPTS=("$@") -} -eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS -JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" - -exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" diff --git a/gradlew.bat b/gradlew.bat deleted file mode 100644 index aec99730..00000000 --- a/gradlew.bat +++ /dev/null @@ -1,90 +0,0 @@ -@if "%DEBUG%" == "" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS= - -set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto init - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto init - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:init -@rem Get command-line arguments, handling Windowz variants - -if not "%OS%" == "Windows_NT" goto win9xME_args -if "%@eval[2+2]" == "4" goto 4NT_args - -:win9xME_args -@rem Slurp the command line arguments. -set CMD_LINE_ARGS= -set _SKIP=2 - -:win9xME_args_slurp -if "x%~1" == "x" goto execute - -set CMD_LINE_ARGS=%* -goto execute - -:4NT_args -@rem Get arguments from the 4NT Shell from JP Software -set CMD_LINE_ARGS=%$ - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% - -:end -@rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega diff --git a/pom.xml b/pom.xml index 3557e179..cb0eaf98 100644 --- a/pom.xml +++ b/pom.xml @@ -21,19 +21,20 @@ 2.9.9 + 4.2.0 https://github.com/sendgrid/sendgrid-java scm:git:git@github.com:sendgrid/sendgrid-java.git scm:git:git@github.com:sendgrid/sendgrid-java.git - HEAD + HEAD - + ${basedir} - LICENSE.txt + LICENSE.md @@ -85,6 +86,50 @@ + + org.apache.maven.plugins + maven-assembly-plugin + 3.1.1 + + + jar-with-dependencies + + + + + make-assembly + package + + single + + + + + + org.apache.maven.plugins + maven-shade-plugin + 3.2.1 + + + + com.sendgrid.helpers.mail.objects + com.sendgrid + + + com.sendgrid.helpers.mail + com.sendgrid + + + + + + package + + shade + + + + @@ -100,7 +145,7 @@ com.sendgrid java-http-client - 4.1.0 + ${java-http-client.version} com.fasterxml.jackson.core diff --git a/scripts/upload.sh b/scripts/upload.sh deleted file mode 100755 index fb719838..00000000 --- a/scripts/upload.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/bash - -curl \ - -F "sdk=@./repo/com/sendgrid/sendgrid-java-latest.jar" \ - -H "X-Key: $UPLOAD_SECRET" \ - https://dx.sendgrid.com/upload - -exit 0 From 89a472934bfcf5d8fc459d052103836e12a7ba2e Mon Sep 17 00:00:00 2001 From: Twilio Date: Sat, 1 Feb 2020 00:38:48 +0000 Subject: [PATCH 144/345] [Librarian] Version Bump --- CHANGELOG.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1294aa28..4583c8fd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,15 @@ # Change Log All notable changes to this project will be documented in this file. +[2020-02-01] Version 4.4.2 +-------------------------- +**Library - Chore** +- [PR #471](https://github.com/sendgrid/sendgrid-java/pull/471): Update build.gradle. Thanks to [@doilio](https://github.com/doilio)! +- [PR #557](https://github.com/sendgrid/sendgrid-java/pull/557): Update Jackson dependencies to the latest version. Thanks to [@wkurniawan07](https://github.com/wkurniawan07)! +- [PR #574](https://github.com/sendgrid/sendgrid-java/pull/574): maven-compiler-plugin 3.8.1. Thanks to [@sullis](https://github.com/sullis)! +- [PR #599](https://github.com/sendgrid/sendgrid-java/pull/599): prep the repo for automated release. Thanks to [@eshanholtz](https://github.com/eshanholtz)! + + [2019-05-20] Version 4.4.1 --------------------------- ### Fix From 268fd10c4b351cc315ded2798177d7d1389a5922 Mon Sep 17 00:00:00 2001 From: Twilio Date: Sat, 1 Feb 2020 00:46:30 +0000 Subject: [PATCH 145/345] Release 4.4.2 --- CONTRIBUTING.md | 6 +- README.md | 6 +- pom.xml | 349 ++++++++++++++++++++++++------------------------ 3 files changed, 180 insertions(+), 181 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 531dcb88..a53d0ef1 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -100,7 +100,7 @@ touch Example.java Add the example you want to test to Example.java, including the headers at the top of the file. ``` bash -javac -classpath ../repo/com/sendgrid/4.4.1/sendgrid-4.4.1-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.4.1/sendgrid-4.4.1-jar.jar:. Example +javac -classpath ../repo/com/sendgrid/4.4.2/sendgrid-4.4.2-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.4.2/sendgrid-4.4.2-jar.jar:. Example ``` @@ -166,10 +166,10 @@ Please run your code through: ```bash # Clone your fork of the repo into the current directory git clone https://github.com/sendgrid/sendgrid-java - + # Navigate to the newly cloned directory cd sendgrid-java - + # Assign the original repo to a remote called "upstream" git remote add upstream https://github.com/sendgrid/sendgrid-java ``` diff --git a/README.md b/README.md index 3b941063..1d736927 100644 --- a/README.md +++ b/README.md @@ -67,7 +67,7 @@ Add the following to your build.gradle file in the root of your project. ... dependencies { ... - implementation 'com.sendgrid:sendgrid-java:4.4.1' + implementation 'com.sendgrid:sendgrid-java:4.4.2' } repositories { @@ -86,7 +86,7 @@ mvn install You can just drop the jar file in. It's a fat jar - it has all the dependencies built in. -[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/v4.4.1/sendgrid-java.jar) +[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/v4.4.2/sendgrid-java.jar) ## Dependencies @@ -232,7 +232,7 @@ Please see our [troubleshooting guide](https://github.com/sendgrid/sendgrid-java sendgrid-java is guided and supported by the Twilio Developer Experience Team. -Please email the Developer Experience Team [here](mailto:dx@sendgrid.com) in case of any queries. +Please email the Developer Experience Team [here](mailto:dx@sendgrid.com) in case of any queries. sendgrid-java is maintained and funded by Twilio SendGrid, Inc. The names and logos for sendgrid-java are trademarks of Twilio SendGrid, Inc. diff --git a/pom.xml b/pom.xml index cb0eaf98..2ca492ec 100644 --- a/pom.xml +++ b/pom.xml @@ -1,179 +1,178 @@ - + - 4.0.0 - - org.sonatype.oss - oss-parent - 7 - - com.sendgrid - sendgrid-java - Twilio SendGrid Java helper library - 4.4.1 - This Java module allows you to quickly and easily send emails through Twilio SendGrid using Java. + 4.0.0 + + org.sonatype.oss + oss-parent + 7 + + com.sendgrid + sendgrid-java + Twilio SendGrid Java helper library + 4.4.2 + This Java module allows you to quickly and easily send emails through Twilio SendGrid using Java. + https://github.com/sendgrid/sendgrid-java + + + The MIT License (MIT) + https://github.com/sendgrid/java-http-client/blob/master/LICENSE + repo + + + + 2.9.9 + 4.3.0 + + https://github.com/sendgrid/sendgrid-java - - - The MIT License (MIT) - https://github.com/sendgrid/java-http-client/blob/master/LICENSE - repo - - - - 2.9.9 - 4.2.0 - - - https://github.com/sendgrid/sendgrid-java - scm:git:git@github.com:sendgrid/sendgrid-java.git - scm:git:git@github.com:sendgrid/sendgrid-java.git - HEAD + scm:git:git@github.com:sendgrid/sendgrid-java.git + scm:git:git@github.com:sendgrid/sendgrid-java.git + 4.4.2 - - - - ${basedir} - - LICENSE.md - - - - - - org.apache.maven.plugins - maven-compiler-plugin - 3.8.1 - - 1.8 - 1.8 - - - - org.apache.maven.plugins - maven-release-plugin - 2.4.2 - - - org.apache.maven.scm - maven-scm-provider-gitexe - 1.8.1 - - - - - org.apache.maven.plugins - maven-source-plugin - 2.2.1 - - - attach-sources - - jar - - - - - - org.apache.maven.plugins - maven-javadoc-plugin - 2.9.1 - - - attach-javadocs - - jar - - - - - - org.apache.maven.plugins - maven-assembly-plugin - 3.1.1 - - - jar-with-dependencies - - - - - make-assembly - package - - single - - - - - - org.apache.maven.plugins - maven-shade-plugin - 3.2.1 - - - - com.sendgrid.helpers.mail.objects - com.sendgrid - - - com.sendgrid.helpers.mail - com.sendgrid - - - - - - package - - shade - - - - - - - - - thinkingserious - Elmer Thomas - dx@sendgrid.com - https://sendgrid.com - - - jar - - - com.sendgrid - java-http-client - ${java-http-client.version} - - - com.fasterxml.jackson.core - jackson-core - ${jackson.version} - - - com.fasterxml.jackson.core - jackson-annotations - ${jackson.version} - - - com.fasterxml.jackson.core - jackson-databind - ${jackson.version} - - - junit - junit-dep - 4.11 - test - - - org.mockito - mockito-core - 2.1.0 - test - - + + + + ${basedir} + + LICENSE.md + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.8.1 + + 1.8 + 1.8 + + + + org.apache.maven.plugins + maven-release-plugin + 2.4.2 + + + org.apache.maven.scm + maven-scm-provider-gitexe + 1.8.1 + + + + + org.apache.maven.plugins + maven-source-plugin + 2.2.1 + + + attach-sources + + jar + + + + + + org.apache.maven.plugins + maven-javadoc-plugin + 2.9.1 + + + attach-javadocs + + jar + + + + + + org.apache.maven.plugins + maven-assembly-plugin + 3.1.1 + + + jar-with-dependencies + + + + + make-assembly + package + + single + + + + + + org.apache.maven.plugins + maven-shade-plugin + 3.2.1 + + + + com.sendgrid.helpers.mail.objects + com.sendgrid + + + com.sendgrid.helpers.mail + com.sendgrid + + + + + + package + + shade + + + + + + + + + thinkingserious + Elmer Thomas + dx@sendgrid.com + https://sendgrid.com + + + jar + + + com.sendgrid + java-http-client + ${java-http-client.version} + + + com.fasterxml.jackson.core + jackson-core + ${jackson.version} + + + com.fasterxml.jackson.core + jackson-annotations + ${jackson.version} + + + com.fasterxml.jackson.core + jackson-databind + ${jackson.version} + + + junit + junit-dep + 4.11 + test + + + org.mockito + mockito-core + 2.1.0 + test + + - From aaef5b4571d57d5a9119201d70de82abe8a5b6c9 Mon Sep 17 00:00:00 2001 From: Elise Shanholtz Date: Mon, 3 Feb 2020 16:50:53 -0800 Subject: [PATCH 146/345] Version Bump --- .travis.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.travis.yml b/.travis.yml index 167344c7..8e697df3 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,4 +1,6 @@ language: java +before_install: + - echo $GPG_SECRET_KEYS | base64 --decode | $GPG_EXECUTABLE --import || true matrix: include: - name: 'OpenJDK 7' From 1ff240564d1f8cfe8b3de9ea449e913d61eff3a0 Mon Sep 17 00:00:00 2001 From: Elise Shanholtz Date: Mon, 3 Feb 2020 16:53:40 -0800 Subject: [PATCH 147/345] Version Bump --- pom.xml | 122 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 122 insertions(+) diff --git a/pom.xml b/pom.xml index 2ca492ec..27569c47 100644 --- a/pom.xml +++ b/pom.xml @@ -29,6 +29,128 @@ scm:git:git@github.com:sendgrid/sendgrid-java.git 4.4.2 + + + gpg + + false + + + + + org.apache.maven.plugins + maven-gpg-plugin + 1.6 + + + sign-artifacts + verify + + sign + + + + + ${gpg.keyname} + ${gpg.passphrase} + + --pinentry-mode + loopback + + + + + + + + release + + + release + + + + + + org.sonatype.plugins + nexus-staging-maven-plugin + 1.6.8 + true + + ossrh + https://oss.sonatype.org/ + true + + + + org.apache.maven.plugins + maven-source-plugin + 3.0.1 + + + attach-sources + + jar-no-fork + + + + + + org.apache.maven.plugins + maven-javadoc-plugin + 2.10.4 + + + attach-javadocs + + jar + + + + + + org.apache.maven.plugins + maven-gpg-plugin + 1.6 + + + sign-artifacts + verify + + sign + + + + + + org.apache.maven.plugins + maven-shade-plugin + 3.2.1 + + + + com.sendgrid.helpers.mail.objects + com.sendgrid + + + com.sendgrid.helpers.mail + com.sendgrid + + + + + + package + + shade + + + + + + + + From 76dcd4280280c2661be211eec6f47c2d691c30b1 Mon Sep 17 00:00:00 2001 From: brianjester Date: Tue, 4 Feb 2020 08:35:37 -0800 Subject: [PATCH 148/345] docs: fix typo in README (#590) --- README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/README.md b/README.md index 1d736927..954df3fc 100644 --- a/README.md +++ b/README.md @@ -50,7 +50,7 @@ Update the development environment with your [SENDGRID_API_KEY](https://app.send cp .env_sample .env ``` 2. Edit the new `.env` to add your API key -3. Source the `.env` file to set rhe variable in the current session +3. Source the `.env` file to set the variable in the current session ```bash source .env ``` @@ -220,7 +220,6 @@ Quick links: - [Feature Request](https://github.com/sendgrid/sendgrid-java/blob/master/CONTRIBUTING.md#feature-request) - [Bug Reports](https://github.com/sendgrid/sendgrid-java/blob/master/CONTRIBUTING.md#submit-a-bug-report) - [Improvements to the Codebase](https://github.com/sendgrid/sendgrid-java/blob/master/CONTRIBUTING.md#improvements-to-the-codebase) -- [Sign the CLA to Create a Pull Request](https://cla.sendgrid.com/sendgrid/sendgrid-java) # Troubleshooting From b71b572ba60e50aab2ca67d2bad0f6b872d9a522 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 4 Feb 2020 10:46:46 -0600 Subject: [PATCH 149/345] chore: Bump jackson.version from 2.9.9 to 2.10.2 (#602) Bumps `jackson.version` from 2.9.9 to 2.10.2. Updates `jackson-core` from 2.9.9 to 2.10.2 - [Release notes](https://github.com/FasterXML/jackson-core/releases) - [Commits](https://github.com/FasterXML/jackson-core/compare/jackson-core-2.9.9...jackson-core-2.10.2) Updates `jackson-annotations` from 2.9.9 to 2.10.2 - [Release notes](https://github.com/FasterXML/jackson/releases) - [Commits](https://github.com/FasterXML/jackson/commits) Updates `jackson-databind` from 2.9.9 to 2.10.2 - [Release notes](https://github.com/FasterXML/jackson/releases) - [Commits](https://github.com/FasterXML/jackson/commits) Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 27569c47..6aebb72a 100644 --- a/pom.xml +++ b/pom.xml @@ -20,7 +20,7 @@ - 2.9.9 + 2.10.2 4.3.0 From f00704b6bff594636d04b7517ec45d9b15ea20f5 Mon Sep 17 00:00:00 2001 From: Sam Harrison Date: Tue, 4 Feb 2020 12:48:25 -0600 Subject: [PATCH 150/345] fix: version command updated --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index bc1a62ee..c739dbc9 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ .PHONY: install test test-integration clean -VERSION := $(shell mvn help:evaluate -Dexpression=project.version | grep -e '^[^\[]') +VERSION := $(shell mvn help:evaluate -Dexpression=project.version --batch-mode | grep -e '^[^\[]') install: @java -version || (echo "Java is not installed, please install Java >= 7"; exit 1); mvn clean install -DskipTests=true -Dgpg.skip -B From 69ba0d2941ad33eb57bec96d4d0cb3c52961dd2d Mon Sep 17 00:00:00 2001 From: Elise Shanholtz Date: Tue, 4 Feb 2020 11:18:04 -0800 Subject: [PATCH 151/345] fix: use http client version range --- pom.xml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 6aebb72a..d50252e8 100644 --- a/pom.xml +++ b/pom.xml @@ -21,7 +21,6 @@ 2.10.2 - 4.3.0 https://github.com/sendgrid/sendgrid-java @@ -267,7 +266,7 @@ com.sendgrid java-http-client - ${java-http-client.version} + [4.2,) com.fasterxml.jackson.core From 1b2a55eaacf069cecde7ef26ff6d34bcc74237d7 Mon Sep 17 00:00:00 2001 From: Ethan Wood Date: Tue, 4 Feb 2020 12:51:11 -0700 Subject: [PATCH 152/345] chore: Remove unnecessary access modifiers on interface methods. (#563) --- src/main/java/com/sendgrid/APICallback.java | 4 ++-- src/main/java/com/sendgrid/SendGridAPI.java | 22 ++++++++++----------- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/src/main/java/com/sendgrid/APICallback.java b/src/main/java/com/sendgrid/APICallback.java index fde54f9d..8504f41c 100644 --- a/src/main/java/com/sendgrid/APICallback.java +++ b/src/main/java/com/sendgrid/APICallback.java @@ -9,11 +9,11 @@ public interface APICallback { * Callback method in case of an error. * @param ex the error that was thrown. */ - public void error(Exception ex); + void error(Exception ex); /** * Callback method in case of a valid response. * @param response the valid response. */ - public void response(Response response); + void response(Response response); } diff --git a/src/main/java/com/sendgrid/SendGridAPI.java b/src/main/java/com/sendgrid/SendGridAPI.java index 1d9e69f7..aa9583a2 100644 --- a/src/main/java/com/sendgrid/SendGridAPI.java +++ b/src/main/java/com/sendgrid/SendGridAPI.java @@ -10,34 +10,34 @@ public interface SendGridAPI { * * @param apiKey is your Twilio SendGrid API Key: https://app.sendgrid.com/settings/api_keys */ - public void initializeSendGrid(String apiKey); + void initializeSendGrid(String apiKey); /** * Returns the library version * * @return the library version. */ - public String getLibraryVersion(); + String getLibraryVersion(); /** * Gets the version. * * @return returns the version. */ - public String getVersion(); + String getVersion(); /** * Sets the version. * * @param version the Twilio SendGrid version. */ - public void setVersion(String version); + void setVersion(String version); /** * Gets the request headers. * @return returns a map of request headers. */ - public Map getRequestHeaders(); + Map getRequestHeaders(); /** * Adds a request headers. @@ -46,7 +46,7 @@ public interface SendGridAPI { * @param value the value * @return returns a map of request headers. */ - public Map addRequestHeader(String key, String value); + Map addRequestHeader(String key, String value); /** * Removes a request headers. @@ -54,21 +54,21 @@ public interface SendGridAPI { * @param key the key * @return returns a map of request headers. */ - public Map removeRequestHeader(String key); + Map removeRequestHeader(String key); /** * Gets the host. * * @return returns the host. */ - public String getHost(); + String getHost(); /** * Sets the host. * * @param host the host to set */ - public void setHost(String host); + void setHost(String host); /** * Class makeCall makes the call to the Twilio SendGrid API, override this method for @@ -78,7 +78,7 @@ public interface SendGridAPI { * @return returns a response. * @throws IOException in case of network or marshal error. */ - public Response makeCall(Request request) throws IOException; + Response makeCall(Request request) throws IOException; /** * Class api sets up the request to the Twilio SendGrid API, this is main interface. @@ -87,5 +87,5 @@ public interface SendGridAPI { * @return returns a response. * @throws IOException in case of network or marshal error. */ - public Response api(Request request) throws IOException; + Response api(Request request) throws IOException; } From 8fc3514a8f9384379d2a438d04b36cddd866c357 Mon Sep 17 00:00:00 2001 From: Rohan Talip Date: Tue, 4 Feb 2020 11:57:16 -0800 Subject: [PATCH 153/345] chore: Removed the apiKey instance variable as it wasn't being used (#542) --- src/main/java/com/sendgrid/SendGrid.java | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/main/java/com/sendgrid/SendGrid.java b/src/main/java/com/sendgrid/SendGrid.java index 213cce52..3c27b313 100644 --- a/src/main/java/com/sendgrid/SendGrid.java +++ b/src/main/java/com/sendgrid/SendGrid.java @@ -20,9 +20,6 @@ public class SendGrid implements SendGridAPI { private ExecutorService pool; - /** The user's API key. */ - private String apiKey; - /** The Twilio SendGrid host to which to connect. */ private String host; @@ -78,7 +75,6 @@ public SendGrid(String apiKey, Client client) { * @param apiKey the user's API key. */ public void initializeSendGrid(String apiKey) { - this.apiKey = apiKey; this.host = "api.sendgrid.com"; this.version = "v3"; this.requestHeaders = new HashMap(); From ced880a3fe553598023a9dd628904766b52fdb4a Mon Sep 17 00:00:00 2001 From: Anurag Sachdeva Date: Wed, 5 Feb 2020 01:34:46 +0530 Subject: [PATCH 154/345] docs: fix a minor type in README (#516) From c8fb5a6d9e64ef442453e5f0e2d7fca5605f021b Mon Sep 17 00:00:00 2001 From: thepriefy Date: Wed, 5 Feb 2020 03:14:49 +0700 Subject: [PATCH 155/345] docs: makes Environmental Variables a sub topic in CONTRIBUTING.md (#387) --- CONTRIBUTING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index a53d0ef1..bca4db22 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -72,7 +72,7 @@ git clone https://github.com/sendgrid/sendgrid-java.git cd sendgrid-java ``` -## Environment Variables +### Environment Variables First, get your free Twilio SendGrid account [here](https://sendgrid.com/free?source=sendgrid-java). From 4c13fa2b26c63de683152806cae376276cea4f70 Mon Sep 17 00:00:00 2001 From: childish-sambino Date: Tue, 4 Feb 2020 15:16:24 -0600 Subject: [PATCH 156/345] docs: baseline all the templated markdown docs (#603) --- .github/ISSUE_TEMPLATE | 17 --- .github/PULL_REQUEST_TEMPLATE | 26 ---- CODE_OF_CONDUCT.md | 115 +++++++++++------- CONTRIBUTING.md | 2 +- ISSUE_TEMPLATE.md | 26 ++++ LICENSE.md | 16 +-- PULL_REQUEST_TEMPLATE.md | 31 +++++ src/test/java/com/sendgrid/LicenseTest.java | 2 +- .../com/sendgrid/TestRequiredFilesExist.java | 8 +- 9 files changed, 144 insertions(+), 99 deletions(-) delete mode 100644 .github/ISSUE_TEMPLATE delete mode 100644 .github/PULL_REQUEST_TEMPLATE create mode 100644 ISSUE_TEMPLATE.md create mode 100644 PULL_REQUEST_TEMPLATE.md diff --git a/.github/ISSUE_TEMPLATE b/.github/ISSUE_TEMPLATE deleted file mode 100644 index ee3ea5c2..00000000 --- a/.github/ISSUE_TEMPLATE +++ /dev/null @@ -1,17 +0,0 @@ -#### Issue Summary - -A summary of the issue and the environment in which it occurs. If suitable, include the steps required to reproduce the bug. Please feel free to include screenshots, screencasts, code examples. - - -#### Steps to Reproduce - -1. This is the first step -2. This is the second step -3. Further steps, etc. - -Any other information you want to share that is relevant to the issue being reported. Especially, why do you consider this to be a bug? What do you expect to happen instead? - -#### Technical details: - -* sendgrid-java Version: master (latest commit: [commit number]) -* Java Version: X.X \ No newline at end of file diff --git a/.github/PULL_REQUEST_TEMPLATE b/.github/PULL_REQUEST_TEMPLATE deleted file mode 100644 index 4aa9c567..00000000 --- a/.github/PULL_REQUEST_TEMPLATE +++ /dev/null @@ -1,26 +0,0 @@ - -# Fixes # - -### Checklist -- [ ] I acknowledge that all my contributions will be made under the project's license -- [ ] I have made a material change to the repo (functionality, testing, spelling, grammar) -- [ ] I have read the [Contribution Guide] and my PR follows them. -- [ ] I updated my branch with the development branch. -- [ ] I have added tests that prove my fix is effective or that my feature works -- [ ] I have added necessary documentation about the functionality in the appropriate .md file -- [ ] I have added in line documentation to the code I modified - -### Short description of what this PR does: -- -- - -If you have questions, please send an email to [Sendgrid](mailto:dx@sendgrid.com), or file a Github Issue in this repository. \ No newline at end of file diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index d2ca9db9..2f0727ed 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -1,42 +1,73 @@ - - # Twilio SendGrid Community Code of Conduct - - The Twilio SendGrid open source community is made up of members from around the globe with a diverse set of skills, personalities, and experiences. It is through these differences that our community experiences successes and continued growth. When you're working with members of the community, we encourage you to follow these guidelines, which help steer our interactions and strive to maintain a positive, successful and growing community. - - ### Be Open - Members of the community are open to collaboration, whether it's on pull requests, code reviews, approvals, issues or otherwise. We're receptive to constructive comments and criticism, as the experiences and skill sets of all members contribute to the whole of our efforts. We're accepting of all who wish to take part in our activities, fostering an environment where anyone can participate, and everyone can make a difference. - - ### Be Considerate - Members of the community are considerate of their peers, which include other contributors and users of Twilio SendGrid. We're thoughtful when addressing the efforts of others, keeping in mind that often the labor was completed with the intent of the good of the community. We're attentive in our communications, whether in person or online, and we're tactful when approaching differing views. - - ### Be Respectful - Members of the community are respectful. We're respectful of others, their positions, their skills, their commitments and their efforts. We're respectful of the volunteer efforts that permeate the Twilio SendGrid community. We're respectful of the processes outlined in the community, and we work within them. When we disagree, we are courteous in raising our issues. Overall, we're good to each other. We contribute to this community not because we have to, but because we want to. If we remember that, these guidelines will come naturally. - - ## Additional Guidance - - ### Disclose Potential Conflicts of Interest - Community discussions often involve interested parties. We expect participants to be aware when they are conflicted due to employment or other projects they are involved in and disclose those interests to other project members. When in doubt, over-disclose. Perceived conflicts of interest are important to address so that the community’s decisions are credible even when unpopular, difficult or favorable to the interests of one group over another. - - ### Interpretation - This Code is not exhaustive or complete. It is not a rulebook; it serves to distill our common understanding of a collaborative, shared environment and goals. We expect it to be followed in spirit as much as in the letter. When in doubt, try to abide by [Twilio SendGrid’s cultural values](https://sendgrid.com/blog/employee-engagement-the-4h-way) defined by our “4H’s”: Happy, Hungry, Humble and Honest. - - ### Enforcement - Most members of the Twilio SendGrid community always comply with this Code, not because of the existence of this Code, but because they have long experience participating in open source communities where the conduct described above is normal and expected. However, failure to observe this Code may be grounds for suspension, reporting the user for abuse or changing permissions for outside contributors. - - ## If you have concerns about someone’s conduct - **Initiate Direct Contact** - It is always appropriate to email a community member (if contact information is available), mention that you think their behavior was out of line, and (if necessary) point them to this Code. - - **Discuss Publicly** - Discussing publicly is always acceptable. Note, though, that approaching the person directly may be better, as it tends to make them less defensive, and it respects the time of other community members, so you probably want to try direct contact first. - - **Contact the Moderators** - You can reach the Twilio SendGrid moderators by emailing dx@sendgrid.com. - - ## Submission to Twilio SendGrid Repositories - Finally, just a reminder, changes to the Twilio SendGrid repositories will only be accepted upon completion of the [Twilio SendGrid Contributor Agreement](https://cla.sendgrid.com). - - ## Attribution - - Twilio SendGrid thanks the following, on which it draws for content and inspiration: - - * [Python Community Code of Conduct](https://www.python.org/psf/codeofconduct/) - * [Open Source Initiative General Code of Conduct](https://opensource.org/codeofconduct) - * [Apache Code of Conduct](https://www.apache.org/foundation/policies/conduct.html) +# Contributor Covenant Code of Conduct + +## Our Pledge + +In the interest of fostering an open and welcoming environment, we as +contributors and maintainers pledge to making participation in our project and +our community a harassment-free experience for everyone, regardless of age, body +size, disability, ethnicity, sex characteristics, gender identity and expression, +level of experience, education, socio-economic status, nationality, personal +appearance, race, religion, or sexual identity and orientation. + +## Our Standards + +Examples of behavior that contributes to creating a positive environment +include: + +- Using welcoming and inclusive language +- Being respectful of differing viewpoints and experiences +- Gracefully accepting constructive criticism +- Focusing on what is best for the community +- Showing empathy towards other community members + +Examples of unacceptable behavior by participants include: + +- The use of sexualized language or imagery and unwelcome sexual attention or + advances +- Trolling, insulting/derogatory comments, and personal or political attacks +- Public or private harassment +- Publishing others' private information, such as a physical or electronic + address, without explicit permission +- Other conduct which could reasonably be considered inappropriate in a + professional setting + +## Our Responsibilities + +Project maintainers are responsible for clarifying the standards of acceptable +behavior and are expected to take appropriate and fair corrective action in +response to any instances of unacceptable behavior. + +Project maintainers have the right and responsibility to remove, edit, or +reject comments, commits, code, wiki edits, issues, and other contributions +that are not aligned to this Code of Conduct, or to ban temporarily or +permanently any contributor for other behaviors that they deem inappropriate, +threatening, offensive, or harmful. + +## Scope + +This Code of Conduct applies both within project spaces and in public spaces +when an individual is representing the project or its community. Examples of +representing a project or community include using an official project e-mail +address, posting via an official social media account, or acting as an appointed +representative at an online or offline event. Representation of a project may be +further defined and clarified by project maintainers. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported by contacting the project team at open-source@twilio.com. All +complaints will be reviewed and investigated and will result in a response that +is deemed necessary and appropriate to the circumstances. The project team is +obligated to maintain confidentiality with regard to the reporter of an incident. +Further details of specific enforcement policies may be posted separately. + +Project maintainers who do not follow or enforce the Code of Conduct in good +faith may face temporary or permanent repercussions as determined by other +members of the project's leadership. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, +available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html + +[homepage]: https://www.contributor-covenant.org diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index bca4db22..9e433714 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -47,7 +47,7 @@ Before you decide to create a new issue, please try the following: ### Please use our Bug Report Template -In order to make the process easier, we've included a [sample bug report template](https://github.com/sendgrid/sendgrid-java/blob/master/.github/ISSUE_TEMPLATE) (borrowed from [Ghost](https://github.com/TryGhost/Ghost/)). The template uses [GitHub flavored markdown](https://help.github.com/articles/github-flavored-markdown/) for formatting. +In order to make the process easier, we've included a [sample bug report template](https://github.com/sendgrid/sendgrid-java/blob/master/ISSUE_TEMPLATE.md) (borrowed from [Ghost](https://github.com/TryGhost/Ghost/)). The template uses [GitHub flavored markdown](https://help.github.com/articles/github-flavored-markdown/) for formatting. ## Improvements to the Codebase diff --git a/ISSUE_TEMPLATE.md b/ISSUE_TEMPLATE.md new file mode 100644 index 00000000..68630383 --- /dev/null +++ b/ISSUE_TEMPLATE.md @@ -0,0 +1,26 @@ + + +### Issue Summary +A summary of the issue and the environment in which it occurs. If suitable, include the steps required to reproduce the bug. Please feel free to include screenshots, screencasts, or code examples. + +### Steps to Reproduce +1. This is the first step +2. This is the second step +3. Further steps, etc. + +### Code Snippet +```java +# paste code here +``` + +### Exception/Log +``` +# paste exception/log here +``` + +### Technical details: +* sendgrid-java version: +* java version: + diff --git a/LICENSE.md b/LICENSE.md index d55059a3..29aba592 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -1,13 +1,13 @@ -The MIT License (MIT) +MIT License -Copyright (c) 2013-2020 Twilio SendGrid, Inc. +Copyright (C) 2020, Twilio SendGrid, Inc. -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. diff --git a/PULL_REQUEST_TEMPLATE.md b/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 00000000..215059a9 --- /dev/null +++ b/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,31 @@ + + +# Fixes # + +A short description of what this PR does. + +### Checklist +- [ ] I acknowledge that all my contributions will be made under the project's license +- [ ] I have made a material change to the repo (functionality, testing, spelling, grammar) +- [ ] I have read the [Contribution Guidelines](CONTRIBUTING.md) and my PR follows them +- [ ] I have titled the PR appropriately +- [ ] I have updated my branch with the master branch +- [ ] I have added tests that prove my fix is effective or that my feature works +- [ ] I have added necessary documentation about the functionality in the appropriate .md file +- [ ] I have added inline documentation to the code I modified + +If you have questions, please file a [support ticket](https://twilio.com/help/contact), or create a GitHub Issue in this repository. diff --git a/src/test/java/com/sendgrid/LicenseTest.java b/src/test/java/com/sendgrid/LicenseTest.java index 776b768e..493458e6 100644 --- a/src/test/java/com/sendgrid/LicenseTest.java +++ b/src/test/java/com/sendgrid/LicenseTest.java @@ -21,7 +21,7 @@ public void testLicenseShouldHaveCorrectYear() throws IOException { } } } - String expectedCopyright = String.format("Copyright (c) 2013-%d Twilio SendGrid, Inc.", Calendar.getInstance().get(Calendar.YEAR)); + String expectedCopyright = String.format("Copyright (C) %d, Twilio SendGrid, Inc. ", Calendar.getInstance().get(Calendar.YEAR)); Assert.assertEquals("License has incorrect year", copyrightText, expectedCopyright); } } diff --git a/src/test/java/com/sendgrid/TestRequiredFilesExist.java b/src/test/java/com/sendgrid/TestRequiredFilesExist.java index 928758b9..bb5dd46c 100644 --- a/src/test/java/com/sendgrid/TestRequiredFilesExist.java +++ b/src/test/java/com/sendgrid/TestRequiredFilesExist.java @@ -57,9 +57,9 @@ public class TestRequiredFilesExist { assertTrue(new File("./CONTRIBUTING.md").exists()); } - // ./.github/ISSUE_TEMPLATE + // ./ISSUE_TEMPLATE.md @Test public void checkIssuesTemplateExists() { - assertTrue(new File("./.github/ISSUE_TEMPLATE").exists()); + assertTrue(new File("./ISSUE_TEMPLATE.md").exists()); } // ./LICENSE.md @@ -67,9 +67,9 @@ public class TestRequiredFilesExist { assertTrue(new File("./LICENSE.md").exists()); } - // ./.github/PULL_REQUEST_TEMPLATE + // ./PULL_REQUEST_TEMPLATE.md @Test public void checkPullRequestExists() { - assertTrue(new File("./.github/PULL_REQUEST_TEMPLATE").exists()); + assertTrue(new File("./PULL_REQUEST_TEMPLATE.md").exists()); } // ./README.md From 40d073ec5dcd839923ea5b08d0fd07f004dc9667 Mon Sep 17 00:00:00 2001 From: Derek Neuland Date: Tue, 4 Feb 2020 16:37:53 -0500 Subject: [PATCH 157/345] docs: Add Code Review to Contributing.md (#402) --- CONTRIBUTING.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 6d512b75..60ac4b09 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -16,6 +16,7 @@ Hello! Thank you for choosing to help contribute to one of the Twilio SendGrid o - [Testing](#testing) - [Style Guidelines & Naming Conventions](#style-guidelines--naming-conventions) - [Creating a Pull Request](#creating-a-pull-request) +- [Code Reviews](#code-reviews) We use [Milestones](https://github.com/sendgrid/sendgrid-java/milestones) to help define current roadmaps, please feel free to grab an issue from the current milestone. Please indicate that you have begun work on it to avoid collisions. Once a PR is made, community review, comments, suggestions and additional PRs are welcomed and encouraged. @@ -211,6 +212,9 @@ Please run your code through: ``` 7. [Open a Pull Request](https://help.github.com/articles/using-pull-requests/) - with a clear title and description against the `development` branch. All tests must be passing before we will review the PR. + with a clear title and description against the `master` branch. All tests must be passing before we will review the PR. + +## Code Reviews +If you can, please look at open PRs and review them. Give feedback and help us merge these PRs much faster! If you don't know how, Github has some great information on how to review a Pull Request. If you have any additional questions, please feel free to [email](mailto:dx@sendgrid.com) us or create an issue in this repo. From 63aafd1a32fd4df6faf873f8f2e98fd2b5e0e907 Mon Sep 17 00:00:00 2001 From: Frieder Bluemle Date: Tue, 4 Feb 2020 13:46:55 -0800 Subject: [PATCH 158/345] docs: Fix GitHub spelling (#604) --- CONTRIBUTING.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 60ac4b09..bd04f222 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -213,8 +213,8 @@ Please run your code through: 7. [Open a Pull Request](https://help.github.com/articles/using-pull-requests/) with a clear title and description against the `master` branch. All tests must be passing before we will review the PR. - + ## Code Reviews -If you can, please look at open PRs and review them. Give feedback and help us merge these PRs much faster! If you don't know how, Github has some great information on how to review a Pull Request. +If you can, please look at open PRs and review them. Give feedback and help us merge these PRs much faster! If you don't know how, GitHub has some great information on how to review a Pull Request. If you have any additional questions, please feel free to [email](mailto:dx@sendgrid.com) us or create an issue in this repo. From 7d8a80f96a95bcc6daa4238c5c3ebd337d3edeab Mon Sep 17 00:00:00 2001 From: Twilio Date: Wed, 5 Feb 2020 19:04:46 +0000 Subject: [PATCH 159/345] [Librarian] Version Bump --- CHANGELOG.md | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4583c8fd..599016cb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,23 @@ # Change Log All notable changes to this project will be documented in this file. +[2020-02-05] Version 4.4.3 +-------------------------- +**Library - Docs** +- [PR #604](https://github.com/sendgrid/sendgrid-java/pull/604): Fix GitHub spelling. Thanks to [@friederbluemle](https://github.com/friederbluemle)! +- [PR #534](https://github.com/sendgrid/sendgrid-java/pull/534): Fix whitespace errors and typos. Thanks to [@friederbluemle](https://github.com/friederbluemle)! +- [PR #402](https://github.com/sendgrid/sendgrid-java/pull/402): Add Code Review to Contributing.md. Thanks to [@derekneuland](https://github.com/derekneuland)! +- [PR #603](https://github.com/sendgrid/sendgrid-java/pull/603): baseline all the templated markdown docs. Thanks to [@childish-sambino](https://github.com/childish-sambino)! +- [PR #387](https://github.com/sendgrid/sendgrid-java/pull/387): makes Environmental Variables a sub topic in CONTRIBUTING.md. Thanks to [@thepriefy](https://github.com/thepriefy)! +- [PR #516](https://github.com/sendgrid/sendgrid-java/pull/516): fix a minor type in README. Thanks to [@anuragsachdeva28](https://github.com/anuragsachdeva28)! +- [PR #590](https://github.com/sendgrid/sendgrid-java/pull/590): fix typo in README. Thanks to [@brianjester](https://github.com/brianjester)! + +**Library - Chore** +- [PR #542](https://github.com/sendgrid/sendgrid-java/pull/542): Removed the apiKey instance variable as it wasn't being used. Thanks to [@RohanTalip](https://github.com/RohanTalip)! +- [PR #563](https://github.com/sendgrid/sendgrid-java/pull/563): Remove unnecessary access modifiers on interface methods. Thanks to [@ethanwood17](https://github.com/ethanwood17)! +- [PR #602](https://github.com/sendgrid/sendgrid-java/pull/602): Bump jackson.version from 2.9.9 to 2.10.2. Thanks to [@dependabot](https://github.com/dependabot)! + + [2020-02-01] Version 4.4.2 -------------------------- **Library - Chore** From 0e121cc4e83de5fd954e420189cb6224ba92991e Mon Sep 17 00:00:00 2001 From: Twilio Date: Wed, 5 Feb 2020 19:38:13 +0000 Subject: [PATCH 160/345] Release 4.4.3 --- CONTRIBUTING.md | 2 +- README.md | 4 ++-- pom.xml | 6 +++--- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index bd04f222..5687d511 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -101,7 +101,7 @@ touch Example.java Add the example you want to test to Example.java, including the headers at the top of the file. ``` bash -javac -classpath ../repo/com/sendgrid/4.4.2/sendgrid-4.4.2-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.4.2/sendgrid-4.4.2-jar.jar:. Example +javac -classpath ../repo/com/sendgrid/4.4.3/sendgrid-4.4.3-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.4.3/sendgrid-4.4.3-jar.jar:. Example ``` diff --git a/README.md b/README.md index 30b2da8d..de73ea22 100644 --- a/README.md +++ b/README.md @@ -67,7 +67,7 @@ Add the following to your build.gradle file in the root of your project. ... dependencies { ... - implementation 'com.sendgrid:sendgrid-java:4.4.2' + implementation 'com.sendgrid:sendgrid-java:4.4.3' } repositories { @@ -86,7 +86,7 @@ mvn install You can just drop the jar file in. It's a fat jar - it has all the dependencies built in. -[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/v4.4.2/sendgrid-java.jar) +[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/v4.4.3/sendgrid-java.jar) ## Dependencies diff --git a/pom.xml b/pom.xml index d50252e8..af283cb1 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ com.sendgrid sendgrid-java Twilio SendGrid Java helper library - 4.4.2 + 4.4.3 This Java module allows you to quickly and easily send emails through Twilio SendGrid using Java. https://github.com/sendgrid/sendgrid-java @@ -26,7 +26,7 @@ https://github.com/sendgrid/sendgrid-java scm:git:git@github.com:sendgrid/sendgrid-java.git scm:git:git@github.com:sendgrid/sendgrid-java.git - 4.4.2 + 4.4.3 @@ -296,4 +296,4 @@ test - + \ No newline at end of file From 81a170e03505cc9d7f437d26b60939893d9410a1 Mon Sep 17 00:00:00 2001 From: Elise Shanholtz Date: Fri, 7 Feb 2020 15:43:55 -0800 Subject: [PATCH 161/345] fix: update release jar (#608) --- Makefile | 2 +- pom.xml | 10 +++++++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index c739dbc9..36295ba5 100644 --- a/Makefile +++ b/Makefile @@ -4,7 +4,7 @@ VERSION := $(shell mvn help:evaluate -Dexpression=project.version --batch-mode | install: @java -version || (echo "Java is not installed, please install Java >= 7"; exit 1); mvn clean install -DskipTests=true -Dgpg.skip -B - cp target/sendgrid-java-$(VERSION).jar sendgrid-java.jar + cp target/sendgrid-java-$(VERSION)-shaded.jar sendgrid-java.jar test: mvn test diff --git a/pom.xml b/pom.xml index af283cb1..be2ca895 100644 --- a/pom.xml +++ b/pom.xml @@ -143,6 +143,10 @@ shade + + true + shaded + @@ -248,6 +252,10 @@ shade + + true + shaded + @@ -296,4 +304,4 @@ test - \ No newline at end of file + From a2157a17256490947b00cc359675aa6c672c5e3d Mon Sep 17 00:00:00 2001 From: Twilio Date: Sat, 8 Feb 2020 00:14:56 +0000 Subject: [PATCH 162/345] [Librarian] Version Bump --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 599016cb..aecc8312 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,12 @@ # Change Log All notable changes to this project will be documented in this file. +[2020-02-08] Version 4.4.4 +-------------------------- +**Library - Fix** +- [PR #608](https://github.com/sendgrid/sendgrid-java/pull/608): update release jar. Thanks to [@eshanholtz](https://github.com/eshanholtz)! + + [2020-02-05] Version 4.4.3 -------------------------- **Library - Docs** From 603713410dbb259afa5cd2524a79218aa11d50b0 Mon Sep 17 00:00:00 2001 From: Twilio Date: Sat, 8 Feb 2020 00:18:05 +0000 Subject: [PATCH 163/345] Release 4.4.4 --- CONTRIBUTING.md | 2 +- README.md | 4 ++-- pom.xml | 6 +++--- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 5687d511..1bb95451 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -101,7 +101,7 @@ touch Example.java Add the example you want to test to Example.java, including the headers at the top of the file. ``` bash -javac -classpath ../repo/com/sendgrid/4.4.3/sendgrid-4.4.3-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.4.3/sendgrid-4.4.3-jar.jar:. Example +javac -classpath ../repo/com/sendgrid/4.4.4/sendgrid-4.4.4-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.4.4/sendgrid-4.4.4-jar.jar:. Example ``` diff --git a/README.md b/README.md index de73ea22..38061f66 100644 --- a/README.md +++ b/README.md @@ -67,7 +67,7 @@ Add the following to your build.gradle file in the root of your project. ... dependencies { ... - implementation 'com.sendgrid:sendgrid-java:4.4.3' + implementation 'com.sendgrid:sendgrid-java:4.4.4' } repositories { @@ -86,7 +86,7 @@ mvn install You can just drop the jar file in. It's a fat jar - it has all the dependencies built in. -[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/v4.4.3/sendgrid-java.jar) +[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/v4.4.4/sendgrid-java.jar) ## Dependencies diff --git a/pom.xml b/pom.xml index be2ca895..0b3b0990 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ com.sendgrid sendgrid-java Twilio SendGrid Java helper library - 4.4.3 + 4.4.4 This Java module allows you to quickly and easily send emails through Twilio SendGrid using Java. https://github.com/sendgrid/sendgrid-java @@ -26,7 +26,7 @@ https://github.com/sendgrid/sendgrid-java scm:git:git@github.com:sendgrid/sendgrid-java.git scm:git:git@github.com:sendgrid/sendgrid-java.git - 4.4.3 + 4.4.4 @@ -304,4 +304,4 @@ test - + \ No newline at end of file From 9659ae34aa028ffc71f6db0529f60e59804f1ad7 Mon Sep 17 00:00:00 2001 From: Sam Harrison Date: Mon, 10 Feb 2020 12:35:03 -0600 Subject: [PATCH 164/345] fix: limit HTTP client version range to minor updates --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 0b3b0990..771fa249 100644 --- a/pom.xml +++ b/pom.xml @@ -274,7 +274,7 @@ com.sendgrid java-http-client - [4.2,) + [4.2,5.0) com.fasterxml.jackson.core @@ -304,4 +304,4 @@ test - \ No newline at end of file + From 07425677749ed9cc18df7d5c656b036c13449042 Mon Sep 17 00:00:00 2001 From: Rohan Talip Date: Fri, 14 Feb 2020 06:19:51 -0800 Subject: [PATCH 165/345] docs: Update the link for Google's Style Guide (#540) ... from the out-of-date http://checkstyle.sourceforge.net/reports/google-java-style.html (last updated 2014-03-21) ... to https://google.github.io/styleguide/javaguide.html (last updated 2018-05-22) See also https://github.com/google/styleguide/blob/gh-pages/javaguide.html --- CONTRIBUTING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 1bb95451..d5ad65b0 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -155,7 +155,7 @@ Generally, we follow the style guidelines as suggested by the official language. Please run your code through: - [FindBugs](http://findbugs.sourceforge.net/) -- [CheckStyle](http://checkstyle.sourceforge.net/) with [Google's Java Style Guide](http://checkstyle.sourceforge.net/reports/google-java-style.html). +- [CheckStyle](http://checkstyle.sourceforge.net/) with [Google's Java Style Guide](https://google.github.io/styleguide/javaguide.html). ## Creating a Pull Request From 041f7b1ae617fc750937e728871ac4103f2a4249 Mon Sep 17 00:00:00 2001 From: Twilio Date: Wed, 19 Feb 2020 23:47:56 +0000 Subject: [PATCH 166/345] [Librarian] Version Bump --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index aecc8312..51d5926e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,12 @@ # Change Log All notable changes to this project will be documented in this file. +[2020-02-19] Version 4.4.5 +-------------------------- +**Library - Docs** +- [PR #540](https://github.com/sendgrid/sendgrid-java/pull/540): Update the link for Google's Style Guide. Thanks to [@RohanTalip](https://github.com/RohanTalip)! + + [2020-02-08] Version 4.4.4 -------------------------- **Library - Fix** From 5b10cf9ca91d7b28cdbcdfabd18e608e44b71772 Mon Sep 17 00:00:00 2001 From: Twilio Date: Thu, 20 Feb 2020 00:02:02 +0000 Subject: [PATCH 167/345] Release 4.4.5 --- CONTRIBUTING.md | 2 +- README.md | 4 ++-- pom.xml | 6 +++--- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index d5ad65b0..bf38a9d1 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -101,7 +101,7 @@ touch Example.java Add the example you want to test to Example.java, including the headers at the top of the file. ``` bash -javac -classpath ../repo/com/sendgrid/4.4.4/sendgrid-4.4.4-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.4.4/sendgrid-4.4.4-jar.jar:. Example +javac -classpath ../repo/com/sendgrid/4.4.5/sendgrid-4.4.5-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.4.5/sendgrid-4.4.5-jar.jar:. Example ``` diff --git a/README.md b/README.md index 38061f66..8ccf389a 100644 --- a/README.md +++ b/README.md @@ -67,7 +67,7 @@ Add the following to your build.gradle file in the root of your project. ... dependencies { ... - implementation 'com.sendgrid:sendgrid-java:4.4.4' + implementation 'com.sendgrid:sendgrid-java:4.4.5' } repositories { @@ -86,7 +86,7 @@ mvn install You can just drop the jar file in. It's a fat jar - it has all the dependencies built in. -[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/v4.4.4/sendgrid-java.jar) +[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/v4.4.5/sendgrid-java.jar) ## Dependencies diff --git a/pom.xml b/pom.xml index 771fa249..84dd9b68 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ com.sendgrid sendgrid-java Twilio SendGrid Java helper library - 4.4.4 + 4.4.5 This Java module allows you to quickly and easily send emails through Twilio SendGrid using Java. https://github.com/sendgrid/sendgrid-java @@ -26,7 +26,7 @@ https://github.com/sendgrid/sendgrid-java scm:git:git@github.com:sendgrid/sendgrid-java.git scm:git:git@github.com:sendgrid/sendgrid-java.git - 4.4.4 + 4.4.5 @@ -304,4 +304,4 @@ test - + \ No newline at end of file From e2e146b60d36b1c6ced57436efdd389472a63b7d Mon Sep 17 00:00:00 2001 From: Rohan Talip Date: Wed, 31 Oct 2018 10:13:21 -0700 Subject: [PATCH 168/345] Tidied up a little. - (Mostly) automatically reformatted code using IntelliJ IDEA to match the Google Style Guide (as documented in CONTRIBUTING.md). - 2 space indent, where it wasn't already. - Line wrap at 100 characters, where it wasn't already. - Wildcard imports were replaced with explicit imports. - Unused imports were removed. - Annotations were put onto their own line, and additional lines added for readability where necessary. - Braces were added to if-statements that didn't already have them. - Also made some minor edits, e.g. as suggested by IntelliJ IDEA (e.g. public --> private). This will help with getting the code into shape before style conformance is required as per issue #472 and pull request #496. See also: - https://github.com/google/google-java-format - https://plugins.jetbrains.com/plugin/8527-google-java-format - https://github.com/google/styleguide/blob/gh-pages/intellij-java-google-style.xml --- src/main/java/com/sendgrid/APICallback.java | 27 +- .../java/com/sendgrid/RateLimitException.java | 58 ++-- src/main/java/com/sendgrid/SendGrid.java | 55 ++-- src/main/java/com/sendgrid/SendGridAPI.java | 22 +- .../java/com/sendgrid/helpers/mail/Mail.java | 270 +++++++++++------- .../sendgrid/helpers/mail/objects/ASM.java | 32 ++- .../helpers/mail/objects/Attachments.java | 133 +++++---- .../helpers/mail/objects/BccSettings.java | 31 +- .../mail/objects/ClickTrackingSetting.java | 37 ++- .../helpers/mail/objects/Content.java | 41 +-- .../sendgrid/helpers/mail/objects/Email.java | 29 +- .../helpers/mail/objects/FooterSetting.java | 47 +-- .../mail/objects/GoogleAnalyticsSetting.java | 86 ++++-- .../helpers/mail/objects/MailSettings.java | 93 +++--- .../mail/objects/OpenTrackingSetting.java | 43 +-- .../helpers/mail/objects/Personalization.java | 141 +++++---- .../helpers/mail/objects/Setting.java | 16 +- .../mail/objects/SpamCheckSetting.java | 46 +-- .../objects/SubscriptionTrackingSetting.java | 70 +++-- .../mail/objects/TrackingSettings.java | 75 +++-- src/test/java/com/sendgrid/LicenseTest.java | 31 +- src/test/java/com/sendgrid/SendGridTest.java | 133 +++++---- .../com/sendgrid/TestRequiredFilesExist.java | 184 ++++++------ 23 files changed, 1040 insertions(+), 660 deletions(-) diff --git a/src/main/java/com/sendgrid/APICallback.java b/src/main/java/com/sendgrid/APICallback.java index 8504f41c..101052d6 100644 --- a/src/main/java/com/sendgrid/APICallback.java +++ b/src/main/java/com/sendgrid/APICallback.java @@ -1,19 +1,22 @@ package com.sendgrid; /** - * An interface describing a callback mechanism for the - * asynchronous, rate limit aware API connection. + * An interface describing a callback mechanism for the asynchronous, rate limit aware API + * connection. */ public interface APICallback { - /** - * Callback method in case of an error. - * @param ex the error that was thrown. - */ - void error(Exception ex); - /** - * Callback method in case of a valid response. - * @param response the valid response. - */ - void response(Response response); + /** + * Callback method in case of an error. + * + * @param ex the error that was thrown. + */ + void error(Exception ex); + + /** + * Callback method in case of a valid response. + * + * @param response the valid response. + */ + void response(Response response); } diff --git a/src/main/java/com/sendgrid/RateLimitException.java b/src/main/java/com/sendgrid/RateLimitException.java index 4912ac92..7a2570ac 100644 --- a/src/main/java/com/sendgrid/RateLimitException.java +++ b/src/main/java/com/sendgrid/RateLimitException.java @@ -1,36 +1,40 @@ package com.sendgrid; /** - * An exception thrown when the maximum number of retries - * have occurred, and the API calls are still rate limited. + * An exception thrown when the maximum number of retries have occurred, and the API calls are still + * rate limited. */ public class RateLimitException extends Exception { - private final Request request; - private final int retryCount; - /** - * Construct a new exception. - * @param request the originating request object. - * @param retryCount the number of times a retry was attempted. - */ - public RateLimitException(Request request, int retryCount) { - this.request = request; - this.retryCount = retryCount; - } + private final Request request; + private final int retryCount; - /** - * Get the originating request object. - * @return the request object. - */ - public Request getRequest() { - return this.request; - } + /** + * Construct a new exception. + * + * @param request the originating request object. + * @param retryCount the number of times a retry was attempted. + */ + public RateLimitException(Request request, int retryCount) { + this.request = request; + this.retryCount = retryCount; + } - /** - * Get the number of times the action was attemted. - * @return the retry count. - */ - public int getRetryCount() { - return this.retryCount; - } + /** + * Get the originating request object. + * + * @return the request object. + */ + public Request getRequest() { + return this.request; + } + + /** + * Get the number of times the action was attemted. + * + * @return the retry count. + */ + public int getRetryCount() { + return this.retryCount; + } } diff --git a/src/main/java/com/sendgrid/SendGrid.java b/src/main/java/com/sendgrid/SendGrid.java index 3c27b313..b248e7af 100644 --- a/src/main/java/com/sendgrid/SendGrid.java +++ b/src/main/java/com/sendgrid/SendGrid.java @@ -3,12 +3,12 @@ import java.io.IOException; import java.util.HashMap; import java.util.Map; -import java.util.concurrent.Executors; import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; /** - * Class Twilio SendGrid allows for quick and easy access to the Twilio SendGrid API. - */ + * The Twilio SendGrid class allows for quick and easy access to the Twilio SendGrid API. + */ public class SendGrid implements SendGridAPI { private static final String VERSION = "3.0.0"; @@ -43,6 +43,7 @@ public class SendGrid implements SendGridAPI { /** * Construct a new Twilio SendGrid API wrapper. + * * @param apiKey is your Twilio SendGrid API Key: https://app.sendgrid.com/settings/api_keys */ public SendGrid(String apiKey) { @@ -52,6 +53,7 @@ public SendGrid(String apiKey) { /** * Construct a new Twilio SendGrid API wrapper. + * * @param apiKey is your Twilio SendGrid API Key: https://app.sendgrid.com/settings/api_keys * @param test is true if you are unit testing */ @@ -62,6 +64,7 @@ public SendGrid(String apiKey, Boolean test) { /** * Construct a new Twilio SendGrid API wrapper. + * * @param apiKey is your Twilio SendGrid API Key: https://app.sendgrid.com/settings/api_keys * @param client the Client to use (allows to customize its configuration) */ @@ -72,6 +75,7 @@ public SendGrid(String apiKey, Client client) { /** * Initialize the client. + * * @param apiKey the user's API key. */ public void initializeSendGrid(String apiKey) { @@ -89,14 +93,16 @@ public void initializeSendGrid(String apiKey) { /** * Retrieve the current library version. + * * @return the current version. */ public String getLibraryVersion() { - return this.VERSION; + return VERSION; } /** * Get the API version. + * * @return the current API versioin (v3 by default). */ public String getVersion() { @@ -105,6 +111,7 @@ public String getVersion() { /** * Set the API version. + * * @param version the new version. */ public void setVersion(String version) { @@ -113,6 +120,7 @@ public void setVersion(String version) { /** * Obtain the request headers. + * * @return the request headers. */ public Map getRequestHeaders() { @@ -121,6 +129,7 @@ public Map getRequestHeaders() { /** * Add a new request header. + * * @param key the header key. * @param value the header value. * @return the new set of request headers. @@ -132,6 +141,7 @@ public Map addRequestHeader(String key, String value) { /** * Remove a request header. + * * @param key the header key to remove. * @return the new set of request headers. */ @@ -142,6 +152,7 @@ public Map removeRequestHeader(String key) { /** * Get the Twilio SendGrid host (api.sendgrid.com by default). + * * @return the Twilio SendGrid host. */ public String getHost() { @@ -150,6 +161,7 @@ public String getHost() { /** * Set the Twilio SendGrid host. + * * @param host the new Twilio SendGrid host. */ public void setHost(String host) { @@ -157,8 +169,8 @@ public void setHost(String host) { } /** - * Get the maximum number of retries on a rate limit response. - * The default is 5. + * Get the maximum number of retries on a rate limit response. The default is 5. + * * @return the number of retries on a rate limit. */ public int getRateLimitRetry() { @@ -167,6 +179,7 @@ public int getRateLimitRetry() { /** * Set the maximum number of retries on a rate limit response. + * * @param rateLimitRetry the maximum retry count. */ public void setRateLimitRetry(int rateLimitRetry) { @@ -174,9 +187,9 @@ public void setRateLimitRetry(int rateLimitRetry) { } /** - * Get the duration of time (in milliseconds) to sleep between - * consecutive rate limit retries. The Twilio SendGrid API enforces - * the rate limit to the second. The default value is 1.1 seconds. + * Get the duration of time (in milliseconds) to sleep between consecutive rate limit retries. The + * Twilio SendGrid API enforces the rate limit to the second. The default value is 1.1 seconds. + * * @return the sleep duration. */ public int getRateLimitSleep() { @@ -184,8 +197,8 @@ public int getRateLimitSleep() { } /** - * Set the duration of time (in milliseconds) to sleep between - * consecutive rate limit retries. + * Set the duration of time (in milliseconds) to sleep between consecutive rate limit retries. + * * @param rateLimitSleep the sleep duration. */ public void setRateLimitSleep(int rateLimitSleep) { @@ -194,6 +207,7 @@ public void setRateLimitSleep(int rateLimitSleep) { /** * Impersonate subuser for subsequent requests + * * @param subuser the subuser to be impersonated */ public void addImpersonateSubuser(String subuser) { @@ -211,14 +225,16 @@ public void removeImpersonateSubuser() { /** * Get the impersonated subuser or null if empty + * * @return the impersonated subuser */ public String getImpersonateSubuser() { - return this.subuser; + return this.subuser; } /** * Makes the call to the Twilio SendGrid API, override this method for testing. + * * @param request the request to make. * @return the response object. * @throws IOException in case of a network error. @@ -229,6 +245,7 @@ public Response makeCall(Request request) throws IOException { /** * Class api sets up the request to the Twilio SendGrid API, this is main interface. + * * @param request the request object. * @return the response object. * @throws IOException in case of a network error. @@ -250,9 +267,9 @@ public Response api(Request request) throws IOException { } /** - * Attempt an API call. This method executes the API call asynchronously - * on an internal thread pool. If the call is rate limited, the thread - * will retry up to the maximum configured time. + * Attempt an API call. This method executes the API call asynchronously on an internal thread + * pool. If the call is rate limited, the thread will retry up to the maximum configured time. + * * @param request the API request. */ public void attempt(Request request) { @@ -267,10 +284,10 @@ public void response(Response r) { } /** - * Attempt an API call. This method executes the API call asynchronously - * on an internal thread pool. If the call is rate limited, the thread - * will retry up to the maximum configured time. The supplied callback - * will be called in the event of an error, or a successful response. + * Attempt an API call. This method executes the API call asynchronously on an internal thread + * pool. If the call is rate limited, the thread will retry up to the maximum configured time. The + * supplied callback will be called in the event of an error, or a successful response. + * * @param request the API request. * @param callback the callback. */ diff --git a/src/main/java/com/sendgrid/SendGridAPI.java b/src/main/java/com/sendgrid/SendGridAPI.java index aa9583a2..5110e8ca 100644 --- a/src/main/java/com/sendgrid/SendGridAPI.java +++ b/src/main/java/com/sendgrid/SendGridAPI.java @@ -7,14 +7,14 @@ public interface SendGridAPI { /** * Initializes Twilio SendGrid - * + * * @param apiKey is your Twilio SendGrid API Key: https://app.sendgrid.com/settings/api_keys */ void initializeSendGrid(String apiKey); /** * Returns the library version - * + * * @return the library version. */ String getLibraryVersion(); @@ -28,20 +28,21 @@ public interface SendGridAPI { /** * Sets the version. - * + * * @param version the Twilio SendGrid version. */ void setVersion(String version); /** * Gets the request headers. + * * @return returns a map of request headers. */ Map getRequestHeaders(); /** * Adds a request headers. - * + * * @param key the key * @param value the value * @return returns a map of request headers. @@ -50,7 +51,7 @@ public interface SendGridAPI { /** * Removes a request headers. - * + * * @param key the key * @return returns a map of request headers. */ @@ -58,22 +59,21 @@ public interface SendGridAPI { /** * Gets the host. - * + * * @return returns the host. */ String getHost(); /** * Sets the host. - * + * * @param host the host to set */ void setHost(String host); /** - * Class makeCall makes the call to the Twilio SendGrid API, override this method for - * testing. - * + * Class makeCall makes the call to the Twilio SendGrid API, override this method for testing. + * * @param request the request * @return returns a response. * @throws IOException in case of network or marshal error. @@ -82,7 +82,7 @@ public interface SendGridAPI { /** * Class api sets up the request to the Twilio SendGrid API, this is main interface. - * + * * @param request the request * @return returns a response. * @throws IOException in case of network or marshal error. diff --git a/src/main/java/com/sendgrid/helpers/mail/Mail.java b/src/main/java/com/sendgrid/helpers/mail/Mail.java index 29dd2325..24eb19de 100644 --- a/src/main/java/com/sendgrid/helpers/mail/Mail.java +++ b/src/main/java/com/sendgrid/helpers/mail/Mail.java @@ -5,8 +5,13 @@ import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; -import com.sendgrid.helpers.mail.objects.*; - +import com.sendgrid.helpers.mail.objects.ASM; +import com.sendgrid.helpers.mail.objects.Attachments; +import com.sendgrid.helpers.mail.objects.Content; +import com.sendgrid.helpers.mail.objects.Email; +import com.sendgrid.helpers.mail.objects.MailSettings; +import com.sendgrid.helpers.mail.objects.Personalization; +import com.sendgrid.helpers.mail.objects.TrackingSettings; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; @@ -14,95 +19,106 @@ import java.util.Map; /** - * Class Mail builds an object that sends an email through Twilio SendGrid. - * Note that this object is not thread safe. + * Class Mail builds an object that sends an email through Twilio SendGrid. Note that this object is + * not thread safe. */ @JsonInclude(Include.NON_DEFAULT) public class Mail { /** The email's from field. */ - @JsonProperty("from") public Email from; + @JsonProperty("from") + public Email from; - /** The email's subject line. This is the global, or - * “message level”, subject of your email. This may - * be overridden by personalizations[x].subject. + /** + * The email's subject line. This is the global, or “message level”, subject of your email. This + * may be overridden by personalizations[x].subject. */ - @JsonProperty("subject") public String subject; + @JsonProperty("subject") + public String subject; - /** - * The email's personalization. Each object within - * personalizations can be thought of as an envelope - * - it defines who should receive an individual message - * and how that message should be handled. + /** + * The email's personalization. Each object within personalizations can be thought of as an + * envelope - it defines who should receive an individual message and how that message should be + * handled. */ - @JsonProperty("personalizations") public List personalization; + @JsonProperty("personalizations") + public List personalization; /** The email's content. */ - @JsonProperty("content") public List content; + @JsonProperty("content") + public List content; /** The email's attachments. */ - @JsonProperty("attachments") public List attachments; + @JsonProperty("attachments") + public List attachments; /** The email's template ID. */ - @JsonProperty("template_id") public String templateId; + @JsonProperty("template_id") + public String templateId; - /** - * The email's sections. An object of key/value pairs that - * define block sections of code to be used as substitutions. + /** + * The email's sections. An object of key/value pairs that define block sections of code to be + * used as substitutions. */ - @JsonProperty("sections") public Map sections; + @JsonProperty("sections") + public Map sections; /** The email's headers. */ - @JsonProperty("headers") public Map headers; + @JsonProperty("headers") + public Map headers; /** The email's categories. */ - @JsonProperty("categories") public List categories; - - /** - * The email's custom arguments. Values that are specific to - * the entire send that will be carried along with the email - * and its activity data. Substitutions will not be made on - * custom arguments, so any string that is entered into this - * parameter will be assumed to be the custom argument that - * you would like to be used. This parameter is overridden by - * personalizations[x].custom_args if that parameter has been - * defined. Total custom args size may not exceed 10,000 bytes. - */ - @JsonProperty("custom_args") public Map customArgs; - - /** - * A unix timestamp allowing you to specify when you want - * your email to be delivered. This may be overridden by - * the personalizations[x].send_at parameter. Scheduling - * more than 72 hours in advance is forbidden. - */ - @JsonProperty("send_at") public long sendAt; - - /** - * This ID represents a batch of emails to be sent at the - * same time. Including a batch_id in your request allows - * you include this email in that batch, and also enables - * you to cancel or pause the delivery of that batch. For - * more information, see https://sendgrid.com/docs/API_Reference/Web_API_v3/cancel_schedule_send. - */ - @JsonProperty("batch_id") public String batchId; + @JsonProperty("categories") + public List categories; + + /** + * The email's custom arguments. Values that are specific to the entire send that will be carried + * along with the email and its activity data. Substitutions will not be made on custom arguments, + * so any string that is entered into this parameter will be assumed to be the custom argument + * that you would like to be used. This parameter is overridden by personalizations[x].custom_args + * if that parameter has been defined. Total custom args size may not exceed 10,000 bytes. + */ + @JsonProperty("custom_args") + public Map customArgs; + + /** + * A unix timestamp allowing you to specify when you want your email to be delivered. This may be + * overridden by the personalizations[x].send_at parameter. Scheduling more than 72 hours in + * advance is forbidden. + */ + @JsonProperty("send_at") + public long sendAt; + + /** + * This ID represents a batch of emails to be sent at the same time. Including a batch_id in your + * request allows you include this email in that batch, and also enables you to cancel or pause + * the delivery of that batch. For more information, see https://sendgrid.com/docs/API_Reference/Web_API_v3/cancel_schedule_send. + */ + @JsonProperty("batch_id") + public String batchId; /** The email's unsubscribe handling object. */ - @JsonProperty("asm") public ASM asm; + @JsonProperty("asm") + public ASM asm; /** The email's IP pool name. */ - @JsonProperty("ip_pool_name") public String ipPoolId; + @JsonProperty("ip_pool_name") + public String ipPoolId; /** The email's mail settings. */ - @JsonProperty("mail_settings") public MailSettings mailSettings; + @JsonProperty("mail_settings") + public MailSettings mailSettings; /** The email's tracking settings. */ - @JsonProperty("tracking_settings") public TrackingSettings trackingSettings; + @JsonProperty("tracking_settings") + public TrackingSettings trackingSettings; /** The email's reply to address. */ - @JsonProperty("reply_to") public Email replyTo; + @JsonProperty("reply_to") + public Email replyTo; private static final ObjectMapper SORTED_MAPPER = new ObjectMapper(); + static { SORTED_MAPPER.configure(SerializationFeature.ORDER_MAP_ENTRIES_BY_KEYS, true); } @@ -118,17 +134,17 @@ private List addToList(T element, List defaultList) { } } - private Map addToMap(K key, V value, Map defaultMap) { + private Map addToMap(K key, V value, Map defaultMap) { if (defaultMap != null) { defaultMap.put(key, value); return defaultMap; } else { - Map map = new HashMap(); + Map map = new HashMap(); map.put(key, value); return map; } } - + /** Construct a new Mail object. */ public Mail() { return; @@ -136,13 +152,13 @@ public Mail() { /** * Construct a new Mail object. + * * @param from the email's from address. * @param subject the email's subject line. * @param to the email's recipient. * @param content the email's content. */ - public Mail(Email from, String subject, Email to, Content content) - { + public Mail(Email from, String subject, Email to, Content content) { this.setFrom(from); this.setSubject(subject); Personalization personalization = new Personalization(); @@ -153,6 +169,7 @@ public Mail(Email from, String subject, Email to, Content content) /** * Get the email's from address. + * * @return the email's from address. */ @JsonProperty("from") @@ -162,6 +179,7 @@ public Email getFrom() { /** * Set the email's from address. + * * @param from the email's from address. */ public void setFrom(Email from) { @@ -170,6 +188,7 @@ public void setFrom(Email from) { /** * Get the email's subject line. + * * @return the email's subject line. */ @JsonProperty("subject") @@ -179,6 +198,7 @@ public String getSubject() { /** * Set the email's subject line. + * * @param subject the email's subject line. */ public void setSubject(String subject) { @@ -187,6 +207,7 @@ public void setSubject(String subject) { /** * Get the email's unsubscribe handling object (ASM). + * * @return the email's ASM. */ @JsonProperty("asm") @@ -196,6 +217,7 @@ public ASM getASM() { /** * Set the email's unsubscribe handling object (ASM). + * * @param asm the email's ASM. */ public void setASM(ASM asm) { @@ -203,8 +225,9 @@ public void setASM(ASM asm) { } /** - * Get the email's personalizations. Content added to the returned - * list will be included when sent. + * Get the email's personalizations. Content added to the returned list will be included when + * sent. + * * @return the email's personalizations. */ @JsonProperty("personalizations") @@ -214,6 +237,7 @@ public List getPersonalization() { /** * Add a personalizaton to the email. + * * @param personalization a personalization. */ public void addPersonalization(Personalization personalization) { @@ -221,8 +245,8 @@ public void addPersonalization(Personalization personalization) { } /** - * Get the email's content. Content added to the returned list - * will be included when sent. + * Get the email's content. Content added to the returned list will be included when sent. + * * @return the email's content. */ @JsonProperty("content") @@ -232,6 +256,7 @@ public List getContent() { /** * Add content to this email. + * * @param content content to add to this email. */ public void addContent(Content content) { @@ -242,8 +267,9 @@ public void addContent(Content content) { } /** - * Get the email's attachments. Attachments added to the returned - * list will be included when sent. + * Get the email's attachments. Attachments added to the returned list will be included when + * sent. + * * @return the email's attachments. */ @JsonProperty("attachments") @@ -253,6 +279,7 @@ public List getAttachments() { /** * Add attachments to the email. + * * @param attachments attachments to add. */ public void addAttachments(Attachments attachments) { @@ -267,6 +294,7 @@ public void addAttachments(Attachments attachments) { /** * Get the email's template ID. + * * @return the email's template ID. */ @JsonProperty("template_id") @@ -276,6 +304,7 @@ public String getTemplateId() { /** * Set the email's template ID. + * * @param templateId the email's template ID. */ public void setTemplateId(String templateId) { @@ -283,17 +312,18 @@ public void setTemplateId(String templateId) { } /** - * Get the email's sections. Sections added to the returned list - * will be included when sent. + * Get the email's sections. Sections added to the returned list will be included when sent. + * * @return the email's sections. */ @JsonProperty("sections") - public Map getSections() { + public Map getSections() { return sections; } /** * Add a section to the email. + * * @param key the section's key. * @param value the section's value. */ @@ -302,17 +332,18 @@ public void addSection(String key, String value) { } /** - * Get the email's headers. Headers added to the returned list - * will be included when sent. + * Get the email's headers. Headers added to the returned list will be included when sent. + * * @return the email's headers. */ @JsonProperty("headers") - public Map getHeaders() { + public Map getHeaders() { return headers; } /** * Add a header to the email. + * * @param key the header's key. * @param value the header's value. */ @@ -321,8 +352,8 @@ public void addHeader(String key, String value) { } /** - * Get the email's categories. Categories added to the returned list - * will be included when sent. + * Get the email's categories. Categories added to the returned list will be included when sent. + * * @return the email's categories. */ @JsonProperty("categories") @@ -332,6 +363,7 @@ public List getCategories() { /** * Add a category to the email. + * * @param category the category. */ public void addCategory(String category) { @@ -339,17 +371,19 @@ public void addCategory(String category) { } /** - * Get the email's custom arguments. Custom arguments added to the returned list - * will be included when sent. + * Get the email's custom arguments. Custom arguments added to the returned list will be included + * when sent. + * * @return the email's custom arguments. */ @JsonProperty("custom_args") - public Map getCustomArgs() { + public Map getCustomArgs() { return customArgs; } /** * Add a custom argument to the email. + * * @param key argument's key. * @param value the argument's value. */ @@ -359,6 +393,7 @@ public void addCustomArg(String key, String value) { /** * Get the email's send at time (Unix timestamp). + * * @return the email's send at time. */ @JsonProperty("send_at") @@ -368,6 +403,7 @@ public long sendAt() { /** * Set the email's send at time (Unix timestamp). + * * @param sendAt the send at time. */ public void setSendAt(long sendAt) { @@ -376,6 +412,7 @@ public void setSendAt(long sendAt) { /** * Get the email's batch ID. + * * @return the batch ID. */ @JsonProperty("batch_id") @@ -385,6 +422,7 @@ public String getBatchId() { /** * Set the email's batch ID. + * * @param batchId the batch ID. */ public void setBatchId(String batchId) { @@ -393,6 +431,7 @@ public void setBatchId(String batchId) { /** * Get the email's IP pool ID. + * * @return the IP pool ID. */ @JsonProperty("ip_pool_name") @@ -402,6 +441,7 @@ public String getIpPoolId() { /** * Set the email's IP pool ID. + * * @param ipPoolId the IP pool ID. */ public void setIpPoolId(String ipPoolId) { @@ -410,6 +450,7 @@ public void setIpPoolId(String ipPoolId) { /** * Get the email's settings. + * * @return the settings. */ @JsonProperty("mail_settings") @@ -419,6 +460,7 @@ public MailSettings getMailSettings() { /** * Set the email's settings. + * * @param mailSettings the settings. */ public void setMailSettings(MailSettings mailSettings) { @@ -427,6 +469,7 @@ public void setMailSettings(MailSettings mailSettings) { /** * Get the email's tracking settings. + * * @return the tracking settings. */ @JsonProperty("tracking_settings") @@ -436,6 +479,7 @@ public TrackingSettings getTrackingSettings() { /** * Set the email's tracking settings. + * * @param trackingSettings the tracking settings. */ public void setTrackingSettings(TrackingSettings trackingSettings) { @@ -444,6 +488,7 @@ public void setTrackingSettings(TrackingSettings trackingSettings) { /** * Get the email's reply to address. + * * @return the reply to address. */ @JsonProperty("reply_to") @@ -453,6 +498,7 @@ public Email getReplyto() { /** * Set the email's reply to address. + * * @param replyTo the reply to address. */ public void setReplyTo(Email replyTo) { @@ -461,6 +507,7 @@ public void setReplyTo(Email replyTo) { /** * Create a string represenation of the Mail object JSON. + * * @return a JSON string. * @throws IOException in case of a JSON marshal error. */ @@ -475,6 +522,7 @@ public String build() throws IOException { /** * Create a string represenation of the Mail object JSON and pretty print it. + * * @return a pretty JSON string. * @throws IOException in case of a JSON marshal error. */ @@ -505,55 +553,75 @@ public int hashCode() { @Override public boolean equals(Object obj) { - if (this == obj) + if (this == obj) { return true; - if (obj == null) + } + if (obj == null) { return false; - if (getClass() != obj.getClass()) + } + if (getClass() != obj.getClass()) { return false; + } Mail other = (Mail) obj; if (batchId == null) { - if (other.batchId != null) + if (other.batchId != null) { return false; - } else if (!batchId.equals(other.batchId)) + } + } else if (!batchId.equals(other.batchId)) { return false; + } if (categories == null) { - if (other.categories != null) + if (other.categories != null) { return false; - } else if (!categories.equals(other.categories)) + } + } else if (!categories.equals(other.categories)) { return false; + } if (customArgs == null) { - if (other.customArgs != null) + if (other.customArgs != null) { return false; - } else if (!customArgs.equals(other.customArgs)) + } + } else if (!customArgs.equals(other.customArgs)) { return false; + } if (headers == null) { - if (other.headers != null) + if (other.headers != null) { return false; - } else if (!headers.equals(other.headers)) + } + } else if (!headers.equals(other.headers)) { return false; + } if (ipPoolId == null) { - if (other.ipPoolId != null) + if (other.ipPoolId != null) { return false; - } else if (!ipPoolId.equals(other.ipPoolId)) + } + } else if (!ipPoolId.equals(other.ipPoolId)) { return false; + } if (sections == null) { - if (other.sections != null) + if (other.sections != null) { return false; - } else if (!sections.equals(other.sections)) + } + } else if (!sections.equals(other.sections)) { return false; - if (sendAt != other.sendAt) + } + if (sendAt != other.sendAt) { return false; + } if (subject == null) { - if (other.subject != null) + if (other.subject != null) { return false; - } else if (!subject.equals(other.subject)) + } + } else if (!subject.equals(other.subject)) { return false; + } if (templateId == null) { - if (other.templateId != null) + if (other.templateId != null) { return false; - } else if (!templateId.equals(other.templateId)) + } + } else if (!templateId.equals(other.templateId)) { return false; + } return true; } -} \ No newline at end of file +} diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/ASM.java b/src/main/java/com/sendgrid/helpers/mail/objects/ASM.java index a34895f2..44ce4228 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/ASM.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/ASM.java @@ -3,28 +3,31 @@ import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonInclude.Include; import com.fasterxml.jackson.annotation.JsonProperty; - import java.util.Arrays; @JsonInclude(Include.NON_DEFAULT) public class ASM { - @JsonProperty("group_id") private int groupId; - @JsonProperty("groups_to_display") private int[] groupsToDisplay; - + + @JsonProperty("group_id") + private int groupId; + + @JsonProperty("groups_to_display") + private int[] groupsToDisplay; + @JsonProperty("group_id") public int getGroupId() { return groupId; } - + public void setGroupId(int groupId) { this.groupId = groupId; } - + @JsonProperty("groups_to_display") public int[] getGroupsToDisplay() { return groupsToDisplay; } - + public void setGroupsToDisplay(int[] groupsToDisplay) { this.groupsToDisplay = Arrays.copyOf(groupsToDisplay, groupsToDisplay.length); } @@ -40,17 +43,22 @@ public int hashCode() { @Override public boolean equals(Object obj) { - if (this == obj) + if (this == obj) { return true; - if (obj == null) + } + if (obj == null) { return false; - if (getClass() != obj.getClass()) + } + if (getClass() != obj.getClass()) { return false; + } ASM other = (ASM) obj; - if (groupId != other.groupId) + if (groupId != other.groupId) { return false; - if (!Arrays.equals(groupsToDisplay, other.groupsToDisplay)) + } + if (!Arrays.equals(groupsToDisplay, other.groupsToDisplay)) { return false; + } return true; } } \ No newline at end of file diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/Attachments.java b/src/main/java/com/sendgrid/helpers/mail/objects/Attachments.java index 969c1630..9a3ff1b4 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/Attachments.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/Attachments.java @@ -4,68 +4,74 @@ import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonInclude.Include; import com.fasterxml.jackson.annotation.JsonProperty; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; import org.apache.commons.codec.binary.Base64; -import java.io.*; - /** * An attachment object. */ @JsonInclude(Include.NON_DEFAULT) public class Attachments { - + /** The attachment content. */ - @JsonProperty("content") private String content; + @JsonProperty("content") + private String content; - /** - * The mime type of the content you are attaching. For example, - * “text/plain” or “text/html”. + /** + * The mime type of the content you are attaching. For example, “text/plain” or “text/html”. */ - @JsonProperty("type") private String type; + @JsonProperty("type") + private String type; /** The attachment file name. */ - @JsonProperty("filename") private String filename; + @JsonProperty("filename") + private String filename; /** The attachment disposition. */ - @JsonProperty("disposition") private String disposition; + @JsonProperty("disposition") + private String disposition; - /** - * The attachment content ID. This is used when the - * disposition is set to “inline” and the attachment - * is an image, allowing the file to be displayed within - * the body of your email. + /** + * The attachment content ID. This is used when the disposition is set to “inline” and the + * attachment is an image, allowing the file to be displayed within the body of your email. */ - @JsonProperty("content_id") private String contentId; + @JsonProperty("content_id") + private String contentId; /** * Get the attachment's content. + * * @return the content. */ - @JsonProperty("content") + @JsonProperty("content") public String getContent() { return content; } /** * Set the attachment's content. + * * @param content the content. */ public void setContent(String content) { this.content = content; } - + /** - * Get the mime type of the content you are attaching. For example, - * “text/plain” or “text/html”. + * Get the mime type of the content you are attaching. For example, “text/plain” or “text/html”. + * * @return the mime type. */ - @JsonProperty("type") + @JsonProperty("type") public String getType() { return type; } - + /** * Set the mime type of the content. + * * @param type the mime type. */ public void setType(String type) { @@ -74,38 +80,39 @@ public void setType(String type) { /** * Get the filename for this attachment. + * * @return the file name. */ - @JsonProperty("filename") + @JsonProperty("filename") public String getFilename() { return filename; } - + /** * Set the filename for this attachment. + * * @param filename the filename. */ public void setFilename(String filename) { this.filename = filename; } - + /** - * Get the content-disposition of the attachment specifying - * how you would like the attachment to be displayed. - * For example, “inline” results in the attached file - * being displayed automatically within the message - * while “attachment” results in the attached file - * requiring some action to be taken before it is - * displayed (e.g. opening or downloading the file). + * Get the content-disposition of the attachment specifying how you would like the attachment to + * be displayed. For example, “inline” results in the attached file being displayed automatically + * within the message while “attachment” results in the attached file requiring some action to be + * taken before it is displayed (e.g. opening or downloading the file). + * * @return the disposition. */ - @JsonProperty("disposition") + @JsonProperty("disposition") public String getDisposition() { return disposition; } - + /** * Set the content-disposition of the attachment. + * * @param disposition the disposition. */ public void setDisposition(String disposition) { @@ -113,19 +120,19 @@ public void setDisposition(String disposition) { } /** - * Get the attachment content ID. This is used when the - * disposition is set to “inline” and the attachment - * is an image, allowing the file to be displayed within - * the body of your email. + * Get the attachment content ID. This is used when the disposition is set to “inline” and the + * attachment is an image, allowing the file to be displayed within the body of your email. + * * @return the content ID. */ - @JsonProperty("content_id") + @JsonProperty("content_id") public String getContentId() { return contentId; } - + /** * Set the content ID. + * * @param contentId the content ID. */ public void setContentId(String contentId) { @@ -148,6 +155,7 @@ public static class Builder { /** * Construct a new attachment builder. + * * @param fileName the filename to include. * @param content an input stream for the content. * @throws IllegalArgumentException in case either the fileName or the content is null. @@ -167,6 +175,7 @@ public Builder(String fileName, InputStream content) { /** * Construct a new attachment builder. + * * @param fileName the filename to include. * @param content an input string for the content. * @throws IllegalArgumentException in case either the fileName or the content is null. @@ -187,7 +196,7 @@ public Builder(String fileName, String content) { private String encodeToBase64(InputStream content) { int read = 0; byte[] bytes = new byte[BYTE_BUFFER_SIZE]; - try(ByteArrayOutputStream baos = new ByteArrayOutputStream()) { + try (ByteArrayOutputStream baos = new ByteArrayOutputStream()) { while ((read = content.read(bytes)) != -1) { baos.write(bytes, 0, read); } @@ -200,6 +209,7 @@ private String encodeToBase64(InputStream content) { /** * Set the type of this attachment builder. + * * @param type the attachment type. */ public Builder withType(String type) { @@ -209,6 +219,7 @@ public Builder withType(String type) { /** * Set the disposition of this attachment builder. + * * @param disposition the disposition. */ public Builder withDisposition(String disposition) { @@ -218,6 +229,7 @@ public Builder withDisposition(String disposition) { /** * Set the content ID of this attachment builder. + * * @param contentId the content ID. */ public Builder withContentId(String contentId) { @@ -253,38 +265,51 @@ public int hashCode() { @Override public boolean equals(Object obj) { - if (this == obj) + if (this == obj) { return true; - if (obj == null) + } + if (obj == null) { return false; - if (getClass() != obj.getClass()) + } + if (getClass() != obj.getClass()) { return false; + } Attachments other = (Attachments) obj; if (content == null) { - if (other.content != null) + if (other.content != null) { return false; - } else if (!content.equals(other.content)) + } + } else if (!content.equals(other.content)) { return false; + } if (contentId == null) { - if (other.contentId != null) + if (other.contentId != null) { return false; - } else if (!contentId.equals(other.contentId)) + } + } else if (!contentId.equals(other.contentId)) { return false; + } if (disposition == null) { - if (other.disposition != null) + if (other.disposition != null) { return false; - } else if (!disposition.equals(other.disposition)) + } + } else if (!disposition.equals(other.disposition)) { return false; + } if (filename == null) { - if (other.filename != null) + if (other.filename != null) { return false; - } else if (!filename.equals(other.filename)) + } + } else if (!filename.equals(other.filename)) { return false; + } if (type == null) { - if (other.type != null) + if (other.type != null) { return false; - } else if (!type.equals(other.type)) + } + } else if (!type.equals(other.type)) { return false; + } return true; } } diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/BccSettings.java b/src/main/java/com/sendgrid/helpers/mail/objects/BccSettings.java index f43803f1..68d7a535 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/BccSettings.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/BccSettings.java @@ -5,14 +5,17 @@ import com.fasterxml.jackson.annotation.JsonProperty; /** - * This object allows you to have a blind carbon copy - * automatically sent to the specified email address - * for every email that is sent. + * This object allows you to have a blind carbon copy automatically sent to the specified email + * address for every email that is sent. */ @JsonInclude(Include.NON_EMPTY) public class BccSettings { - @JsonProperty("enable") private boolean enable; - @JsonProperty("email") private String email; + + @JsonProperty("enable") + private boolean enable; + + @JsonProperty("email") + private String email; @JsonProperty("enable") public boolean getEnable() { @@ -43,20 +46,26 @@ public int hashCode() { @Override public boolean equals(Object obj) { - if (this == obj) + if (this == obj) { return true; - if (obj == null) + } + if (obj == null) { return false; - if (getClass() != obj.getClass()) + } + if (getClass() != obj.getClass()) { return false; + } BccSettings other = (BccSettings) obj; if (email == null) { - if (other.email != null) + if (other.email != null) { return false; - } else if (!email.equals(other.email)) + } + } else if (!email.equals(other.email)) { return false; - if (enable != other.enable) + } + if (enable != other.enable) { return false; + } return true; } } \ No newline at end of file diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/ClickTrackingSetting.java b/src/main/java/com/sendgrid/helpers/mail/objects/ClickTrackingSetting.java index ee12fc07..13ce3f13 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/ClickTrackingSetting.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/ClickTrackingSetting.java @@ -5,28 +5,32 @@ import com.fasterxml.jackson.annotation.JsonProperty; /** - * Settings to determine how you would like to track the - * metrics of how your recipients interact with your email. + * Settings to determine how you would like to track the metrics of how your recipients interact + * with your email. */ @JsonInclude(Include.NON_EMPTY) public class ClickTrackingSetting { - @JsonProperty("enable") private boolean enable; - @JsonProperty("enable_text") private boolean enableText; - + + @JsonProperty("enable") + private boolean enable; + + @JsonProperty("enable_text") + private boolean enableText; + @JsonProperty("enable") public boolean getEnable() { return enable; } - + public void setEnable(boolean enable) { this.enable = enable; } - + @JsonProperty("enable_text") public boolean getEnableText() { return enableText; - } - + } + public void setEnableText(boolean enableText) { this.enableText = enableText; } @@ -42,17 +46,22 @@ public int hashCode() { @Override public boolean equals(Object obj) { - if (this == obj) + if (this == obj) { return true; - if (obj == null) + } + if (obj == null) { return false; - if (getClass() != obj.getClass()) + } + if (getClass() != obj.getClass()) { return false; + } ClickTrackingSetting other = (ClickTrackingSetting) obj; - if (enable != other.enable) + if (enable != other.enable) { return false; - if (enableText != other.enableText) + } + if (enableText != other.enableText) { return false; + } return true; } } \ No newline at end of file diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/Content.java b/src/main/java/com/sendgrid/helpers/mail/objects/Content.java index 0a7a6557..329cf285 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/Content.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/Content.java @@ -3,22 +3,21 @@ import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonInclude.Include; import com.fasterxml.jackson.annotation.JsonProperty; - -import java.util.Arrays; import java.util.Collections; -import java.util.HashSet; import java.util.List; -import java.util.Set; import java.util.regex.Pattern; -import java.lang.IllegalArgumentException; /** - * An object in which you may specify the content of your email. + * An object in which you may specify the content of your email. */ @JsonInclude(Include.NON_DEFAULT) public class Content { - @JsonProperty("type") private String type; - @JsonProperty("value") private String value; + + @JsonProperty("type") + private String type; + + @JsonProperty("value") + private String value; public Content() { return; @@ -59,34 +58,42 @@ public int hashCode() { @Override public boolean equals(Object obj) { - if (this == obj) + if (this == obj) { return true; - if (obj == null) + } + if (obj == null) { return false; - if (getClass() != obj.getClass()) + } + if (getClass() != obj.getClass()) { return false; + } Content other = (Content) obj; if (type == null) { - if (other.type != null) + if (other.type != null) { return false; - } else if (!type.equals(other.type)) + } + } else if (!type.equals(other.type)) { return false; + } if (value == null) { - if (other.value != null) + if (other.value != null) { return false; - } else if (!value.equals(other.value)) + } + } else if (!value.equals(other.value)) { return false; + } return true; } } class ContentVerifier { + private static final List FORBIDDEN_PATTERNS = Collections.singletonList( - Pattern.compile(".*SG\\.[a-zA-Z0-9(-|_)]*\\.[a-zA-Z0-9(-|_)]*.*") + Pattern.compile(".*SG\\.[a-zA-Z0-9(-|_)]*\\.[a-zA-Z0-9(-|_)]*.*") ); static void verifyContent(String content) { - for (Pattern pattern: FORBIDDEN_PATTERNS) { + for (Pattern pattern : FORBIDDEN_PATTERNS) { if (pattern.matcher(content).matches()) { throw new IllegalArgumentException("Found a Forbidden Pattern in the content of the email"); } diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/Email.java b/src/main/java/com/sendgrid/helpers/mail/objects/Email.java index 537b27b6..37e8fbcf 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/Email.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/Email.java @@ -6,8 +6,12 @@ @JsonInclude(Include.NON_DEFAULT) public class Email { - @JsonProperty("name") private String name; - @JsonProperty("email") private String email; + + @JsonProperty("name") + private String name; + + @JsonProperty("email") + private String email; public Email() { return; @@ -51,23 +55,30 @@ public int hashCode() { @Override public boolean equals(Object obj) { - if (this == obj) + if (this == obj) { return true; - if (obj == null) + } + if (obj == null) { return false; - if (getClass() != obj.getClass()) + } + if (getClass() != obj.getClass()) { return false; + } Email other = (Email) obj; if (email == null) { - if (other.email != null) + if (other.email != null) { return false; - } else if (!email.equals(other.email)) + } + } else if (!email.equals(other.email)) { return false; + } if (name == null) { - if (other.name != null) + if (other.name != null) { return false; - } else if (!name.equals(other.name)) + } + } else if (!name.equals(other.name)) { return false; + } return true; } } \ No newline at end of file diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/FooterSetting.java b/src/main/java/com/sendgrid/helpers/mail/objects/FooterSetting.java index 905436ed..6ec12eb2 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/FooterSetting.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/FooterSetting.java @@ -5,15 +5,20 @@ import com.fasterxml.jackson.annotation.JsonProperty; /** - * An object representing the default footer - * that you would like included on every email. + * An object representing the default footer that you would like included on every email. */ @JsonInclude(Include.NON_EMPTY) public class FooterSetting { - @JsonProperty("enable") private boolean enable; - @JsonProperty("text") private String text; - @JsonProperty("html") private String html; - + + @JsonProperty("enable") + private boolean enable; + + @JsonProperty("text") + private String text; + + @JsonProperty("html") + private String html; + @JsonProperty("enable") public boolean getEnable() { return enable; @@ -22,16 +27,16 @@ public boolean getEnable() { public void setEnable(boolean enable) { this.enable = enable; } - + @JsonProperty("text") public String getText() { return text; } - + public void setText(String text) { this.text = text; } - + @JsonProperty("html") public String getHtml() { return html; @@ -53,25 +58,33 @@ public int hashCode() { @Override public boolean equals(Object obj) { - if (this == obj) + if (this == obj) { return true; - if (obj == null) + } + if (obj == null) { return false; - if (getClass() != obj.getClass()) + } + if (getClass() != obj.getClass()) { return false; + } FooterSetting other = (FooterSetting) obj; - if (enable != other.enable) + if (enable != other.enable) { return false; + } if (html == null) { - if (other.html != null) + if (other.html != null) { return false; - } else if (!html.equals(other.html)) + } + } else if (!html.equals(other.html)) { return false; + } if (text == null) { - if (other.text != null) + if (other.text != null) { return false; - } else if (!text.equals(other.text)) + } + } else if (!text.equals(other.text)) { return false; + } return true; } } \ No newline at end of file diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/GoogleAnalyticsSetting.java b/src/main/java/com/sendgrid/helpers/mail/objects/GoogleAnalyticsSetting.java index a01d4df6..e8f12f70 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/GoogleAnalyticsSetting.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/GoogleAnalyticsSetting.java @@ -9,22 +9,34 @@ */ @JsonInclude(Include.NON_EMPTY) public class GoogleAnalyticsSetting { - @JsonProperty("enable") private boolean enable; - @JsonProperty("utm_source") private String campaignSource; - @JsonProperty("utm_term") private String campaignTerm; - @JsonProperty("utm_content") private String campaignContent; - @JsonProperty("utm_campaign") private String campaignName; - @JsonProperty("utm_medium") private String campaignMedium; - + + @JsonProperty("enable") + private boolean enable; + + @JsonProperty("utm_source") + private String campaignSource; + + @JsonProperty("utm_term") + private String campaignTerm; + + @JsonProperty("utm_content") + private String campaignContent; + + @JsonProperty("utm_campaign") + private String campaignName; + + @JsonProperty("utm_medium") + private String campaignMedium; + @JsonProperty("enable") public boolean getEnable() { return enable; } - + public void setEnable(boolean enable) { this.enable = enable; } - + @JsonProperty("utm_source") public String getCampaignSource() { return campaignSource; @@ -33,7 +45,7 @@ public String getCampaignSource() { public void setCampaignSource(String campaignSource) { this.campaignSource = campaignSource; } - + @JsonProperty("utm_term") public String getCampaignTerm() { return campaignTerm; @@ -42,30 +54,30 @@ public String getCampaignTerm() { public void setCampaignTerm(String campaignTerm) { this.campaignTerm = campaignTerm; } - + @JsonProperty("utm_content") public String getCampaignContent() { return campaignContent; } - + public void setCampaignContent(String campaignContent) { this.campaignContent = campaignContent; } - + @JsonProperty("utm_campaign") public String getCampaignName() { return campaignName; } - + public void setCampaignName(String campaignName) { this.campaignName = campaignName; } - + @JsonProperty("utm_medium") public String getCampaignMedium() { return campaignMedium; } - + public void setCampaignMedium(String campaignMedium) { this.campaignMedium = campaignMedium; } @@ -85,40 +97,54 @@ public int hashCode() { @Override public boolean equals(Object obj) { - if (this == obj) + if (this == obj) { return true; - if (obj == null) + } + if (obj == null) { return false; - if (getClass() != obj.getClass()) + } + if (getClass() != obj.getClass()) { return false; + } GoogleAnalyticsSetting other = (GoogleAnalyticsSetting) obj; if (campaignContent == null) { - if (other.campaignContent != null) + if (other.campaignContent != null) { return false; - } else if (!campaignContent.equals(other.campaignContent)) + } + } else if (!campaignContent.equals(other.campaignContent)) { return false; + } if (campaignMedium == null) { - if (other.campaignMedium != null) + if (other.campaignMedium != null) { return false; - } else if (!campaignMedium.equals(other.campaignMedium)) + } + } else if (!campaignMedium.equals(other.campaignMedium)) { return false; + } if (campaignName == null) { - if (other.campaignName != null) + if (other.campaignName != null) { return false; - } else if (!campaignName.equals(other.campaignName)) + } + } else if (!campaignName.equals(other.campaignName)) { return false; + } if (campaignSource == null) { - if (other.campaignSource != null) + if (other.campaignSource != null) { return false; - } else if (!campaignSource.equals(other.campaignSource)) + } + } else if (!campaignSource.equals(other.campaignSource)) { return false; + } if (campaignTerm == null) { - if (other.campaignTerm != null) + if (other.campaignTerm != null) { return false; - } else if (!campaignTerm.equals(other.campaignTerm)) + } + } else if (!campaignTerm.equals(other.campaignTerm)) { return false; - if (enable != other.enable) + } + if (enable != other.enable) { return false; + } return true; } } \ No newline at end of file diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/MailSettings.java b/src/main/java/com/sendgrid/helpers/mail/objects/MailSettings.java index 5175642c..bd239880 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/MailSettings.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/MailSettings.java @@ -5,18 +5,27 @@ import com.fasterxml.jackson.annotation.JsonProperty; /** - * An object representing a collection of different mail - * settings that you can use to specify how you would - * like this email to be handled. + * An object representing a collection of different mail settings that you can use to specify how + * you would like this email to be handled. */ @JsonInclude(Include.NON_DEFAULT) public class MailSettings { - @JsonProperty("bcc") private BccSettings bccSettings; - @JsonProperty("bypass_list_management") private Setting bypassListManagement; - @JsonProperty("footer") private FooterSetting footerSetting; - @JsonProperty("sandbox_mode") private Setting sandBoxMode; - @JsonProperty("spam_check") private SpamCheckSetting spamCheckSetting; + + @JsonProperty("bcc") + private BccSettings bccSettings; + + @JsonProperty("bypass_list_management") + private Setting bypassListManagement; + + @JsonProperty("footer") + private FooterSetting footerSetting; + + @JsonProperty("sandbox_mode") + private Setting sandBoxMode; + + @JsonProperty("spam_check") + private SpamCheckSetting spamCheckSetting; @JsonProperty("bcc") public BccSettings getBccSettings() { @@ -25,6 +34,7 @@ public BccSettings getBccSettings() { /** * Set the BCC settings. + * * @param bccSettings the BCC settings. */ public void setBccSettings(BccSettings bccSettings) { @@ -32,11 +42,10 @@ public void setBccSettings(BccSettings bccSettings) { } /** - * A setting that allows you to bypass all unsubscribe - * groups and suppressions to ensure that the email is - * delivered to every single recipient. This should only - * be used in emergencies when it is absolutely necessary - * that every recipient receives your email. + * A setting that allows you to bypass all unsubscribe groups and suppressions to ensure that the + * email is delivered to every single recipient. This should only be used in emergencies when it + * is absolutely necessary that every recipient receives your email. + * * @return the bypass list setting. */ @@ -51,6 +60,7 @@ public void setBypassListManagement(Setting bypassListManagement) { /** * Get the the footer settings that you would like included on every email. + * * @return the setting. */ @@ -61,6 +71,7 @@ public FooterSetting getFooterSetting() { /** * Set the the footer settings that you would like included on every email. + * * @param footerSetting the setting. */ public void setFooterSetting(FooterSetting footerSetting) { @@ -68,8 +79,9 @@ public void setFooterSetting(FooterSetting footerSetting) { } /** - * Get sandbox mode. This allows you to send a test email to - * ensure that your request body is valid and formatted correctly. + * Get sandbox mode. This allows you to send a test email to ensure that your request body is + * valid and formatted correctly. + * * @return the sandbox mode setting. */ @@ -80,6 +92,7 @@ public Setting getSandBoxMode() { /** * Set sandbox mode. + * * @param sandBoxMode the sandbox mode setting. */ @JsonProperty("sandbox_mode") @@ -88,8 +101,8 @@ public void setSandboxMode(Setting sandBoxMode) { } /** - * Get the spam check setting. This allows you to test the - * content of your email for spam. + * Get the spam check setting. This allows you to test the content of your email for spam. + * * @return the spam check setting. */ @@ -99,8 +112,8 @@ public SpamCheckSetting getSpamCheck() { } /** - * Set the spam check setting. This allows you to test the - * content of your email for spam. + * Set the spam check setting. This allows you to test the content of your email for spam. + * * @param spamCheckSetting the spam check setting. */ @@ -113,7 +126,8 @@ public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((bccSettings == null) ? 0 : bccSettings.hashCode()); - result = prime * result + ((bypassListManagement == null) ? 0 : bypassListManagement.hashCode()); + result = + prime * result + ((bypassListManagement == null) ? 0 : bypassListManagement.hashCode()); result = prime * result + ((footerSetting == null) ? 0 : footerSetting.hashCode()); result = prime * result + ((sandBoxMode == null) ? 0 : sandBoxMode.hashCode()); result = prime * result + ((spamCheckSetting == null) ? 0 : spamCheckSetting.hashCode()); @@ -122,38 +136,51 @@ public int hashCode() { @Override public boolean equals(Object obj) { - if (this == obj) + if (this == obj) { return true; - if (obj == null) + } + if (obj == null) { return false; - if (getClass() != obj.getClass()) + } + if (getClass() != obj.getClass()) { return false; + } MailSettings other = (MailSettings) obj; if (bccSettings == null) { - if (other.bccSettings != null) + if (other.bccSettings != null) { return false; - } else if (!bccSettings.equals(other.bccSettings)) + } + } else if (!bccSettings.equals(other.bccSettings)) { return false; + } if (bypassListManagement == null) { - if (other.bypassListManagement != null) + if (other.bypassListManagement != null) { return false; - } else if (!bypassListManagement.equals(other.bypassListManagement)) + } + } else if (!bypassListManagement.equals(other.bypassListManagement)) { return false; + } if (footerSetting == null) { - if (other.footerSetting != null) + if (other.footerSetting != null) { return false; - } else if (!footerSetting.equals(other.footerSetting)) + } + } else if (!footerSetting.equals(other.footerSetting)) { return false; + } if (sandBoxMode == null) { - if (other.sandBoxMode != null) + if (other.sandBoxMode != null) { return false; - } else if (!sandBoxMode.equals(other.sandBoxMode)) + } + } else if (!sandBoxMode.equals(other.sandBoxMode)) { return false; + } if (spamCheckSetting == null) { - if (other.spamCheckSetting != null) + if (other.spamCheckSetting != null) { return false; - } else if (!spamCheckSetting.equals(other.spamCheckSetting)) + } + } else if (!spamCheckSetting.equals(other.spamCheckSetting)) { return false; + } return true; } } \ No newline at end of file diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/OpenTrackingSetting.java b/src/main/java/com/sendgrid/helpers/mail/objects/OpenTrackingSetting.java index e4497d9c..a44cb8d8 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/OpenTrackingSetting.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/OpenTrackingSetting.java @@ -5,30 +5,33 @@ import com.fasterxml.jackson.annotation.JsonProperty; /** - * An open tracking settings object. This allows you to track - * whether the email was opened or not, but including a single - * pixel image in the body of the content. When the pixel is - * loaded, we can log that the email was opened. + * An open tracking settings object. This allows you to track whether the email was opened or not, + * but including a single pixel image in the body of the content. When the pixel is loaded, we can + * log that the email was opened. */ @JsonInclude(Include.NON_EMPTY) public class OpenTrackingSetting { - @JsonProperty("enable") private boolean enable; - @JsonProperty("substitution_tag") private String substitutionTag; - + + @JsonProperty("enable") + private boolean enable; + + @JsonProperty("substitution_tag") + private String substitutionTag; + @JsonProperty("enable") public boolean getEnable() { return enable; } - + public void setEnable(boolean enable) { this.enable = enable; } - + @JsonProperty("substitution_tag") public String getSubstitutionTag() { return substitutionTag; } - + public void setSubstitutionTag(String substitutionTag) { this.substitutionTag = substitutionTag; } @@ -44,21 +47,27 @@ public int hashCode() { @Override public boolean equals(Object obj) { - if (this == obj) + if (this == obj) { return true; - if (obj == null) + } + if (obj == null) { return false; - if (getClass() != obj.getClass()) + } + if (getClass() != obj.getClass()) { return false; + } OpenTrackingSetting other = (OpenTrackingSetting) obj; - if (enable != other.enable) + if (enable != other.enable) { return false; + } if (substitutionTag == null) { - if (other.substitutionTag != null) + if (other.substitutionTag != null) { return false; - } else if (!substitutionTag.equals(other.substitutionTag)) + } + } else if (!substitutionTag.equals(other.substitutionTag)) { return false; + } return true; } - + } \ No newline at end of file diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/Personalization.java b/src/main/java/com/sendgrid/helpers/mail/objects/Personalization.java index 9a91db5d..82cb3de3 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/Personalization.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/Personalization.java @@ -3,29 +3,47 @@ import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonInclude.Include; import com.fasterxml.jackson.annotation.JsonProperty; - -import java.util.Collections; import java.util.ArrayList; +import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; @JsonInclude(Include.NON_DEFAULT) public class Personalization { - @JsonProperty("to") private List tos; - @JsonProperty("cc") private List ccs; - @JsonProperty("bcc") private List bccs; - @JsonProperty("subject") private String subject; - @JsonProperty("headers") private Map headers; - @JsonProperty("substitutions") private Map substitutions; - @JsonProperty("custom_args") private Map customArgs; - @JsonProperty("dynamic_template_data") private Map dynamicTemplateData; - @JsonProperty("send_at") private long sendAt; + + @JsonProperty("to") + private List tos; + + @JsonProperty("cc") + private List ccs; + + @JsonProperty("bcc") + private List bccs; + + @JsonProperty("subject") + private String subject; + + @JsonProperty("headers") + private Map headers; + + @JsonProperty("substitutions") + private Map substitutions; + + @JsonProperty("custom_args") + private Map customArgs; + + @JsonProperty("dynamic_template_data") + private Map dynamicTemplateData; + + @JsonProperty("send_at") + private long sendAt; @JsonProperty("to") public List getTos() { - if(tos == null) - return Collections.emptyList(); + if (tos == null) { + return Collections.emptyList(); + } return tos; } @@ -43,8 +61,9 @@ public void addTo(Email email) { @JsonProperty("cc") public List getCcs() { - if(ccs == null) - return Collections.emptyList(); + if (ccs == null) { + return Collections.emptyList(); + } return ccs; } @@ -62,8 +81,9 @@ public void addCc(Email email) { @JsonProperty("bcc") public List getBccs() { - if(bccs == null) - return Collections.emptyList(); + if (bccs == null) { + return Collections.emptyList(); + } return bccs; } @@ -89,15 +109,16 @@ public void setSubject(String subject) { } @JsonProperty("headers") - public Map getHeaders() { - if(headers == null) - return Collections.emptyMap(); + public Map getHeaders() { + if (headers == null) { + return Collections.emptyMap(); + } return headers; } public void addHeader(String key, String value) { if (headers == null) { - headers = new HashMap(); + headers = new HashMap(); headers.put(key, value); } else { headers.put(key, value); @@ -105,15 +126,16 @@ public void addHeader(String key, String value) { } @JsonProperty("substitutions") - public Map getSubstitutions() { - if(substitutions == null) - return Collections.emptyMap(); + public Map getSubstitutions() { + if (substitutions == null) { + return Collections.emptyMap(); + } return substitutions; } public void addSubstitution(String key, String value) { if (substitutions == null) { - substitutions = new HashMap(); + substitutions = new HashMap(); substitutions.put(key, value); } else { substitutions.put(key, value); @@ -121,15 +143,16 @@ public void addSubstitution(String key, String value) { } @JsonProperty("custom_args") - public Map getCustomArgs() { - if(customArgs == null) - return Collections.emptyMap(); + public Map getCustomArgs() { + if (customArgs == null) { + return Collections.emptyMap(); + } return customArgs; } public void addCustomArg(String key, String value) { if (customArgs == null) { - customArgs = new HashMap(); + customArgs = new HashMap(); customArgs.put(key, value); } else { customArgs.put(key, value); @@ -146,14 +169,14 @@ public void setSendAt(long sendAt) { } @JsonProperty("dynamic_template_data") - public Map getDynamicTemplateData() { + public Map getDynamicTemplateData() { return dynamicTemplateData == null - ? Collections.emptyMap() : dynamicTemplateData; + ? Collections.emptyMap() : dynamicTemplateData; } public void addDynamicTemplateData(String key, Object value) { if (dynamicTemplateData == null) { - dynamicTemplateData = new HashMap(); + dynamicTemplateData = new HashMap(); } dynamicTemplateData.put(key, value); } @@ -175,50 +198,68 @@ public int hashCode() { @Override public boolean equals(Object obj) { - if (this == obj) + if (this == obj) { return true; - if (obj == null) + } + if (obj == null) { return false; - if (getClass() != obj.getClass()) + } + if (getClass() != obj.getClass()) { return false; + } Personalization other = (Personalization) obj; if (bccs == null) { - if (other.bccs != null) + if (other.bccs != null) { return false; - } else if (!bccs.equals(other.bccs)) + } + } else if (!bccs.equals(other.bccs)) { return false; + } if (ccs == null) { - if (other.ccs != null) + if (other.ccs != null) { return false; - } else if (!ccs.equals(other.ccs)) + } + } else if (!ccs.equals(other.ccs)) { return false; + } if (customArgs == null) { - if (other.customArgs != null) + if (other.customArgs != null) { return false; - } else if (!customArgs.equals(other.customArgs)) + } + } else if (!customArgs.equals(other.customArgs)) { return false; + } if (headers == null) { - if (other.headers != null) + if (other.headers != null) { return false; - } else if (!headers.equals(other.headers)) + } + } else if (!headers.equals(other.headers)) { return false; - if (sendAt != other.sendAt) + } + if (sendAt != other.sendAt) { return false; + } if (subject == null) { - if (other.subject != null) + if (other.subject != null) { return false; - } else if (!subject.equals(other.subject)) + } + } else if (!subject.equals(other.subject)) { return false; + } if (substitutions == null) { - if (other.substitutions != null) + if (other.substitutions != null) { return false; - } else if (!substitutions.equals(other.substitutions)) + } + } else if (!substitutions.equals(other.substitutions)) { return false; + } if (tos == null) { - if (other.tos != null) + if (other.tos != null) { return false; - } else if (!tos.equals(other.tos)) + } + } else if (!tos.equals(other.tos)) { return false; + } return true; } } diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/Setting.java b/src/main/java/com/sendgrid/helpers/mail/objects/Setting.java index 45bef3bb..84a26b0f 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/Setting.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/Setting.java @@ -6,7 +6,9 @@ @JsonInclude(Include.NON_DEFAULT) public class Setting { - @JsonProperty("enable") private boolean enable; + + @JsonProperty("enable") + private boolean enable; @JsonProperty("enable") public boolean getEnable() { @@ -27,15 +29,19 @@ public int hashCode() { @Override public boolean equals(Object obj) { - if (this == obj) + if (this == obj) { return true; - if (obj == null) + } + if (obj == null) { return false; - if (getClass() != obj.getClass()) + } + if (getClass() != obj.getClass()) { return false; + } Setting other = (Setting) obj; - if (enable != other.enable) + if (enable != other.enable) { return false; + } return true; } } \ No newline at end of file diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/SpamCheckSetting.java b/src/main/java/com/sendgrid/helpers/mail/objects/SpamCheckSetting.java index d2cd79c1..b0939bdb 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/SpamCheckSetting.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/SpamCheckSetting.java @@ -5,38 +5,43 @@ import com.fasterxml.jackson.annotation.JsonProperty; /** - * A setting object that allows you to test the content of - * your email for spam. + * A setting object that allows you to test the content of your email for spam. */ @JsonInclude(Include.NON_EMPTY) public class SpamCheckSetting { - @JsonProperty("enable") private boolean enable; - @JsonProperty("threshold") private int spamThreshold; - @JsonProperty("post_to_url") private String postToUrl; + + @JsonProperty("enable") + private boolean enable; + + @JsonProperty("threshold") + private int spamThreshold; + + @JsonProperty("post_to_url") + private String postToUrl; @JsonProperty("enable") public boolean getEnable() { return enable; } - + public void setEnable(boolean enable) { this.enable = enable; } - + @JsonProperty("threshold") public int getSpamThreshold() { return spamThreshold; } - + public void setSpamThreshold(int spamThreshold) { this.spamThreshold = spamThreshold; } - + @JsonProperty("post_to_url") public String getPostToUrl() { return postToUrl; } - + public void setPostToUrl(String postToUrl) { this.postToUrl = postToUrl; } @@ -53,22 +58,29 @@ public int hashCode() { @Override public boolean equals(Object obj) { - if (this == obj) + if (this == obj) { return true; - if (obj == null) + } + if (obj == null) { return false; - if (getClass() != obj.getClass()) + } + if (getClass() != obj.getClass()) { return false; + } SpamCheckSetting other = (SpamCheckSetting) obj; - if (enable != other.enable) + if (enable != other.enable) { return false; + } if (postToUrl == null) { - if (other.postToUrl != null) + if (other.postToUrl != null) { return false; - } else if (!postToUrl.equals(other.postToUrl)) + } + } else if (!postToUrl.equals(other.postToUrl)) { return false; - if (spamThreshold != other.spamThreshold) + } + if (spamThreshold != other.spamThreshold) { return false; + } return true; } } \ No newline at end of file diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/SubscriptionTrackingSetting.java b/src/main/java/com/sendgrid/helpers/mail/objects/SubscriptionTrackingSetting.java index 6c438cc9..fe0f102e 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/SubscriptionTrackingSetting.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/SubscriptionTrackingSetting.java @@ -5,50 +5,56 @@ import com.fasterxml.jackson.annotation.JsonProperty; /** - * A subscription tracking setting object. Subscription tracking - * allows you to insert a subscription management link at the - * bottom of the text and html bodies of your email. If you - * would like to specify the location of the link within your - * email, you may use the substitution_tag. + * A subscription tracking setting object. Subscription tracking allows you to insert a subscription + * management link at the bottom of the text and html bodies of your email. If you would like to + * specify the location of the link within your email, you may use the substitution_tag. */ @JsonInclude(Include.NON_EMPTY) public class SubscriptionTrackingSetting { - @JsonProperty("enable") private boolean enable; - @JsonProperty("text") private String text; - @JsonProperty("html") private String html; - @JsonProperty("substitution_tag") private String substitutionTag; - + + @JsonProperty("enable") + private boolean enable; + + @JsonProperty("text") + private String text; + + @JsonProperty("html") + private String html; + + @JsonProperty("substitution_tag") + private String substitutionTag; + @JsonProperty("enable") public boolean getEnable() { return enable; } - + public void setEnable(boolean enable) { this.enable = enable; } - + @JsonProperty("text") public String getText() { return text; } - + public void setText(String text) { this.text = text; } - + @JsonProperty("html") public String getHtml() { return html; - } + } public void setHtml(String html) { this.html = html; } - + @JsonProperty("substitution_tag") public String getSubstitutionTag() { return substitutionTag; - } + } public void setSubstitutionTag(String substitutionTag) { this.substitutionTag = substitutionTag; @@ -67,30 +73,40 @@ public int hashCode() { @Override public boolean equals(Object obj) { - if (this == obj) + if (this == obj) { return true; - if (obj == null) + } + if (obj == null) { return false; - if (getClass() != obj.getClass()) + } + if (getClass() != obj.getClass()) { return false; + } SubscriptionTrackingSetting other = (SubscriptionTrackingSetting) obj; - if (enable != other.enable) + if (enable != other.enable) { return false; + } if (html == null) { - if (other.html != null) + if (other.html != null) { return false; - } else if (!html.equals(other.html)) + } + } else if (!html.equals(other.html)) { return false; + } if (substitutionTag == null) { - if (other.substitutionTag != null) + if (other.substitutionTag != null) { return false; - } else if (!substitutionTag.equals(other.substitutionTag)) + } + } else if (!substitutionTag.equals(other.substitutionTag)) { return false; + } if (text == null) { - if (other.text != null) + if (other.text != null) { return false; - } else if (!text.equals(other.text)) + } + } else if (!text.equals(other.text)) { return false; + } return true; } } \ No newline at end of file diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/TrackingSettings.java b/src/main/java/com/sendgrid/helpers/mail/objects/TrackingSettings.java index 981875c8..08a9b411 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/TrackingSettings.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/TrackingSettings.java @@ -6,43 +6,52 @@ @JsonInclude(Include.NON_DEFAULT) public class TrackingSettings { - @JsonProperty("click_tracking") private ClickTrackingSetting clickTrackingSetting; - @JsonProperty("open_tracking") private OpenTrackingSetting openTrackingSetting; - @JsonProperty("subscription_tracking") private SubscriptionTrackingSetting subscriptionTrackingSetting; - @JsonProperty("ganalytics") private GoogleAnalyticsSetting googleAnalyticsSetting; + + @JsonProperty("click_tracking") + private ClickTrackingSetting clickTrackingSetting; + + @JsonProperty("open_tracking") + private OpenTrackingSetting openTrackingSetting; + + @JsonProperty("subscription_tracking") + private SubscriptionTrackingSetting subscriptionTrackingSetting; + + @JsonProperty("ganalytics") + private GoogleAnalyticsSetting googleAnalyticsSetting; @JsonProperty("click_tracking") public ClickTrackingSetting getClickTrackingSetting() { return clickTrackingSetting; } - + public void setClickTrackingSetting(ClickTrackingSetting clickTrackingSetting) { this.clickTrackingSetting = clickTrackingSetting; } - + @JsonProperty("open_tracking") public OpenTrackingSetting getOpenTrackingSetting() { return openTrackingSetting; } - + public void setOpenTrackingSetting(OpenTrackingSetting openTrackingSetting) { this.openTrackingSetting = openTrackingSetting; } - + @JsonProperty("subscription_tracking") public SubscriptionTrackingSetting getSubscriptionTrackingSetting() { return subscriptionTrackingSetting; } - - public void setSubscriptionTrackingSetting(SubscriptionTrackingSetting subscriptionTrackingSetting) { + + public void setSubscriptionTrackingSetting( + SubscriptionTrackingSetting subscriptionTrackingSetting) { this.subscriptionTrackingSetting = subscriptionTrackingSetting; } - + @JsonProperty("ganalytics") public GoogleAnalyticsSetting getGoogleAnalyticsSetting() { return googleAnalyticsSetting; } - + public void setGoogleAnalyticsSetting(GoogleAnalyticsSetting googleAnalyticsSetting) { this.googleAnalyticsSetting = googleAnalyticsSetting; } @@ -51,42 +60,56 @@ public void setGoogleAnalyticsSetting(GoogleAnalyticsSetting googleAnalyticsSett public int hashCode() { final int prime = 31; int result = 1; - result = prime * result + ((clickTrackingSetting == null) ? 0 : clickTrackingSetting.hashCode()); - result = prime * result + ((googleAnalyticsSetting == null) ? 0 : googleAnalyticsSetting.hashCode()); + result = + prime * result + ((clickTrackingSetting == null) ? 0 : clickTrackingSetting.hashCode()); + result = + prime * result + ((googleAnalyticsSetting == null) ? 0 : googleAnalyticsSetting.hashCode()); result = prime * result + ((openTrackingSetting == null) ? 0 : openTrackingSetting.hashCode()); - result = prime * result + ((subscriptionTrackingSetting == null) ? 0 : subscriptionTrackingSetting.hashCode()); + result = prime * result + ((subscriptionTrackingSetting == null) ? 0 + : subscriptionTrackingSetting.hashCode()); return result; } @Override public boolean equals(Object obj) { - if (this == obj) + if (this == obj) { return true; - if (obj == null) + } + if (obj == null) { return false; - if (getClass() != obj.getClass()) + } + if (getClass() != obj.getClass()) { return false; + } TrackingSettings other = (TrackingSettings) obj; if (clickTrackingSetting == null) { - if (other.clickTrackingSetting != null) + if (other.clickTrackingSetting != null) { return false; - } else if (!clickTrackingSetting.equals(other.clickTrackingSetting)) + } + } else if (!clickTrackingSetting.equals(other.clickTrackingSetting)) { return false; + } if (googleAnalyticsSetting == null) { - if (other.googleAnalyticsSetting != null) + if (other.googleAnalyticsSetting != null) { return false; - } else if (!googleAnalyticsSetting.equals(other.googleAnalyticsSetting)) + } + } else if (!googleAnalyticsSetting.equals(other.googleAnalyticsSetting)) { return false; + } if (openTrackingSetting == null) { - if (other.openTrackingSetting != null) + if (other.openTrackingSetting != null) { return false; - } else if (!openTrackingSetting.equals(other.openTrackingSetting)) + } + } else if (!openTrackingSetting.equals(other.openTrackingSetting)) { return false; + } if (subscriptionTrackingSetting == null) { - if (other.subscriptionTrackingSetting != null) + if (other.subscriptionTrackingSetting != null) { return false; - } else if (!subscriptionTrackingSetting.equals(other.subscriptionTrackingSetting)) + } + } else if (!subscriptionTrackingSetting.equals(other.subscriptionTrackingSetting)) { return false; + } return true; } } \ No newline at end of file diff --git a/src/test/java/com/sendgrid/LicenseTest.java b/src/test/java/com/sendgrid/LicenseTest.java index 493458e6..96bf096c 100644 --- a/src/test/java/com/sendgrid/LicenseTest.java +++ b/src/test/java/com/sendgrid/LicenseTest.java @@ -1,27 +1,28 @@ package com.sendgrid; -import org.junit.Assert; -import org.junit.Test; - import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.util.Calendar; +import org.junit.Assert; +import org.junit.Test; public class LicenseTest { - @Test - public void testLicenseShouldHaveCorrectYear() throws IOException { - String copyrightText = null; - try (BufferedReader br = new BufferedReader(new FileReader("./LICENSE.md"))) { - for (String line; (line = br.readLine()) != null; ) { - if (line.startsWith("Copyright")) { - copyrightText = line; - break; - } - } + @Test + public void testLicenseShouldHaveCorrectYear() throws IOException { + String copyrightText = null; + try (BufferedReader br = new BufferedReader(new FileReader("./LICENSE.md"))) { + for (String line; (line = br.readLine()) != null; ) { + if (line.startsWith("Copyright")) { + copyrightText = line; + break; } - String expectedCopyright = String.format("Copyright (C) %d, Twilio SendGrid, Inc. ", Calendar.getInstance().get(Calendar.YEAR)); - Assert.assertEquals("License has incorrect year", copyrightText, expectedCopyright); + } } + String expectedCopyright = String + .format("Copyright (C) %d, Twilio SendGrid, Inc. ", + Calendar.getInstance().get(Calendar.YEAR)); + Assert.assertEquals("License has incorrect year", copyrightText, expectedCopyright); + } } diff --git a/src/test/java/com/sendgrid/SendGridTest.java b/src/test/java/com/sendgrid/SendGridTest.java index 1873be71..d72909e3 100644 --- a/src/test/java/com/sendgrid/SendGridTest.java +++ b/src/test/java/com/sendgrid/SendGridTest.java @@ -1,20 +1,21 @@ package com.sendgrid; -import org.junit.Assert; -import org.junit.Test; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; import java.io.IOException; import java.util.HashMap; import java.util.Map; -import static org.mockito.Mockito.*; +import org.junit.Assert; +import org.junit.Test; public class SendGridTest { private final String SENDGRID_API_KEY = ""; - public Map buildDefaultHeaders() { + private Map buildDefaultHeaders() { SendGrid sg = new SendGrid(SENDGRID_API_KEY); - Map requestHeaders = new HashMap(); + Map requestHeaders = new HashMap(); requestHeaders.put("Authorization", "Bearer " + SENDGRID_API_KEY); String USER_AGENT = "sendgrid/" + sg.getLibraryVersion() + ";java"; requestHeaders.put("User-agent", USER_AGENT); @@ -27,7 +28,7 @@ public void testInitialization() { SendGrid sg = new SendGrid(SENDGRID_API_KEY); Assert.assertEquals(sg.getHost(), "api.sendgrid.com"); Assert.assertEquals(sg.getVersion(), "v3"); - Map requestHeaders = buildDefaultHeaders(); + Map requestHeaders = buildDefaultHeaders(); Assert.assertEquals(sg.getRequestHeaders(), requestHeaders); } @@ -56,7 +57,7 @@ public void testVersion() { @Test public void testRequestHeaders() { SendGrid sg = new SendGrid(SENDGRID_API_KEY); - Map requestHeaders = buildDefaultHeaders(); + Map requestHeaders = buildDefaultHeaders(); sg.addRequestHeader("Test", "one"); requestHeaders.put("Test", "one"); @@ -93,7 +94,7 @@ public void testRateLimitSleep() { public void test_async() { final Object sync = new Object(); SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + if (System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { @@ -111,7 +112,7 @@ public void test_async() { @Override public void error(Exception e) { Assert.fail(); - synchronized(sync) { + synchronized (sync) { sync.notify(); } } @@ -119,17 +120,17 @@ public void error(Exception e) { @Override public void response(Response response) { Assert.assertEquals(200, response.getStatusCode()); - synchronized(sync) { + synchronized (sync) { sync.notify(); } } }); try { - synchronized(sync) { + synchronized (sync) { sync.wait(2000); } - } catch(InterruptedException ex) { + } catch (InterruptedException ex) { Assert.fail(ex.toString()); } } @@ -138,7 +139,7 @@ public void response(Response response) { public void test_async_rate_limit() { final Object sync = new Object(); SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { + if (System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { sg = new SendGrid("SENDGRID_API_KEY"); sg.setHost(System.getenv("MOCK_HOST")); } else { @@ -167,10 +168,10 @@ public void response(Response response) { }); try { - synchronized(sync) { + synchronized (sync) { sync.wait(2000); } - } catch(InterruptedException ex) { + } catch (InterruptedException ex) { Assert.fail(ex.toString()); } } @@ -198,7 +199,8 @@ public void test_access_settings_whitelist_post() throws IOException { Request request = new Request(); request.setMethod(Method.POST); request.setEndpoint("access_settings/whitelist"); - request.setBody("{\"ips\":[{\"ip\":\"192.168.1.1\"},{\"ip\":\"192.*.*.*\"},{\"ip\":\"192.168.1.3/32\"}]}"); + request.setBody( + "{\"ips\":[{\"ip\":\"192.168.1.1\"},{\"ip\":\"192.*.*.*\"},{\"ip\":\"192.168.1.3/32\"}]}"); Response response = sg.api(request); Assert.assertEquals(201, response.getStatusCode()); } @@ -265,7 +267,8 @@ public void test_alerts_post() throws IOException { Request request = new Request(); request.setMethod(Method.POST); request.setEndpoint("alerts"); - request.setBody("{\"type\":\"stats_notification\",\"frequency\":\"daily\",\"email_to\":\"example@example.com\"}"); + request.setBody( + "{\"type\":\"stats_notification\",\"frequency\":\"daily\",\"email_to\":\"example@example.com\"}"); Response response = sg.api(request); Assert.assertEquals(201, response.getStatusCode()); } @@ -332,7 +335,8 @@ public void test_api_keys_post() throws IOException { Request request = new Request(); request.setMethod(Method.POST); request.setEndpoint("api_keys"); - request.setBody("{\"sample\":\"data\",\"scopes\":[\"mail.send\",\"alerts.create\",\"alerts.read\"],\"name\":\"My API Key\"}"); + request.setBody( + "{\"sample\":\"data\",\"scopes\":[\"mail.send\",\"alerts.create\",\"alerts.read\"],\"name\":\"My API Key\"}"); Response response = sg.api(request); Assert.assertEquals(201, response.getStatusCode()); } @@ -360,7 +364,8 @@ public void test_api_keys__api_key_id__put() throws IOException { Request request = new Request(); request.setMethod(Method.PUT); request.setEndpoint("api_keys/{api_key_id}"); - request.setBody("{\"scopes\":[\"user.profile.read\",\"user.profile.update\"],\"name\":\"A New Hope\"}"); + request.setBody( + "{\"scopes\":[\"user.profile.read\",\"user.profile.update\"],\"name\":\"A New Hope\"}"); Response response = sg.api(request); Assert.assertEquals(200, response.getStatusCode()); } @@ -414,7 +419,8 @@ public void test_asm_groups_post() throws IOException { Request request = new Request(); request.setMethod(Method.POST); request.setEndpoint("asm/groups"); - request.setBody("{\"is_default\":true,\"description\":\"Suggestions for products our users might like.\",\"name\":\"Product Suggestions\"}"); + request.setBody( + "{\"is_default\":true,\"description\":\"Suggestions for products our users might like.\",\"name\":\"Product Suggestions\"}"); Response response = sg.api(request); Assert.assertEquals(201, response.getStatusCode()); } @@ -442,7 +448,8 @@ public void test_asm_groups__group_id__patch() throws IOException { Request request = new Request(); request.setMethod(Method.PATCH); request.setEndpoint("asm/groups/{group_id}"); - request.setBody("{\"description\":\"Suggestions for items our users might like.\",\"name\":\"Item Suggestions\",\"id\":103}"); + request.setBody( + "{\"description\":\"Suggestions for items our users might like.\",\"name\":\"Item Suggestions\",\"id\":103}"); Response response = sg.api(request); Assert.assertEquals(201, response.getStatusCode()); } @@ -509,7 +516,8 @@ public void test_asm_groups__group_id__suppressions_search_post() throws IOExcep Request request = new Request(); request.setMethod(Method.POST); request.setEndpoint("asm/groups/{group_id}/suppressions/search"); - request.setBody("{\"recipient_emails\":[\"exists1@example.com\",\"exists2@example.com\",\"doesnotexists@example.com\"]}"); + request.setBody( + "{\"recipient_emails\":[\"exists1@example.com\",\"exists2@example.com\",\"doesnotexists@example.com\"]}"); Response response = sg.api(request); Assert.assertEquals(200, response.getStatusCode()); } @@ -621,7 +629,8 @@ public void test_campaigns_post() throws IOException { Request request = new Request(); request.setMethod(Method.POST); request.setEndpoint("campaigns"); - request.setBody("{\"custom_unsubscribe_url\":\"\",\"html_content\":\"

Check out our spring line!

\",\"list_ids\":[110,124],\"sender_id\":124451,\"subject\":\"New Products for Spring!\",\"plain_content\":\"Check out our spring line!\",\"suppression_group_id\":42,\"title\":\"March Newsletter\",\"segment_ids\":[110],\"categories\":[\"spring line\"],\"ip_pool\":\"marketing\"}"); + request.setBody( + "{\"custom_unsubscribe_url\":\"\",\"html_content\":\"

Check out our spring line!

\",\"list_ids\":[110,124],\"sender_id\":124451,\"subject\":\"New Products for Spring!\",\"plain_content\":\"Check out our spring line!\",\"suppression_group_id\":42,\"title\":\"March Newsletter\",\"segment_ids\":[110],\"categories\":[\"spring line\"],\"ip_pool\":\"marketing\"}"); Response response = sg.api(request); Assert.assertEquals(201, response.getStatusCode()); } @@ -650,7 +659,8 @@ public void test_campaigns__campaign_id__patch() throws IOException { Request request = new Request(); request.setMethod(Method.PATCH); request.setEndpoint("campaigns/{campaign_id}"); - request.setBody("{\"html_content\":\"

Check out our summer line!

\",\"subject\":\"New Products for Summer!\",\"title\":\"May Newsletter\",\"categories\":[\"summer line\"],\"plain_content\":\"Check out our summer line!\"}"); + request.setBody( + "{\"html_content\":\"

Check out our summer line!

\",\"subject\":\"New Products for Summer!\",\"title\":\"May Newsletter\",\"categories\":[\"summer line\"],\"plain_content\":\"Check out our summer line!\"}"); Response response = sg.api(request); Assert.assertEquals(200, response.getStatusCode()); } @@ -1053,7 +1063,8 @@ public void test_contactdb_recipients_patch() throws IOException { Request request = new Request(); request.setMethod(Method.PATCH); request.setEndpoint("contactdb/recipients"); - request.setBody("[{\"first_name\":\"Guy\",\"last_name\":\"Jones\",\"email\":\"jones@example.com\"}]"); + request.setBody( + "[{\"first_name\":\"Guy\",\"last_name\":\"Jones\",\"email\":\"jones@example.com\"}]"); Response response = sg.api(request); Assert.assertEquals(201, response.getStatusCode()); } @@ -1067,7 +1078,8 @@ public void test_contactdb_recipients_post() throws IOException { Request request = new Request(); request.setMethod(Method.POST); request.setEndpoint("contactdb/recipients"); - request.setBody("[{\"age\":25,\"last_name\":\"User\",\"email\":\"example@example.com\",\"first_name\":\"\"},{\"age\":25,\"last_name\":\"User\",\"email\":\"example2@example.com\",\"first_name\":\"Example\"}]"); + request.setBody( + "[{\"age\":25,\"last_name\":\"User\",\"email\":\"example@example.com\",\"first_name\":\"\"},{\"age\":25,\"last_name\":\"User\",\"email\":\"example2@example.com\",\"first_name\":\"Example\"}]"); Response response = sg.api(request); Assert.assertEquals(201, response.getStatusCode()); } @@ -1202,7 +1214,8 @@ public void test_contactdb_segments_post() throws IOException { Request request = new Request(); request.setMethod(Method.POST); request.setEndpoint("contactdb/segments"); - request.setBody("{\"conditions\":[{\"operator\":\"eq\",\"field\":\"last_name\",\"and_or\":\"\",\"value\":\"Miller\"},{\"operator\":\"gt\",\"field\":\"last_clicked\",\"and_or\":\"and\",\"value\":\"01/02/2015\"},{\"operator\":\"eq\",\"field\":\"clicks.campaign_identifier\",\"and_or\":\"or\",\"value\":\"513\"}],\"name\":\"Last Name Miller\",\"list_id\":4}"); + request.setBody( + "{\"conditions\":[{\"operator\":\"eq\",\"field\":\"last_name\",\"and_or\":\"\",\"value\":\"Miller\"},{\"operator\":\"gt\",\"field\":\"last_clicked\",\"and_or\":\"and\",\"value\":\"01/02/2015\"},{\"operator\":\"eq\",\"field\":\"clicks.campaign_identifier\",\"and_or\":\"or\",\"value\":\"513\"}],\"name\":\"Last Name Miller\",\"list_id\":4}"); Response response = sg.api(request); Assert.assertEquals(200, response.getStatusCode()); } @@ -1229,7 +1242,8 @@ public void test_contactdb_segments__segment_id__patch() throws IOException { Request request = new Request(); request.setMethod(Method.PATCH); request.setEndpoint("contactdb/segments/{segment_id}"); - request.setBody("{\"conditions\":[{\"operator\":\"eq\",\"field\":\"last_name\",\"and_or\":\"\",\"value\":\"Miller\"}],\"name\":\"The Millers\",\"list_id\":5}"); + request.setBody( + "{\"conditions\":[{\"operator\":\"eq\",\"field\":\"last_name\",\"and_or\":\"\",\"value\":\"Miller\"}],\"name\":\"The Millers\",\"list_id\":5}"); request.addQueryParam("segment_id", "test_string"); Response response = sg.api(request); Assert.assertEquals(200, response.getStatusCode()); @@ -1541,7 +1555,8 @@ public void test_mail_send_post() throws IOException { Request request = new Request(); request.setMethod(Method.POST); request.setEndpoint("mail/send"); - request.setBody("{\"custom_args\":{\"New Argument 1\":\"New Value 1\",\"activationAttempt\":\"1\",\"customerAccountNumber\":\"[CUSTOMER ACCOUNT NUMBER GOES HERE]\"},\"from\":{\"email\":\"sam.smith@example.com\",\"name\":\"Sam Smith\"},\"attachments\":[{\"name\":\"file1\",\"filename\":\"file1.jpg\",\"content\":\"[BASE64 encoded content block here]\",\"disposition\":\"inline\",\"content_id\":\"ii_139db99fdb5c3704\",\"type\":\"jpg\"}],\"personalizations\":[{\"to\":[{\"email\":\"john.doe@example.com\",\"name\":\"John Doe\"}],\"cc\":[{\"email\":\"jane.doe@example.com\",\"name\":\"Jane Doe\"}],\"bcc\":[{\"email\":\"sam.doe@example.com\",\"name\":\"Sam Doe\"}],\"custom_args\":{\"New Argument 1\":\"New Value 1\",\"activationAttempt\":\"1\",\"customerAccountNumber\":\"[CUSTOMER ACCOUNT NUMBER GOES HERE]\"},\"headers\":{\"X-Accept-Language\":\"en\",\"X-Mailer\":\"MyApp\"},\"send_at\":1409348513,\"substitutions\":{\"type\":\"object\",\"id\":\"substitutions\"},\"subject\":\"Hello, World!\"}],\"subject\":\"Hello, World!\",\"ip_pool_name\":\"[YOUR POOL NAME GOES HERE]\",\"content\":[{\"type\":\"text/html\",\"value\":\"

Hello, world!

\"}],\"headers\":{},\"asm\":{\"groups_to_display\":[1,2,3],\"group_id\":1},\"batch_id\":\"[YOUR BATCH ID GOES HERE]\",\"tracking_settings\":{\"subscription_tracking\":{\"text\":\"If you would like to unsubscribe and stop receiveing these emails <% click here %>.\",\"enable\":true,\"html\":\"If you would like to unsubscribe and stop receiving these emails <% clickhere %>.\",\"substitution_tag\":\"<%click here%>\"},\"open_tracking\":{\"enable\":true,\"substitution_tag\":\"%opentrack\"},\"click_tracking\":{\"enable\":true,\"enable_text\":true},\"ganalytics\":{\"utm_campaign\":\"[NAME OF YOUR REFERRER SOURCE]\",\"enable\":true,\"utm_name\":\"[NAME OF YOUR CAMPAIGN]\",\"utm_term\":\"[IDENTIFY PAID KEYWORDS HERE]\",\"utm_content\":\"[USE THIS SPACE TO DIFFERENTIATE YOUR EMAIL FROM ADS]\",\"utm_medium\":\"[NAME OF YOUR MARKETING MEDIUM e.g. email]\"}},\"mail_settings\":{\"footer\":{\"text\":\"Thanks,/n The SendGrid Team\",\"enable\":true,\"html\":\"

Thanks
The SendGrid Team

\"},\"spam_check\":{\"threshold\":3,\"post_to_url\":\"http://example.com/compliance\",\"enable\":true},\"bypass_list_management\":{\"enable\":true},\"sandbox_mode\":{\"enable\":false},\"bcc\":{\"enable\":true,\"email\":\"ben.doe@example.com\"}},\"reply_to\":{\"email\":\"sam.smith@example.com\",\"name\":\"Sam Smith\"},\"sections\":{\"section\":{\":sectionName2\":\"section 2 text\",\":sectionName1\":\"section 1 text\"}},\"template_id\":\"[YOUR TEMPLATE ID GOES HERE]\",\"categories\":[\"category1\",\"category2\"],\"send_at\":1409348513}"); + request.setBody( + "{\"custom_args\":{\"New Argument 1\":\"New Value 1\",\"activationAttempt\":\"1\",\"customerAccountNumber\":\"[CUSTOMER ACCOUNT NUMBER GOES HERE]\"},\"from\":{\"email\":\"sam.smith@example.com\",\"name\":\"Sam Smith\"},\"attachments\":[{\"name\":\"file1\",\"filename\":\"file1.jpg\",\"content\":\"[BASE64 encoded content block here]\",\"disposition\":\"inline\",\"content_id\":\"ii_139db99fdb5c3704\",\"type\":\"jpg\"}],\"personalizations\":[{\"to\":[{\"email\":\"john.doe@example.com\",\"name\":\"John Doe\"}],\"cc\":[{\"email\":\"jane.doe@example.com\",\"name\":\"Jane Doe\"}],\"bcc\":[{\"email\":\"sam.doe@example.com\",\"name\":\"Sam Doe\"}],\"custom_args\":{\"New Argument 1\":\"New Value 1\",\"activationAttempt\":\"1\",\"customerAccountNumber\":\"[CUSTOMER ACCOUNT NUMBER GOES HERE]\"},\"headers\":{\"X-Accept-Language\":\"en\",\"X-Mailer\":\"MyApp\"},\"send_at\":1409348513,\"substitutions\":{\"type\":\"object\",\"id\":\"substitutions\"},\"subject\":\"Hello, World!\"}],\"subject\":\"Hello, World!\",\"ip_pool_name\":\"[YOUR POOL NAME GOES HERE]\",\"content\":[{\"type\":\"text/html\",\"value\":\"

Hello, world!

\"}],\"headers\":{},\"asm\":{\"groups_to_display\":[1,2,3],\"group_id\":1},\"batch_id\":\"[YOUR BATCH ID GOES HERE]\",\"tracking_settings\":{\"subscription_tracking\":{\"text\":\"If you would like to unsubscribe and stop receiveing these emails <% click here %>.\",\"enable\":true,\"html\":\"If you would like to unsubscribe and stop receiving these emails <% clickhere %>.\",\"substitution_tag\":\"<%click here%>\"},\"open_tracking\":{\"enable\":true,\"substitution_tag\":\"%opentrack\"},\"click_tracking\":{\"enable\":true,\"enable_text\":true},\"ganalytics\":{\"utm_campaign\":\"[NAME OF YOUR REFERRER SOURCE]\",\"enable\":true,\"utm_name\":\"[NAME OF YOUR CAMPAIGN]\",\"utm_term\":\"[IDENTIFY PAID KEYWORDS HERE]\",\"utm_content\":\"[USE THIS SPACE TO DIFFERENTIATE YOUR EMAIL FROM ADS]\",\"utm_medium\":\"[NAME OF YOUR MARKETING MEDIUM e.g. email]\"}},\"mail_settings\":{\"footer\":{\"text\":\"Thanks,/n The SendGrid Team\",\"enable\":true,\"html\":\"

Thanks
The SendGrid Team

\"},\"spam_check\":{\"threshold\":3,\"post_to_url\":\"http://example.com/compliance\",\"enable\":true},\"bypass_list_management\":{\"enable\":true},\"sandbox_mode\":{\"enable\":false},\"bcc\":{\"enable\":true,\"email\":\"ben.doe@example.com\"}},\"reply_to\":{\"email\":\"sam.smith@example.com\",\"name\":\"Sam Smith\"},\"sections\":{\"section\":{\":sectionName2\":\"section 2 text\",\":sectionName1\":\"section 1 text\"}},\"template_id\":\"[YOUR TEMPLATE ID GOES HERE]\",\"categories\":[\"category1\",\"category2\"],\"send_at\":1409348513}"); Response response = sg.api(request); Assert.assertEquals(202, response.getStatusCode()); } @@ -1887,7 +1902,8 @@ public void test_senders_post() throws IOException { Request request = new Request(); request.setMethod(Method.POST); request.setEndpoint("senders"); - request.setBody("{\"city\":\"Denver\",\"from\":{\"email\":\"from@example.com\",\"name\":\"Example INC\"},\"zip\":\"80202\",\"country\":\"United States\",\"state\":\"Colorado\",\"address_2\":\"Apt. 456\",\"address\":\"123 Elm St.\",\"reply_to\":{\"email\":\"replyto@example.com\",\"name\":\"Example INC\"},\"nickname\":\"My Sender ID\"}"); + request.setBody( + "{\"city\":\"Denver\",\"from\":{\"email\":\"from@example.com\",\"name\":\"Example INC\"},\"zip\":\"80202\",\"country\":\"United States\",\"state\":\"Colorado\",\"address_2\":\"Apt. 456\",\"address\":\"123 Elm St.\",\"reply_to\":{\"email\":\"replyto@example.com\",\"name\":\"Example INC\"},\"nickname\":\"My Sender ID\"}"); Response response = sg.api(request); Assert.assertEquals(201, response.getStatusCode()); } @@ -1914,7 +1930,8 @@ public void test_senders__sender_id__patch() throws IOException { Request request = new Request(); request.setMethod(Method.PATCH); request.setEndpoint("senders/{sender_id}"); - request.setBody("{\"city\":\"Denver\",\"from\":{\"email\":\"from@example.com\",\"name\":\"Example INC\"},\"zip\":\"80202\",\"country\":\"United States\",\"state\":\"Colorado\",\"address_2\":\"Apt. 456\",\"address\":\"123 Elm St.\",\"reply_to\":{\"email\":\"replyto@example.com\",\"name\":\"Example INC\"},\"nickname\":\"My Sender ID\"}"); + request.setBody( + "{\"city\":\"Denver\",\"from\":{\"email\":\"from@example.com\",\"name\":\"Example INC\"},\"zip\":\"80202\",\"country\":\"United States\",\"state\":\"Colorado\",\"address_2\":\"Apt. 456\",\"address\":\"123 Elm St.\",\"reply_to\":{\"email\":\"replyto@example.com\",\"name\":\"Example INC\"},\"nickname\":\"My Sender ID\"}"); Response response = sg.api(request); Assert.assertEquals(200, response.getStatusCode()); } @@ -1985,7 +2002,8 @@ public void test_subusers_post() throws IOException { Request request = new Request(); request.setMethod(Method.POST); request.setEndpoint("subusers"); - request.setBody("{\"username\":\"John@example.com\",\"ips\":[\"1.1.1.1\",\"2.2.2.2\"],\"password\":\"johns_password\",\"email\":\"John@example.com\"}"); + request.setBody( + "{\"username\":\"John@example.com\",\"ips\":[\"1.1.1.1\",\"2.2.2.2\"],\"password\":\"johns_password\",\"email\":\"John@example.com\"}"); Response response = sg.api(request); Assert.assertEquals(200, response.getStatusCode()); } @@ -2217,7 +2235,8 @@ public void test_suppression_blocks_delete() throws IOException { Request request = new Request(); request.setMethod(Method.DELETE); request.setEndpoint("suppression/blocks"); - request.setBody("{\"emails\":[\"example1@example.com\",\"example2@example.com\"],\"delete_all\":false}"); + request.setBody( + "{\"emails\":[\"example1@example.com\",\"example2@example.com\"],\"delete_all\":false}"); Response response = sg.api(request); Assert.assertEquals(204, response.getStatusCode()); } @@ -2272,7 +2291,8 @@ public void test_suppression_bounces_delete() throws IOException { Request request = new Request(); request.setMethod(Method.DELETE); request.setEndpoint("suppression/bounces"); - request.setBody("{\"emails\":[\"example@example.com\",\"example2@example.com\"],\"delete_all\":true}"); + request.setBody( + "{\"emails\":[\"example@example.com\",\"example2@example.com\"],\"delete_all\":true}"); Response response = sg.api(request); Assert.assertEquals(204, response.getStatusCode()); } @@ -2330,7 +2350,8 @@ public void test_suppression_invalid_emails_delete() throws IOException { Request request = new Request(); request.setMethod(Method.DELETE); request.setEndpoint("suppression/invalid_emails"); - request.setBody("{\"emails\":[\"example1@example.com\",\"example2@example.com\"],\"delete_all\":false}"); + request.setBody( + "{\"emails\":[\"example1@example.com\",\"example2@example.com\"],\"delete_all\":false}"); Response response = sg.api(request); Assert.assertEquals(204, response.getStatusCode()); } @@ -2413,7 +2434,8 @@ public void test_suppression_spam_reports_delete() throws IOException { Request request = new Request(); request.setMethod(Method.DELETE); request.setEndpoint("suppression/spam_reports"); - request.setBody("{\"emails\":[\"example1@example.com\",\"example2@example.com\"],\"delete_all\":false}"); + request.setBody( + "{\"emails\":[\"example1@example.com\",\"example2@example.com\"],\"delete_all\":false}"); Response response = sg.api(request); Assert.assertEquals(204, response.getStatusCode()); } @@ -2511,7 +2533,8 @@ public void test_templates__template_id__versions_post() throws IOException { Request request = new Request(); request.setMethod(Method.POST); request.setEndpoint("templates/{template_id}/versions"); - request.setBody("{\"name\":\"example_version_name\",\"html_content\":\"<%body%>\",\"plain_content\":\"<%body%>\",\"active\":1,\"template_id\":\"ddb96bbc-9b92-425e-8979-99464621b543\",\"subject\":\"<%subject%>\"}"); + request.setBody( + "{\"name\":\"example_version_name\",\"html_content\":\"<%body%>\",\"plain_content\":\"<%body%>\",\"active\":1,\"template_id\":\"ddb96bbc-9b92-425e-8979-99464621b543\",\"subject\":\"<%subject%>\"}"); Response response = sg.api(request); Assert.assertEquals(201, response.getStatusCode()); } @@ -2525,7 +2548,8 @@ public void test_templates__template_id__versions__version_id__patch() throws IO Request request = new Request(); request.setMethod(Method.PATCH); request.setEndpoint("templates/{template_id}/versions/{version_id}"); - request.setBody("{\"active\":1,\"html_content\":\"<%body%>\",\"subject\":\"<%subject%>\",\"name\":\"updated_example_name\",\"plain_content\":\"<%body%>\"}"); + request.setBody( + "{\"active\":1,\"html_content\":\"<%body%>\",\"subject\":\"<%subject%>\",\"name\":\"updated_example_name\",\"plain_content\":\"<%body%>\"}"); Response response = sg.api(request); Assert.assertEquals(200, response.getStatusCode()); } @@ -2557,7 +2581,8 @@ public void test_templates__template_id__versions__version_id__delete() throws I } @Test - public void test_templates__template_id__versions__version_id__activate_post() throws IOException { + public void test_templates__template_id__versions__version_id__activate_post() + throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); sg.setHost("localhost:4010"); sg.addRequestHeader("X-Mock", "200"); @@ -2620,7 +2645,8 @@ public void test_tracking_settings_google_analytics_patch() throws IOException { Request request = new Request(); request.setMethod(Method.PATCH); request.setEndpoint("tracking_settings/google_analytics"); - request.setBody("{\"utm_campaign\":\"website\",\"utm_term\":\"\",\"utm_content\":\"\",\"enabled\":true,\"utm_source\":\"sendgrid.com\",\"utm_medium\":\"email\"}"); + request.setBody( + "{\"utm_campaign\":\"website\",\"utm_term\":\"\",\"utm_content\":\"\",\"enabled\":true,\"utm_source\":\"sendgrid.com\",\"utm_medium\":\"email\"}"); Response response = sg.api(request); Assert.assertEquals(200, response.getStatusCode()); } @@ -2674,7 +2700,8 @@ public void test_tracking_settings_subscription_patch() throws IOException { Request request = new Request(); request.setMethod(Method.PATCH); request.setEndpoint("tracking_settings/subscription"); - request.setBody("{\"url\":\"url\",\"html_content\":\"html content\",\"enabled\":true,\"landing\":\"landing page html\",\"replace\":\"replacement tag\",\"plain_content\":\"text content\"}"); + request.setBody( + "{\"url\":\"url\",\"html_content\":\"html content\",\"enabled\":true,\"landing\":\"landing page html\",\"replace\":\"replacement tag\",\"plain_content\":\"text content\"}"); Response response = sg.api(request); Assert.assertEquals(200, response.getStatusCode()); } @@ -2916,7 +2943,8 @@ public void test_user_webhooks_event_settings_patch() throws IOException { Request request = new Request(); request.setMethod(Method.PATCH); request.setEndpoint("user/webhooks/event/settings"); - request.setBody("{\"group_resubscribe\":true,\"delivered\":true,\"group_unsubscribe\":true,\"spam_report\":true,\"url\":\"url\",\"enabled\":true,\"bounce\":true,\"deferred\":true,\"unsubscribe\":true,\"dropped\":true,\"open\":true,\"click\":true,\"processed\":true}"); + request.setBody( + "{\"group_resubscribe\":true,\"delivered\":true,\"group_unsubscribe\":true,\"spam_report\":true,\"url\":\"url\",\"enabled\":true,\"bounce\":true,\"deferred\":true,\"unsubscribe\":true,\"dropped\":true,\"open\":true,\"click\":true,\"processed\":true}"); Response response = sg.api(request); Assert.assertEquals(200, response.getStatusCode()); } @@ -2957,7 +2985,8 @@ public void test_user_webhooks_parse_settings_post() throws IOException { Request request = new Request(); request.setMethod(Method.POST); request.setEndpoint("user/webhooks/parse/settings"); - request.setBody("{\"url\":\"http://email.myhosthame.com\",\"send_raw\":false,\"hostname\":\"myhostname.com\",\"spam_check\":true}"); + request.setBody( + "{\"url\":\"http://email.myhosthame.com\",\"send_raw\":false,\"hostname\":\"myhostname.com\",\"spam_check\":true}"); Response response = sg.api(request); Assert.assertEquals(201, response.getStatusCode()); } @@ -2984,7 +3013,8 @@ public void test_user_webhooks_parse_settings__hostname__patch() throws IOExcept Request request = new Request(); request.setMethod(Method.PATCH); request.setEndpoint("user/webhooks/parse/settings/{hostname}"); - request.setBody("{\"url\":\"http://newdomain.com/parse\",\"send_raw\":true,\"spam_check\":false}"); + request + .setBody("{\"url\":\"http://newdomain.com/parse\",\"send_raw\":true,\"spam_check\":false}"); Response response = sg.api(request); Assert.assertEquals(200, response.getStatusCode()); } @@ -3042,7 +3072,8 @@ public void test_whitelabel_domains_post() throws IOException { Request request = new Request(); request.setMethod(Method.POST); request.setEndpoint("whitelabel/domains"); - request.setBody("{\"automatic_security\":false,\"username\":\"john@example.com\",\"domain\":\"example.com\",\"default\":true,\"custom_spf\":true,\"ips\":[\"192.168.1.1\",\"192.168.1.2\"],\"subdomain\":\"news\"}"); + request.setBody( + "{\"automatic_security\":false,\"username\":\"john@example.com\",\"domain\":\"example.com\",\"default\":true,\"custom_spf\":true,\"ips\":[\"192.168.1.1\",\"192.168.1.2\"],\"subdomain\":\"news\"}"); Response response = sg.api(request); Assert.assertEquals(201, response.getStatusCode()); } @@ -3409,7 +3440,7 @@ public void test_whitelabel_links__link_id__subuser_post() throws IOException { @Test public void test_add_impersonate_subuser() { SendGrid sg = new SendGrid(SENDGRID_API_KEY); - + sg.addImpersonateSubuser("subusername"); Assert.assertEquals(sg.getRequestHeaders().get("on-behalf-of"), "subusername"); } @@ -3417,22 +3448,22 @@ public void test_add_impersonate_subuser() { @Test public void test_remove_impersonate_subuser() { SendGrid sg = new SendGrid(SENDGRID_API_KEY); - + sg.addImpersonateSubuser("subusername"); Assert.assertEquals(sg.getRequestHeaders().get("on-behalf-of"), "subusername"); sg.removeImpersonateSubuser(); Assert.assertEquals(sg.getRequestHeaders().get("on-behalf-of"), null); } - + @Test public void test_get_impersonate_subuser() { SendGrid sg = new SendGrid(SENDGRID_API_KEY); - + sg.addImpersonateSubuser("subusername"); Assert.assertEquals(sg.getImpersonateSubuser(), "subusername"); - + sg.removeImpersonateSubuser(); Assert.assertEquals(sg.getImpersonateSubuser(), null); - } + } } diff --git a/src/test/java/com/sendgrid/TestRequiredFilesExist.java b/src/test/java/com/sendgrid/TestRequiredFilesExist.java index bb5dd46c..62eda186 100644 --- a/src/test/java/com/sendgrid/TestRequiredFilesExist.java +++ b/src/test/java/com/sendgrid/TestRequiredFilesExist.java @@ -1,94 +1,108 @@ package com.sendgrid; -import org.junit.Test; +import static org.junit.Assert.assertTrue; import java.io.File; - -import static org.junit.Assert.assertTrue; +import org.junit.Test; public class TestRequiredFilesExist { - // ./Docker or docker/Docker - @Test public void checkDockerExists() { - boolean dockerExists = new File("./Dockerfile").exists() || + // ./Docker or docker/Docker + @Test + public void checkDockerExists() { + boolean dockerExists = new File("./Dockerfile").exists() || new File("./docker/Dockerfile").exists(); - assertTrue(dockerExists); - } - - // // ./docker-compose.yml or ./docker/docker-compose.yml - // @Test public void checkDockerComposeExists() { - // boolean dockerComposeExists = new File("./docker-compose.yml").exists() || - // new File("./docker/docker-compose.yml").exists(); - // assertTrue(dockerComposeExists); - // } - - // ./.env_sample - @Test public void checkEnvSampleExists() { - assertTrue(new File("./.env_sample").exists()); - } - - // ./.gitignore - @Test public void checkGitIgnoreExists() { - assertTrue(new File("./.gitignore").exists()); - } - - // ./.travis.yml - @Test public void checkTravisExists() { - assertTrue(new File("./.travis.yml").exists()); - } - - // ./.codeclimate.yml - @Test public void checkCodeClimateExists() { - assertTrue(new File("./.codeclimate.yml").exists()); - } - - // ./CHANGELOG.md - @Test public void checkChangelogExists() { - assertTrue(new File("./CHANGELOG.md").exists()); - } - - // ./CODE_OF_CONDUCT.md - @Test public void checkCodeOfConductExists() { - assertTrue(new File("./CODE_OF_CONDUCT.md").exists()); - } - - // ./CONTRIBUTING.md - @Test public void checkContributingGuideExists() { - assertTrue(new File("./CONTRIBUTING.md").exists()); - } - - // ./ISSUE_TEMPLATE.md - @Test public void checkIssuesTemplateExists() { - assertTrue(new File("./ISSUE_TEMPLATE.md").exists()); - } - - // ./LICENSE.md - @Test public void checkLicenseExists() { - assertTrue(new File("./LICENSE.md").exists()); - } - - // ./PULL_REQUEST_TEMPLATE.md - @Test public void checkPullRequestExists() { - assertTrue(new File("./PULL_REQUEST_TEMPLATE.md").exists()); - } - - // ./README.md - @Test public void checkReadMeExists() { - assertTrue(new File("./README.md").exists()); - } - - // ./TROUBLESHOOTING.md - @Test public void checkTroubleShootingGuideExists() { - assertTrue(new File("./TROUBLESHOOTING.md").exists()); - } - - // ./USAGE.md - @Test public void checkUsageGuideExists() { - assertTrue(new File("./USAGE.md").exists()); - } - - // ./USE_CASES.md - @Test public void checkUseCases() { - assertTrue(new File("./USE_CASES.md").exists()); - } + assertTrue(dockerExists); + } + + // // ./docker-compose.yml or ./docker/docker-compose.yml + // @Test public void checkDockerComposeExists() { + // boolean dockerComposeExists = new File("./docker-compose.yml").exists() || + // new File("./docker/docker-compose.yml").exists(); + // assertTrue(dockerComposeExists); + // } + + // ./.env_sample + @Test + public void checkEnvSampleExists() { + assertTrue(new File("./.env_sample").exists()); + } + + // ./.gitignore + @Test + public void checkGitIgnoreExists() { + assertTrue(new File("./.gitignore").exists()); + } + + // ./.travis.yml + @Test + public void checkTravisExists() { + assertTrue(new File("./.travis.yml").exists()); + } + + // ./.codeclimate.yml + @Test + public void checkCodeClimateExists() { + assertTrue(new File("./.codeclimate.yml").exists()); + } + + // ./CHANGELOG.md + @Test + public void checkChangelogExists() { + assertTrue(new File("./CHANGELOG.md").exists()); + } + + // ./CODE_OF_CONDUCT.md + @Test + public void checkCodeOfConductExists() { + assertTrue(new File("./CODE_OF_CONDUCT.md").exists()); + } + + // ./CONTRIBUTING.md + @Test + public void checkContributingGuideExists() { + assertTrue(new File("./CONTRIBUTING.md").exists()); + } + + // ./ISSUE_TEMPLATE.md + @Test + public void checkIssuesTemplateExists() { + assertTrue(new File("./ISSUE_TEMPLATE.md").exists()); + } + + // ./LICENSE.md + @Test + public void checkLicenseExists() { + assertTrue(new File("./LICENSE.md").exists()); + } + + // ./PULL_REQUEST_TEMPLATE.md + @Test + public void checkPullRequestExists() { + assertTrue(new File("./PULL_REQUEST_TEMPLATE.md").exists()); + } + + // ./README.md + @Test + public void checkReadMeExists() { + assertTrue(new File("./README.md").exists()); + } + + // ./TROUBLESHOOTING.md + @Test + public void checkTroubleShootingGuideExists() { + assertTrue(new File("./TROUBLESHOOTING.md").exists()); + } + + // ./USAGE.md + @Test + public void checkUsageGuideExists() { + assertTrue(new File("./USAGE.md").exists()); + } + + // ./USE_CASES.md + @Test + public void checkUseCases() { + assertTrue(new File("./USE_CASES.md").exists()); + } } From 3712a8fb9fe7cc10ee31a7a0cd0abb77a29a5d7e Mon Sep 17 00:00:00 2001 From: childish-sambino Date: Mon, 24 Feb 2020 10:40:49 -0600 Subject: [PATCH 169/345] chore: fix JDK Travis failures (#610) --- .travis.yml | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/.travis.yml b/.travis.yml index 8e697df3..60f39a58 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,23 +1,23 @@ language: java before_install: - - echo $GPG_SECRET_KEYS | base64 --decode | $GPG_EXECUTABLE --import || true + - echo $GPG_SECRET_KEYS | base64 --decode | $GPG_EXECUTABLE --import --batch || true matrix: include: - - name: 'OpenJDK 7' - jdk: openjdk7 - - name: 'OpenJDK 8' - jdk: openjdk8 - - name: 'Oracle JDK 7' - jdk: oraclejdk7 - - name: 'Oracle JDK 8' - jdk: oraclejdk8 - - name: 'OpenJDK 11' - jdk: openjdk11 + - jdk: openjdk7 + dist: trusty + - jdk: openjdk8 + dist: xenial + - jdk: openjdk11 + dist: xenial + - jdk: oraclejdk7 + dist: precise + - jdk: oraclejdk8 + dist: trusty + - jdk: oraclejdk11 + dist: trusty allow_failures: - - name: 'Oracle JDK 8' # See https://travis-ci.community/t/expected-feature-release-number-in-range-of-9-to-12-but-got-8-installing-oraclejdk8/1345/14 - - name: 'OpenJDK 7' - - name: 'Oracle JDK 7' - - name: 'OpenJDK 11' + - jdk: openjdk7 + - jdk: oraclejdk7 before_script: - "./scripts/startPrism.sh &" - sleep 20 From d274ed2cad9db4ca8387aba1d2669e1929af7e18 Mon Sep 17 00:00:00 2001 From: Twilio Date: Wed, 18 Mar 2020 19:00:25 +0000 Subject: [PATCH 170/345] [Librarian] Version Bump --- CHANGELOG.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 51d5926e..c9ccea9f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,15 @@ # Change Log All notable changes to this project will be documented in this file. +[2020-03-18] Version 4.4.6 +-------------------------- +**Library - Docs** +- [PR #264](https://github.com/sendgrid/sendgrid-java/pull/264): Overhaul javadocs, using Oracle's styleguide. Thanks to [@jamierocks](https://github.com/jamierocks)! + +**Library - Chore** +- [PR #610](https://github.com/sendgrid/sendgrid-java/pull/610): fix JDK Travis failures. Thanks to [@childish-sambino](https://github.com/childish-sambino)! + + [2020-02-19] Version 4.4.5 -------------------------- **Library - Docs** From d84a9dde1cd1f45a2e8f8a0b0de87cbe0c113af4 Mon Sep 17 00:00:00 2001 From: Twilio Date: Wed, 18 Mar 2020 19:31:08 +0000 Subject: [PATCH 171/345] Release 4.4.6 --- CONTRIBUTING.md | 2 +- README.md | 4 ++-- pom.xml | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index bf38a9d1..fe93aed2 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -101,7 +101,7 @@ touch Example.java Add the example you want to test to Example.java, including the headers at the top of the file. ``` bash -javac -classpath ../repo/com/sendgrid/4.4.5/sendgrid-4.4.5-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.4.5/sendgrid-4.4.5-jar.jar:. Example +javac -classpath ../repo/com/sendgrid/4.4.6/sendgrid-4.4.6-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.4.6/sendgrid-4.4.6-jar.jar:. Example ``` diff --git a/README.md b/README.md index 8ccf389a..1b19bb63 100644 --- a/README.md +++ b/README.md @@ -67,7 +67,7 @@ Add the following to your build.gradle file in the root of your project. ... dependencies { ... - implementation 'com.sendgrid:sendgrid-java:4.4.5' + implementation 'com.sendgrid:sendgrid-java:4.4.6' } repositories { @@ -86,7 +86,7 @@ mvn install You can just drop the jar file in. It's a fat jar - it has all the dependencies built in. -[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/v4.4.5/sendgrid-java.jar) +[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/v4.4.6/sendgrid-java.jar) ## Dependencies diff --git a/pom.xml b/pom.xml index 84dd9b68..7083e094 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ com.sendgrid sendgrid-java Twilio SendGrid Java helper library - 4.4.5 + 4.4.6 This Java module allows you to quickly and easily send emails through Twilio SendGrid using Java. https://github.com/sendgrid/sendgrid-java @@ -26,7 +26,7 @@ https://github.com/sendgrid/sendgrid-java scm:git:git@github.com:sendgrid/sendgrid-java.git scm:git:git@github.com:sendgrid/sendgrid-java.git - 4.4.5 + 4.4.6
From b476d4ce62eec9bc7164da98a14c3ee00c0fb2d0 Mon Sep 17 00:00:00 2001 From: childish-sambino Date: Wed, 18 Mar 2020 17:23:05 -0500 Subject: [PATCH 172/345] fix: correct the serialization of Setting to include non-null values (#612) --- .../java/com/sendgrid/helpers/mail/objects/Setting.java | 4 ++-- .../helpers/mail/objects/SettingsSerializationTest.java | 9 +++++++++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/Setting.java b/src/main/java/com/sendgrid/helpers/mail/objects/Setting.java index 45bef3bb..fd21bcb5 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/Setting.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/Setting.java @@ -4,7 +4,7 @@ import com.fasterxml.jackson.annotation.JsonInclude.Include; import com.fasterxml.jackson.annotation.JsonProperty; -@JsonInclude(Include.NON_DEFAULT) +@JsonInclude(Include.NON_NULL) public class Setting { @JsonProperty("enable") private boolean enable; @@ -38,4 +38,4 @@ public boolean equals(Object obj) { return false; return true; } -} \ No newline at end of file +} diff --git a/src/test/java/com/sendgrid/helpers/mail/objects/SettingsSerializationTest.java b/src/test/java/com/sendgrid/helpers/mail/objects/SettingsSerializationTest.java index 27878162..2f7d47c2 100644 --- a/src/test/java/com/sendgrid/helpers/mail/objects/SettingsSerializationTest.java +++ b/src/test/java/com/sendgrid/helpers/mail/objects/SettingsSerializationTest.java @@ -15,6 +15,15 @@ public class SettingsSerializationTest { private ObjectMapper mapper = new ObjectMapper(); + @Test + public void testSettingSerialization() throws Exception { + Setting setting = new Setting(); + setting.setEnable(false); + + String json = mapper.writeValueAsString(setting); + Assert.assertEquals(json, "{\"enable\":false}"); + } + @Test public void testOpenTrackingSettingSerialization() throws Exception { OpenTrackingSetting setting = new OpenTrackingSetting(); From 5741ac8fd9cada32227ddd1e5c39e1e10ce4d021 Mon Sep 17 00:00:00 2001 From: Elise Shanholtz Date: Wed, 25 Mar 2020 15:55:34 -0700 Subject: [PATCH 173/345] docs: fix link to jar file (#615) --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 1b19bb63..fbc6943a 100644 --- a/README.md +++ b/README.md @@ -86,7 +86,7 @@ mvn install You can just drop the jar file in. It's a fat jar - it has all the dependencies built in. -[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/v4.4.6/sendgrid-java.jar) +[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.4.6/sendgrid-java.jar) ## Dependencies From 76f5328f2448c21ceb841bcf15dde4e0ac0188db Mon Sep 17 00:00:00 2001 From: Adam Date: Tue, 31 Mar 2020 10:08:11 -0500 Subject: [PATCH 174/345] docs: support verbiage for login issues (#617) Added support verbiage for login issues due to several recent github issues being opened. --- TROUBLESHOOTING.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/TROUBLESHOOTING.md b/TROUBLESHOOTING.md index 452d5c59..ed1090d1 100644 --- a/TROUBLESHOOTING.md +++ b/TROUBLESHOOTING.md @@ -1,3 +1,5 @@ +If you have an issue logging into your Twilio SendGrid account, please read this [document](https://sendgrid.com/docs/ui/account-and-settings/troubleshooting-login/). For any questions regarding login issues, please contact our [support team](https://support.sendgrid.com). + If you have a non-library SendGrid issue, please contact our [support team](https://support.sendgrid.com). If you can't find a solution below, please open an [issue](https://github.com/sendgrid/sendgrid-java/issues). From 86a727d317ea15ee9799a42478392f344781af11 Mon Sep 17 00:00:00 2001 From: Twilio Date: Wed, 1 Apr 2020 19:04:48 +0000 Subject: [PATCH 175/345] [Librarian] Version Bump --- CHANGELOG.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index c9ccea9f..aca526c8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,16 @@ # Change Log All notable changes to this project will be documented in this file. +[2020-04-01] Version 4.4.7 +-------------------------- +**Library - Docs** +- [PR #617](https://github.com/sendgrid/sendgrid-java/pull/617): support verbiage for login issues. Thanks to [@adamchasetaylor](https://github.com/adamchasetaylor)! +- [PR #615](https://github.com/sendgrid/sendgrid-java/pull/615): fix link to jar file. Thanks to [@eshanholtz](https://github.com/eshanholtz)! + +**Library - Fix** +- [PR #612](https://github.com/sendgrid/sendgrid-java/pull/612): correct the serialization of Setting to include non-null values. Thanks to [@childish-sambino](https://github.com/childish-sambino)! + + [2020-03-18] Version 4.4.6 -------------------------- **Library - Docs** From 9a2aacb8193b309f5ebd55770c47bd46e351e4cc Mon Sep 17 00:00:00 2001 From: Twilio Date: Wed, 1 Apr 2020 19:39:10 +0000 Subject: [PATCH 176/345] Release 4.4.7 --- CONTRIBUTING.md | 2 +- README.md | 6 +++--- pom.xml | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index fe93aed2..8717c9f8 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -101,7 +101,7 @@ touch Example.java Add the example you want to test to Example.java, including the headers at the top of the file. ``` bash -javac -classpath ../repo/com/sendgrid/4.4.6/sendgrid-4.4.6-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.4.6/sendgrid-4.4.6-jar.jar:. Example +javac -classpath ../repo/com/sendgrid/4.4.7/sendgrid-4.4.7-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.4.7/sendgrid-4.4.7-jar.jar:. Example ``` diff --git a/README.md b/README.md index fbc6943a..c7a65489 100644 --- a/README.md +++ b/README.md @@ -39,7 +39,7 @@ We appreciate your continued support, thank you! ## Prerequisites - Java version Oracle JDK 7, 8 or OpenJDK 7 -- The Twilio SendGrid service, starting at the [free level](https://sendgrid.com/free?source=sendgrid-java) to send up to 40,000 emails for the first 30 days, then send 100 emails/day free forever or check out [our pricing](https://sendgrid.com/pricing?source=sendgrid-java). +- The Twilio SendGrid service, starting at the [free level](https://sendgrid.com/free?source=sendgrid-java) to send up to 4.4.7 emails for the first 30 days, then send 100 emails/day free forever or check out [our pricing](https://sendgrid.com/pricing?source=sendgrid-java). ## Setup Environment Variables @@ -67,7 +67,7 @@ Add the following to your build.gradle file in the root of your project. ... dependencies { ... - implementation 'com.sendgrid:sendgrid-java:4.4.6' + implementation 'com.sendgrid:sendgrid-java:4.4.7' } repositories { @@ -86,7 +86,7 @@ mvn install You can just drop the jar file in. It's a fat jar - it has all the dependencies built in. -[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.4.6/sendgrid-java.jar) +[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.4.7/sendgrid-java.jar) ## Dependencies diff --git a/pom.xml b/pom.xml index 7083e094..ca133ec4 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ com.sendgrid sendgrid-java Twilio SendGrid Java helper library - 4.4.6 + 4.4.7 This Java module allows you to quickly and easily send emails through Twilio SendGrid using Java. https://github.com/sendgrid/sendgrid-java @@ -26,7 +26,7 @@ https://github.com/sendgrid/sendgrid-java scm:git:git@github.com:sendgrid/sendgrid-java.git scm:git:git@github.com:sendgrid/sendgrid-java.git - 4.4.6 + 4.4.7
From 46192aa1729cd431d0d96f180fdf50084ae130c4 Mon Sep 17 00:00:00 2001 From: childish-sambino Date: Fri, 3 Apr 2020 13:51:20 -0500 Subject: [PATCH 177/345] fix: correct the User-Agent casing (#618) --- src/main/java/com/sendgrid/SendGrid.java | 6 +++--- src/test/java/com/sendgrid/SendGridTest.java | 12 ++++++------ 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/sendgrid/SendGrid.java b/src/main/java/com/sendgrid/SendGrid.java index 3c27b313..e746bcfd 100644 --- a/src/main/java/com/sendgrid/SendGrid.java +++ b/src/main/java/com/sendgrid/SendGrid.java @@ -79,7 +79,7 @@ public void initializeSendGrid(String apiKey) { this.version = "v3"; this.requestHeaders = new HashMap(); this.requestHeaders.put("Authorization", "Bearer " + apiKey); - this.requestHeaders.put("User-agent", USER_AGENT); + this.requestHeaders.put("User-Agent", USER_AGENT); this.requestHeaders.put("Accept", "application/json"); this.rateLimitRetry = 5; this.rateLimitSleep = 1100; @@ -157,7 +157,7 @@ public void setHost(String host) { } /** - * Get the maximum number of retries on a rate limit response. + * Get the maximum number of retries on a rate limit response. * The default is 5. * @return the number of retries on a rate limit. */ @@ -214,7 +214,7 @@ public void removeImpersonateSubuser() { * @return the impersonated subuser */ public String getImpersonateSubuser() { - return this.subuser; + return this.subuser; } /** diff --git a/src/test/java/com/sendgrid/SendGridTest.java b/src/test/java/com/sendgrid/SendGridTest.java index 1873be71..92c0b4a2 100644 --- a/src/test/java/com/sendgrid/SendGridTest.java +++ b/src/test/java/com/sendgrid/SendGridTest.java @@ -17,7 +17,7 @@ public Map buildDefaultHeaders() { Map requestHeaders = new HashMap(); requestHeaders.put("Authorization", "Bearer " + SENDGRID_API_KEY); String USER_AGENT = "sendgrid/" + sg.getLibraryVersion() + ";java"; - requestHeaders.put("User-agent", USER_AGENT); + requestHeaders.put("User-Agent", USER_AGENT); requestHeaders.put("Accept", "application/json"); return requestHeaders; } @@ -3409,7 +3409,7 @@ public void test_whitelabel_links__link_id__subuser_post() throws IOException { @Test public void test_add_impersonate_subuser() { SendGrid sg = new SendGrid(SENDGRID_API_KEY); - + sg.addImpersonateSubuser("subusername"); Assert.assertEquals(sg.getRequestHeaders().get("on-behalf-of"), "subusername"); } @@ -3417,21 +3417,21 @@ public void test_add_impersonate_subuser() { @Test public void test_remove_impersonate_subuser() { SendGrid sg = new SendGrid(SENDGRID_API_KEY); - + sg.addImpersonateSubuser("subusername"); Assert.assertEquals(sg.getRequestHeaders().get("on-behalf-of"), "subusername"); sg.removeImpersonateSubuser(); Assert.assertEquals(sg.getRequestHeaders().get("on-behalf-of"), null); } - + @Test public void test_get_impersonate_subuser() { SendGrid sg = new SendGrid(SENDGRID_API_KEY); - + sg.addImpersonateSubuser("subusername"); Assert.assertEquals(sg.getImpersonateSubuser(), "subusername"); - + sg.removeImpersonateSubuser(); Assert.assertEquals(sg.getImpersonateSubuser(), null); } From 9c456d105d48868efad2698f847ed2d63fd3cbea Mon Sep 17 00:00:00 2001 From: Sam Harrison Date: Fri, 3 Apr 2020 15:27:48 -0500 Subject: [PATCH 178/345] chore: update Travis CI Slack notifications --- .travis.yml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/.travis.yml b/.travis.yml index 60f39a58..09ee97fb 100644 --- a/.travis.yml +++ b/.travis.yml @@ -31,3 +31,11 @@ deploy: tags: true jdk: openjdk8 branch: master + +notifications: + slack: + if: branch = master + on_success: never + on_failure: change + rooms: + - secure: q2SEemDXFLu/2G2I7oD02+YsM5Q0G27j+b4P1BcReWqVHhRz9L+iyuYWhIXJ6hW0omL5V2XrZ65uqb4f/SD7b89oXRGToVxfykrBzcas1tqIIp9lldd1u2eMc59zALX4nkTlE0T4UFLwEvoeY8aXoD/dNytSy6M2F5c2nYcmoN0= From d098bfb8f1dc531440512797079045670a7d58ec Mon Sep 17 00:00:00 2001 From: childish-sambino Date: Mon, 6 Apr 2020 11:09:16 -0500 Subject: [PATCH 179/345] Update .travis.yml --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index 09ee97fb..db96dad8 100644 --- a/.travis.yml +++ b/.travis.yml @@ -35,6 +35,7 @@ deploy: notifications: slack: if: branch = master + on_pull_requests: false on_success: never on_failure: change rooms: From 22944b7c0a1b5e15533acad8abc2764b239facf8 Mon Sep 17 00:00:00 2001 From: Sam Harrison Date: Wed, 8 Apr 2020 16:17:09 -0500 Subject: [PATCH 180/345] docs: cleanup support/help/contact information --- CONTRIBUTING.md | 2 -- README.md | 6 +++--- docker/README.md | 6 ------ docker/USAGE.md | 7 ------- pom.xml | 4 ++-- 5 files changed, 5 insertions(+), 20 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 8717c9f8..189c719f 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -216,5 +216,3 @@ Please run your code through: ## Code Reviews If you can, please look at open PRs and review them. Give feedback and help us merge these PRs much faster! If you don't know how, GitHub has some great information on how to review a Pull Request. - -If you have any additional questions, please feel free to [email](mailto:dx@sendgrid.com) us or create an issue in this repo. diff --git a/README.md b/README.md index c7a65489..d3f1c22c 100644 --- a/README.md +++ b/README.md @@ -229,11 +229,11 @@ Please see our [troubleshooting guide](https://github.com/sendgrid/sendgrid-java # About -sendgrid-java is guided and supported by the Twilio Developer Experience Team. +sendgrid-java is maintained and funded by Twilio SendGrid, Inc. The names and logos for sendgrid-java are trademarks of Twilio SendGrid, Inc. -Please email the Developer Experience Team [here](mailto:dx@sendgrid.com) in case of any queries. +If you need help installing or using the library, please check the [Twilio SendGrid Support Help Center](https://support.sendgrid.com). -sendgrid-java is maintained and funded by Twilio SendGrid, Inc. The names and logos for sendgrid-java are trademarks of Twilio SendGrid, Inc. +If you've instead found a bug in the library or would like new features added, go ahead and open issues or pull requests against this repo! # License diff --git a/docker/README.md b/docker/README.md index db653dd1..dccc98cf 100644 --- a/docker/README.md +++ b/docker/README.md @@ -28,10 +28,4 @@ Due to Oracle's JDK license, you must build this Docker image using the official For more detailed information, see [USAGE.md](https://github.com/sendgrid/sendgrid-java/blob/master/docker/USAGE.md). -# About - -sendgrid-java is guided and supported by the Twilio Developer Experience Team. - -sendgrid-java is maintained and funded by Twilio SendGrid, Inc. The names and logos for sendgrid-java are trademarks of SendGrid, Inc. - ![SendGrid Logo](https://github.com/sendgrid/sendgrid-python/raw/master/twilio_sendgrid_logo.png) diff --git a/docker/USAGE.md b/docker/USAGE.md index fe894b24..dab8ed36 100644 --- a/docker/USAGE.md +++ b/docker/USAGE.md @@ -28,12 +28,5 @@ Testing is easy! 2. `cd sendgrid-java` 3. run `./gradlew test` - -# About - -sendgrid-java is guided and supported by the Twilio SendGrid [Developer Experience Team](mailto:dx@sendgrid.com). - -sendgrid-java is maintained and funded by Twilio SendGrid, Inc. The names and logos for sendgrid-java are trademarks of Twilio SendGrid, Inc. - ![SendGrid Logo](https://github.com/sendgrid/sendgrid-python/raw/master/twilio_sendgrid_logo.png) diff --git a/pom.xml b/pom.xml index ca133ec4..a132c77c 100644 --- a/pom.xml +++ b/pom.xml @@ -265,7 +265,7 @@ thinkingserious Elmer Thomas - dx@sendgrid.com + ethomas@twilio.com https://sendgrid.com @@ -304,4 +304,4 @@ test - \ No newline at end of file + From 8cc09c56aad10da84d79c858e584035bda491b83 Mon Sep 17 00:00:00 2001 From: Twilio Date: Wed, 15 Apr 2020 19:16:06 +0000 Subject: [PATCH 181/345] [Librarian] Version Bump --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index aca526c8..2dc16ffc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,12 @@ # Change Log All notable changes to this project will be documented in this file. +[2020-04-15] Version 4.4.8 +-------------------------- +**Library - Fix** +- [PR #618](https://github.com/sendgrid/sendgrid-java/pull/618): correct the User-Agent casing. Thanks to [@childish-sambino](https://github.com/childish-sambino)! + + [2020-04-01] Version 4.4.7 -------------------------- **Library - Docs** From 2bd232a7d3ce5652dae13b3d5bcc0b02cd77f248 Mon Sep 17 00:00:00 2001 From: Twilio Date: Wed, 15 Apr 2020 19:27:47 +0000 Subject: [PATCH 182/345] Release 4.4.8 --- CONTRIBUTING.md | 2 +- README.md | 6 +++--- pom.xml | 6 +++--- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 189c719f..7b6b97a3 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -101,7 +101,7 @@ touch Example.java Add the example you want to test to Example.java, including the headers at the top of the file. ``` bash -javac -classpath ../repo/com/sendgrid/4.4.7/sendgrid-4.4.7-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.4.7/sendgrid-4.4.7-jar.jar:. Example +javac -classpath ../repo/com/sendgrid/4.4.8/sendgrid-4.4.8-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.4.8/sendgrid-4.4.8-jar.jar:. Example ``` diff --git a/README.md b/README.md index d3f1c22c..d5d5e5ff 100644 --- a/README.md +++ b/README.md @@ -39,7 +39,7 @@ We appreciate your continued support, thank you! ## Prerequisites - Java version Oracle JDK 7, 8 or OpenJDK 7 -- The Twilio SendGrid service, starting at the [free level](https://sendgrid.com/free?source=sendgrid-java) to send up to 4.4.7 emails for the first 30 days, then send 100 emails/day free forever or check out [our pricing](https://sendgrid.com/pricing?source=sendgrid-java). +- The Twilio SendGrid service, starting at the [free level](https://sendgrid.com/free?source=sendgrid-java) to send up to 4.4.8 emails for the first 30 days, then send 100 emails/day free forever or check out [our pricing](https://sendgrid.com/pricing?source=sendgrid-java). ## Setup Environment Variables @@ -67,7 +67,7 @@ Add the following to your build.gradle file in the root of your project. ... dependencies { ... - implementation 'com.sendgrid:sendgrid-java:4.4.7' + implementation 'com.sendgrid:sendgrid-java:4.4.8' } repositories { @@ -86,7 +86,7 @@ mvn install You can just drop the jar file in. It's a fat jar - it has all the dependencies built in. -[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.4.7/sendgrid-java.jar) +[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.4.8/sendgrid-java.jar) ## Dependencies diff --git a/pom.xml b/pom.xml index a132c77c..3463b417 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ com.sendgrid sendgrid-java Twilio SendGrid Java helper library - 4.4.7 + 4.4.8 This Java module allows you to quickly and easily send emails through Twilio SendGrid using Java. https://github.com/sendgrid/sendgrid-java @@ -26,7 +26,7 @@ https://github.com/sendgrid/sendgrid-java scm:git:git@github.com:sendgrid/sendgrid-java.git scm:git:git@github.com:sendgrid/sendgrid-java.git - 4.4.7 + 4.4.8 @@ -304,4 +304,4 @@ test - + \ No newline at end of file From 180d408519c626a7fbaf9b1816161c653e96b877 Mon Sep 17 00:00:00 2001 From: childish-sambino Date: Tue, 5 May 2020 19:56:52 -0500 Subject: [PATCH 183/345] feat: add support for Twilio Email (#621) --- USE_CASES.md | 83 +++-- src/main/java/com/sendgrid/BaseInterface.java | 343 ++++++++++++++++++ src/main/java/com/sendgrid/SendGrid.java | 296 +-------------- src/main/java/com/sendgrid/SendGridAPI.java | 91 ++--- src/main/java/com/sendgrid/TwilioEmail.java | 50 +++ .../java/com/sendgrid/TwilioEmailTest.java | 29 ++ 6 files changed, 530 insertions(+), 362 deletions(-) create mode 100644 src/main/java/com/sendgrid/BaseInterface.java create mode 100644 src/main/java/com/sendgrid/TwilioEmail.java create mode 100644 src/test/java/com/sendgrid/TwilioEmailTest.java diff --git a/USE_CASES.md b/USE_CASES.md index a77c941e..520825d6 100644 --- a/USE_CASES.md +++ b/USE_CASES.md @@ -5,8 +5,9 @@ This documentation provides examples for specific use cases. Please [open an iss * [Transactional Templates](#transactional-templates) * [Legacy Templates](#legacy-templates) * [How to Setup a Domain Authentication](#domain-authentication) -* [How to View Email Statistics](#email-stats) -* [Send a SMS Message](#sms) +* [How to View Email Statistics](#how-to-view-email-statistics) +* [Send an Email With Twilio Email (Pilot)](#send-an-email-with-twilio-email-pilot) +* [Send an SMS Message](#send-an-sms-message) # Transactional Templates @@ -225,84 +226,92 @@ You can find documentation for how to setup a domain authentication via the UI [ Find more information about all of Twilio SendGrid's authentication related documentation [here](https://sendgrid.com/docs/ui/account-and-settings/). - # How to View Email Statistics You can find documentation for how to view your email statistics via the UI [here](https://app.sendgrid.com/statistics) and via API [here](https://github.com/sendgrid/sendgrid-java/blob/master/USAGE.md#stats). Alternatively, we can post events to a URL of your choice via our [Event Webhook](https://sendgrid.com/docs/API_Reference/Webhooks/event.html) about events that occur as Twilio SendGrid processes your email. - -# Send a SMS Message +# Send an Email With Twilio Email (Pilot) -Following are the steps to add Twilio SMS to your app: - -## 1. Obtain a Free Twilio Account +### 1. Obtain a Free Twilio Account Sign up for a free Twilio account [here](https://www.twilio.com/try-twilio?source=sendgrid-java). -## 2. Update Your Environment Variables +### 2. Set Up Your Environment Variables + +The Twilio API allows for authentication using with either an API key/secret or your Account SID/Auth Token. You can create an API key [here](https://twil.io/get-api-key) or obtain your Account SID and Auth Token [here](https://twil.io/console). -You can obtain your Account Sid and Auth Token from [twilio.com/console](https://twilio.com/console). +Once you have those, follow the steps below based on your operating system. -### Mac +#### Linux/Mac ```bash +echo "export TWILIO_API_KEY='YOUR_TWILIO_API_KEY'" > twilio.env +echo "export TWILIO_API_SECRET='YOUR_TWILIO_API_SECRET'" >> twilio.env + +# or + echo "export TWILIO_ACCOUNT_SID='YOUR_TWILIO_ACCOUNT_SID'" > twilio.env echo "export TWILIO_AUTH_TOKEN='YOUR_TWILIO_AUTH_TOKEN'" >> twilio.env +``` + +Then: + +```bash echo "twilio.env" >> .gitignore source ./twilio.env ``` -### Windows +#### Windows Temporarily set the environment variable (accessible only during the current CLI session): ```bash +set TWILIO_API_KEY=YOUR_TWILIO_API_KEY +set TWILIO_API_SECRET=YOUR_TWILIO_API_SECRET + +: or + set TWILIO_ACCOUNT_SID=YOUR_TWILIO_ACCOUNT_SID set TWILIO_AUTH_TOKEN=YOUR_TWILIO_AUTH_TOKEN ``` -Permanently set the environment variable (accessible in all subsequent CLI sessions): +Or permanently set the environment variable (accessible in all subsequent CLI sessions): ```bash +setx TWILIO_API_KEY "YOUR_TWILIO_API_KEY" +setx TWILIO_API_SECRET "YOUR_TWILIO_API_SECRET" + +: or + setx TWILIO_ACCOUNT_SID "YOUR_TWILIO_ACCOUNT_SID" setx TWILIO_AUTH_TOKEN "YOUR_TWILIO_AUTH_TOKEN" ``` -## 3. Install the Twilio Helper Library +### 3. Initialize the Twilio Email Client -`twilio-java` uses Maven. At present the jars *are* available from a public [maven](http://mvnrepository.com/artifact/com.twilio.sdk/twilio) repository. +```java +TwilioEmail mailClient = new TwilioEmail(System.getenv("TWILIO_API_KEY"), System.getenv("TWILIO_API_SECRET")); -Use the following dependency in your project to grab via Maven: +// or -```xml - - com.twilio.sdk - twilio - 7.X.X - compile - +TwilioEmail mailClient = new TwilioEmail(System.getenv("TWILIO_ACCOUNT_SID"), System.getenv("TWILIO_AUTH_TOKEN")); ``` -or Gradle: -```groovy -compile "com.twilio.sdk:twilio:7.X.X" -```` +This client has the same interface as the `SendGrid` client. -If you want to compile it yourself, here is how: +# Send an SMS Message -```bash -$ git clone git@github.com:twilio/twilio-java -$ cd twilio-java -$ mvn install # Requires maven, download from http://maven.apache.org/download.html -``` +First, follow the above steps for creating a Twilio account and setting up environment variables with the proper credentials. + +Then, install the Twilio Helper Library by following the [installation steps](https://github.com/twilio/twilio-java#installation). -Then, you can execute the following code. +Finally, send a message. ```java -String accountSid = Environment.GetEnvironmentVariable("TWILIO_ACCOUNT_SID"); -String authToken = Environment.GetEnvironmentVariable("TWILIO_AUTH_TOKEN"); +String accountSid = System.getenv("TWILIO_ACCOUNT_SID"); +String authToken = System.getenv("TWILIO_AUTH_TOKEN"); Twilio.init(accountSid, authToken); @@ -315,4 +324,4 @@ Message message = Message.creator( System.out.println(message.getSid()); ``` -For more information, please visit the [Twilio SMS Java documentation](https://www.twilio.com/docs/sms/quickstart/java). \ No newline at end of file +For more information, please visit the [Twilio SMS Java documentation](https://www.twilio.com/docs/sms/quickstart/java). diff --git a/src/main/java/com/sendgrid/BaseInterface.java b/src/main/java/com/sendgrid/BaseInterface.java new file mode 100644 index 00000000..0b87b528 --- /dev/null +++ b/src/main/java/com/sendgrid/BaseInterface.java @@ -0,0 +1,343 @@ +package com.sendgrid; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; + +/** + * This class is the base interface to the Twilio SendGrid Web API. + */ +public abstract class BaseInterface implements SendGridAPI { + + private static final String VERSION = "3.0.0"; + + private static final String USER_AGENT = "sendgrid/" + VERSION + ";java"; + private static final int RATE_LIMIT_RESPONSE_CODE = 429; + private static final int THREAD_POOL_SIZE = 8; + + private ExecutorService pool; + + /** + * The host to which to connect. + */ + private String host; + + /** + * The API version. + */ + private String version; + + /** + * The HTTP client. + */ + private Client client; + + /** + * The request headers container. + */ + private Map requestHeaders; + + /** + * The number of times to try after a rate limit. + */ + private int rateLimitRetry; + + /** + * The number of milliseconds to sleep between retries. + */ + private int rateLimitSleep; + + /** + * The subuser to be impersonated. + */ + private String subuser; + + /** + * Construct a new API wrapper. + */ + public BaseInterface() { + this.client = new Client(); + } + + /** + * Construct a new API wrapper. + * + * @param test is true if you are unit testing + */ + public BaseInterface(final Boolean test) { + this.client = new Client(test); + } + + /** + * Construct a new API wrapper. + * + * @param client the Client to use (allows to customize its configuration) + */ + public BaseInterface(final Client client) { + this.client = client; + } + + /** + * Initialize the client. + * + * @param auth authorization header value + * @param host the base URL for the API + */ + public void initialize(final String auth, final String host) { + this.host = host; + this.version = "v3"; + this.requestHeaders = new HashMap<>(); + this.requestHeaders.put("Authorization", auth); + this.requestHeaders.put("User-Agent", USER_AGENT); + this.requestHeaders.put("Accept", "application/json"); + this.rateLimitRetry = 5; + this.rateLimitSleep = 1100; + + this.pool = Executors.newFixedThreadPool(THREAD_POOL_SIZE); + } + + /** + * Get the current library version. + * + * @return the current version + */ + public String getLibraryVersion() { + return VERSION; + } + + /** + * Get the API version. + * + * @return the current API version + */ + public String getVersion() { + return this.version; + } + + /** + * Set the API version. + * + * @param version the new version + */ + public void setVersion(final String version) { + this.version = version; + } + + /** + * Get the request headers. + * + * @return the request headers + */ + public Map getRequestHeaders() { + return this.requestHeaders; + } + + /** + * Add/update a request header. + * + * @param key the header key + * @param value the header value + * @return the new set of request headers + */ + public Map addRequestHeader(final String key, final String value) { + this.requestHeaders.put(key, value); + return getRequestHeaders(); + } + + /** + * Remove a request header. + * + * @param key the header key to remove + * @return the new set of request headers + */ + public Map removeRequestHeader(final String key) { + this.requestHeaders.remove(key); + return getRequestHeaders(); + } + + /** + * Get the host. + * + * @return the host + */ + public String getHost() { + return this.host; + } + + /** + * Set the host. + * + * @param host the new host + */ + public void setHost(final String host) { + this.host = host; + } + + /** + * Get the maximum number of retries on a rate limit response. + * The default is 5. + * + * @return the number of retries on a rate limit + */ + public int getRateLimitRetry() { + return this.rateLimitRetry; + } + + /** + * Set the maximum number of retries on a rate limit response. + * + * @param rateLimitRetry the maximum retry count + */ + public void setRateLimitRetry(final int rateLimitRetry) { + this.rateLimitRetry = rateLimitRetry; + } + + /** + * Get the duration of time (in milliseconds) to sleep between + * consecutive rate limit retries. The Twilio SendGrid API enforces + * the rate limit to the second. The default value is 1.1 seconds. + * + * @return the sleep duration + */ + public int getRateLimitSleep() { + return this.rateLimitSleep; + } + + /** + * Set the duration of time (in milliseconds) to sleep between + * consecutive rate limit retries. + * + * @param rateLimitSleep the sleep duration + */ + public void setRateLimitSleep(final int rateLimitSleep) { + this.rateLimitSleep = rateLimitSleep; + } + + /** + * Impersonate subuser for subsequent requests + * + * @param subuser the subuser to be impersonated + */ + public void addImpersonateSubuser(final String subuser) { + this.subuser = subuser; + this.addRequestHeader("on-behalf-of", subuser); + } + + /** + * Stop Impersonating the subuser + */ + public void removeImpersonateSubuser() { + this.subuser = null; + this.removeRequestHeader("on-behalf-of"); + } + + /** + * Get the impersonated subuser or null if empty + * + * @return the impersonated subuser + */ + public String getImpersonateSubuser() { + return this.subuser; + } + + /** + * Makes the call to the Twilio SendGrid API, override this method for testing. + * + * @param request the request to make + * @return the response object + * @throws IOException in case of a network error + */ + public Response makeCall(final Request request) throws IOException { + return client.api(request); + } + + /** + * Class api sets up the request to the Twilio SendGrid API, this is main interface. + * + * @param request the request object + * @return the response object + * @throws IOException in case of a network error + */ + public Response api(final Request request) throws IOException { + final Request req = new Request(); + + req.setMethod(request.getMethod()); + req.setBaseUri(this.host); + req.setEndpoint("/" + version + "/" + request.getEndpoint()); + req.setBody(request.getBody()); + + for (final Map.Entry header : this.requestHeaders.entrySet()) { + req.addHeader(header.getKey(), header.getValue()); + } + + for (final Map.Entry queryParam : request.getQueryParams().entrySet()) { + req.addQueryParam(queryParam.getKey(), queryParam.getValue()); + } + + return makeCall(req); + } + + /** + * Attempt an API call. This method executes the API call asynchronously + * on an internal thread pool. If the call is rate limited, the thread + * will retry up to the maximum configured time. + * + * @param request the API request + */ + public void attempt(final Request request) { + this.attempt(request, new APICallback() { + @Override + public void error(final Exception ex) { + } + + public void response(final Response r) { + } + }); + } + + /** + * Attempt an API call. This method executes the API call asynchronously + * on an internal thread pool. If the call is rate limited, the thread + * will retry up to the maximum configured time. The supplied callback + * will be called in the event of an error, or a successful response. + * + * @param request the API request + * @param callback the callback + */ + public void attempt(final Request request, final APICallback callback) { + this.pool.execute(new Runnable() { + @Override + public void run() { + Response response; + + // Retry until the retry limit has been reached. + for (int i = 0; i < rateLimitRetry; ++i) { + try { + response = api(request); + } catch (IOException ex) { + // Stop retrying if there is a network error. + callback.error(ex); + return; + } + + // We have been rate limited. + if (response.getStatusCode() == RATE_LIMIT_RESPONSE_CODE) { + try { + Thread.sleep(rateLimitSleep); + } catch (InterruptedException ex) { + // Can safely ignore this exception and retry. + } + } else { + callback.response(response); + return; + } + } + + // Retries exhausted. Return error. + callback.error(new RateLimitException(request, rateLimitRetry)); + } + }); + } +} diff --git a/src/main/java/com/sendgrid/SendGrid.java b/src/main/java/com/sendgrid/SendGrid.java index e746bcfd..e30a00f2 100644 --- a/src/main/java/com/sendgrid/SendGrid.java +++ b/src/main/java/com/sendgrid/SendGrid.java @@ -1,311 +1,47 @@ package com.sendgrid; -import java.io.IOException; -import java.util.HashMap; -import java.util.Map; -import java.util.concurrent.Executors; -import java.util.concurrent.ExecutorService; - /** - * Class Twilio SendGrid allows for quick and easy access to the Twilio SendGrid API. - */ -public class SendGrid implements SendGridAPI { - - private static final String VERSION = "3.0.0"; - - /** The user agent string to return to Twilio SendGrid. */ - private static final String USER_AGENT = "sendgrid/" + VERSION + ";java"; - private static final int RATE_LIMIT_RESPONSE_CODE = 429; - private static final int THREAD_POOL_SIZE = 8; - - private ExecutorService pool; - - /** The Twilio SendGrid host to which to connect. */ - private String host; - - /** The API version. */ - private String version; - - /** The HTTP client. */ - private Client client; - - /** The request headers container. */ - private Map requestHeaders; - - /** The number of times to try after a rate limit. */ - private int rateLimitRetry; - - /** The number of milliseconds to sleep between retries. */ - private int rateLimitSleep; - - /** The subuser to be impersonated. */ - private String subuser; + * Class Twilio SendGrid allows for quick and easy access to the Twilio SendGrid API. + */ +public class SendGrid extends BaseInterface { /** * Construct a new Twilio SendGrid API wrapper. + * * @param apiKey is your Twilio SendGrid API Key: https://app.sendgrid.com/settings/api_keys */ - public SendGrid(String apiKey) { - this.client = new Client(); + public SendGrid(final String apiKey) { initializeSendGrid(apiKey); } /** * Construct a new Twilio SendGrid API wrapper. + * * @param apiKey is your Twilio SendGrid API Key: https://app.sendgrid.com/settings/api_keys - * @param test is true if you are unit testing + * @param test is true if you are unit testing */ - public SendGrid(String apiKey, Boolean test) { - this.client = new Client(test); + public SendGrid(final String apiKey, final Boolean test) { + super(test); initializeSendGrid(apiKey); } /** * Construct a new Twilio SendGrid API wrapper. + * * @param apiKey is your Twilio SendGrid API Key: https://app.sendgrid.com/settings/api_keys * @param client the Client to use (allows to customize its configuration) */ - public SendGrid(String apiKey, Client client) { - this.client = client; + public SendGrid(final String apiKey, final Client client) { + super(client); initializeSendGrid(apiKey); } /** * Initialize the client. - * @param apiKey the user's API key. - */ - public void initializeSendGrid(String apiKey) { - this.host = "api.sendgrid.com"; - this.version = "v3"; - this.requestHeaders = new HashMap(); - this.requestHeaders.put("Authorization", "Bearer " + apiKey); - this.requestHeaders.put("User-Agent", USER_AGENT); - this.requestHeaders.put("Accept", "application/json"); - this.rateLimitRetry = 5; - this.rateLimitSleep = 1100; - - this.pool = Executors.newFixedThreadPool(THREAD_POOL_SIZE); - } - - /** - * Retrieve the current library version. - * @return the current version. - */ - public String getLibraryVersion() { - return this.VERSION; - } - - /** - * Get the API version. - * @return the current API versioin (v3 by default). - */ - public String getVersion() { - return this.version; - } - - /** - * Set the API version. - * @param version the new version. + * + * @param apiKey the user's API key */ - public void setVersion(String version) { - this.version = version; - } - - /** - * Obtain the request headers. - * @return the request headers. - */ - public Map getRequestHeaders() { - return this.requestHeaders; - } - - /** - * Add a new request header. - * @param key the header key. - * @param value the header value. - * @return the new set of request headers. - */ - public Map addRequestHeader(String key, String value) { - this.requestHeaders.put(key, value); - return getRequestHeaders(); - } - - /** - * Remove a request header. - * @param key the header key to remove. - * @return the new set of request headers. - */ - public Map removeRequestHeader(String key) { - this.requestHeaders.remove(key); - return getRequestHeaders(); - } - - /** - * Get the Twilio SendGrid host (api.sendgrid.com by default). - * @return the Twilio SendGrid host. - */ - public String getHost() { - return this.host; - } - - /** - * Set the Twilio SendGrid host. - * @param host the new Twilio SendGrid host. - */ - public void setHost(String host) { - this.host = host; - } - - /** - * Get the maximum number of retries on a rate limit response. - * The default is 5. - * @return the number of retries on a rate limit. - */ - public int getRateLimitRetry() { - return this.rateLimitRetry; - } - - /** - * Set the maximum number of retries on a rate limit response. - * @param rateLimitRetry the maximum retry count. - */ - public void setRateLimitRetry(int rateLimitRetry) { - this.rateLimitRetry = rateLimitRetry; - } - - /** - * Get the duration of time (in milliseconds) to sleep between - * consecutive rate limit retries. The Twilio SendGrid API enforces - * the rate limit to the second. The default value is 1.1 seconds. - * @return the sleep duration. - */ - public int getRateLimitSleep() { - return this.rateLimitSleep; - } - - /** - * Set the duration of time (in milliseconds) to sleep between - * consecutive rate limit retries. - * @param rateLimitSleep the sleep duration. - */ - public void setRateLimitSleep(int rateLimitSleep) { - this.rateLimitSleep = rateLimitSleep; - } - - /** - * Impersonate subuser for subsequent requests - * @param subuser the subuser to be impersonated - */ - public void addImpersonateSubuser(String subuser) { - this.subuser = subuser; - this.addRequestHeader("on-behalf-of", subuser); - } - - /** - * Stop Impersonating the subuser - */ - public void removeImpersonateSubuser() { - this.subuser = null; - this.removeRequestHeader("on-behalf-of"); - } - - /** - * Get the impersonated subuser or null if empty - * @return the impersonated subuser - */ - public String getImpersonateSubuser() { - return this.subuser; - } - - /** - * Makes the call to the Twilio SendGrid API, override this method for testing. - * @param request the request to make. - * @return the response object. - * @throws IOException in case of a network error. - */ - public Response makeCall(Request request) throws IOException { - return client.api(request); - } - - /** - * Class api sets up the request to the Twilio SendGrid API, this is main interface. - * @param request the request object. - * @return the response object. - * @throws IOException in case of a network error. - */ - public Response api(Request request) throws IOException { - Request req = new Request(); - req.setMethod(request.getMethod()); - req.setBaseUri(this.host); - req.setEndpoint("/" + version + "/" + request.getEndpoint()); - req.setBody(request.getBody()); - for (Map.Entry header : this.requestHeaders.entrySet()) { - req.addHeader(header.getKey(), header.getValue()); - } - for (Map.Entry queryParam : request.getQueryParams().entrySet()) { - req.addQueryParam(queryParam.getKey(), queryParam.getValue()); - } - - return makeCall(req); - } - - /** - * Attempt an API call. This method executes the API call asynchronously - * on an internal thread pool. If the call is rate limited, the thread - * will retry up to the maximum configured time. - * @param request the API request. - */ - public void attempt(Request request) { - this.attempt(request, new APICallback() { - @Override - public void error(Exception ex) { - } - - public void response(Response r) { - } - }); - } - - /** - * Attempt an API call. This method executes the API call asynchronously - * on an internal thread pool. If the call is rate limited, the thread - * will retry up to the maximum configured time. The supplied callback - * will be called in the event of an error, or a successful response. - * @param request the API request. - * @param callback the callback. - */ - public void attempt(final Request request, final APICallback callback) { - this.pool.execute(new Runnable() { - @Override - public void run() { - Response response; - - // Retry until the retry limit has been reached. - for (int i = 0; i < rateLimitRetry; ++i) { - try { - response = api(request); - } catch (IOException ex) { - // Stop retrying if there is a network error. - callback.error(ex); - return; - } - - // We have been rate limited. - if (response.getStatusCode() == RATE_LIMIT_RESPONSE_CODE) { - try { - Thread.sleep(rateLimitSleep); - } catch (InterruptedException ex) { - // Can safely ignore this exception and retry. - } - } else { - callback.response(response); - return; - } - } - - // Retries exhausted. Return error. - callback.error(new RateLimitException(request, rateLimitRetry)); - } - }); + public void initializeSendGrid(final String apiKey) { + this.initialize("Bearer " + apiKey, "api.sendgrid.com"); } } diff --git a/src/main/java/com/sendgrid/SendGridAPI.java b/src/main/java/com/sendgrid/SendGridAPI.java index aa9583a2..71b2c3cc 100644 --- a/src/main/java/com/sendgrid/SendGridAPI.java +++ b/src/main/java/com/sendgrid/SendGridAPI.java @@ -6,86 +6,87 @@ public interface SendGridAPI { /** - * Initializes Twilio SendGrid - * - * @param apiKey is your Twilio SendGrid API Key: https://app.sendgrid.com/settings/api_keys + * Initialize the client. + * + * @param auth authorization header value + * @param host the base URL for the API */ - void initializeSendGrid(String apiKey); + void initialize(final String auth, final String host); /** - * Returns the library version - * - * @return the library version. + * Get the current library version. + * + * @return the current version */ String getLibraryVersion(); /** - * Gets the version. + * Get the API version. * - * @return returns the version. + * @return the current API version */ String getVersion(); /** - * Sets the version. - * - * @param version the Twilio SendGrid version. + * Set the API version. + * + * @param version the new version */ - void setVersion(String version); + void setVersion(final String version); /** - * Gets the request headers. - * @return returns a map of request headers. + * Get the request headers. + * + * @return the request headers */ Map getRequestHeaders(); /** - * Adds a request headers. - * - * @param key the key - * @param value the value - * @return returns a map of request headers. + * Add/update a request header. + * + * @param key the header key + * @param value the header value + * @return the new set of request headers */ - Map addRequestHeader(String key, String value); + Map addRequestHeader(final String key, final String value); /** - * Removes a request headers. - * - * @param key the key - * @return returns a map of request headers. + * Remove a request header. + * + * @param key the header key to remove + * @return the new set of request headers */ - Map removeRequestHeader(String key); + Map removeRequestHeader(final String key); /** - * Gets the host. - * - * @return returns the host. + * Get the host. + * + * @return the host */ String getHost(); /** - * Sets the host. - * - * @param host the host to set + * Set the host. + * + * @param host the new host */ - void setHost(String host); + void setHost(final String host); /** - * Class makeCall makes the call to the Twilio SendGrid API, override this method for - * testing. - * - * @param request the request - * @return returns a response. - * @throws IOException in case of network or marshal error. + * Makes the call to the Twilio SendGrid API, override this method for testing. + * + * @param request the request to make + * @return the response object + * @throws IOException in case of a network error */ - Response makeCall(Request request) throws IOException; + Response makeCall(final Request request) throws IOException; /** * Class api sets up the request to the Twilio SendGrid API, this is main interface. - * - * @param request the request - * @return returns a response. - * @throws IOException in case of network or marshal error. + * + * @param request the request object + * @return the response object + * @throws IOException in case of a network error */ - Response api(Request request) throws IOException; + Response api(final Request request) throws IOException; } diff --git a/src/main/java/com/sendgrid/TwilioEmail.java b/src/main/java/com/sendgrid/TwilioEmail.java new file mode 100644 index 00000000..d2c79503 --- /dev/null +++ b/src/main/java/com/sendgrid/TwilioEmail.java @@ -0,0 +1,50 @@ +package com.sendgrid; + +import org.apache.commons.codec.binary.Base64; + +/** + * This class allows you to quickly and easily send emails through Twilio + * SendGrid using Java. + */ +public class TwilioEmail extends BaseInterface { + + /** + * Construct a new Twilio SendGrid API wrapper. + * + * @param username your Twilio Email API key SID or Account SID + * @param password your Twilio Email API key secret or Account Auth Token + */ + public TwilioEmail(final String username, final String password) { + initialize(username, password); + } + + /** + * Construct a new Twilio SendGrid API wrapper. + * + * @param username your Twilio Email API key SID or Account SID + * @param password your Twilio Email API key secret or Account Auth Token + * @param client the Client to use (allows to customize its configuration) + */ + public TwilioEmail(final String username, final String password, final Client client) { + super(client); + initialize(username, password); + } + + /** + * Initialize the client. + * + * @param username your Twilio Email API key SID or Account SID + * @param password your Twilio Email API key secret or Account Auth Token + */ + public void initialize(final String username, final String password) { + super.initialize(getAuthString(username, password), "email.twilio.com"); + } + + private String getAuthString(final String username, final String password) { + final String credentials = username + ":" + password; + final byte[] encodedBytes = Base64.encodeBase64(credentials.getBytes()); + final String encoderString = new String(encodedBytes); + + return "Basic " + encoderString; + } +} diff --git a/src/test/java/com/sendgrid/TwilioEmailTest.java b/src/test/java/com/sendgrid/TwilioEmailTest.java new file mode 100644 index 00000000..e07c2ca5 --- /dev/null +++ b/src/test/java/com/sendgrid/TwilioEmailTest.java @@ -0,0 +1,29 @@ +package com.sendgrid; + +import org.junit.Assert; +import org.junit.Test; + +import java.io.IOException; + +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; + +public class TwilioEmailTest { + + @Test + public void testInitialization() { + final TwilioEmail sg = new TwilioEmail("username", "password"); + Assert.assertEquals("email.twilio.com", sg.getHost()); + Assert.assertEquals("Basic dXNlcm5hbWU6cGFzc3dvcmQ=", sg.getRequestHeaders().get("Authorization")); + } + + @Test + public void testConstructWithClient() throws IOException { + final Client client = mock(Client.class); + final TwilioEmail sg = new TwilioEmail("username", "password", client); + final Request request = new Request(); + + sg.makeCall(request); + verify(client).api(request); + } +} From 2104e0e10021107b76f7d2638e2a74d6f6e1c228 Mon Sep 17 00:00:00 2001 From: Anuj Shah Date: Thu, 7 May 2020 15:06:47 -0700 Subject: [PATCH 184/345] feat: verify signature from event webhook (#622) * signature-verification: verify signature from event webhook * signature-verification: code review * signature-verification: add an example * signature-verification: package renaming and updated examples * signature-verification: code review updates * signature-verification: consistent sample data across SDKs --- examples/helpers/eventwebhook/Example.java | 27 ++++++++ pom.xml | 5 ++ .../helpers/eventwebhook/EventWebhook.java | 68 +++++++++++++++++++ .../eventwebhook/EventWebhookHeader.java | 20 ++++++ .../eventwebhook/EventWebhookTest.java | 27 ++++++++ 5 files changed, 147 insertions(+) create mode 100644 examples/helpers/eventwebhook/Example.java create mode 100644 src/main/java/com/sendgrid/helpers/eventwebhook/EventWebhook.java create mode 100644 src/main/java/com/sendgrid/helpers/eventwebhook/EventWebhookHeader.java create mode 100644 src/test/java/com/sendgrid/helpers/eventwebhook/EventWebhookTest.java diff --git a/examples/helpers/eventwebhook/Example.java b/examples/helpers/eventwebhook/Example.java new file mode 100644 index 00000000..786d5902 --- /dev/null +++ b/examples/helpers/eventwebhook/Example.java @@ -0,0 +1,27 @@ +import com.sendgrid.helpers.eventwebhook.EventWebhook; +import java.security.PublicKey; +import java.security.Security; +import java.security.interfaces.ECPublicKey; +import java.util.logging.Level; +import java.util.logging.Logger; +import org.bouncycastle.jce.provider.BouncyCastleProvider; + +public class Example { + + public static void main(String[] args) { + Security.addProvider(new BouncyCastleProvider()); + + try { + String publicKey = "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEEDr2LjtURuePQzplybdC+u4CwrqDqBaWjcMMsTbhdbcwHBcepxo7yAQGhHPTnlvFYPAZFceEu/1FwCM/QmGUhA=="; + String payload = "{\"category\":\"example_payload\",\"event\":\"test_event\",\"message_id\":\"message_id\"}"; + String signature = "MEUCIQCtIHJeH93Y+qpYeWrySphQgpNGNr/U+UyUlBkU6n7RAwIgJTz2C+8a8xonZGi6BpSzoQsbVRamr2nlxFDWYNH2j/0="; + String timestamp = "1588788367"; + EventWebhook ew = new EventWebhook(); + ECPublicKey ellipticCurvePublicKey = ew.ConvertPublicKeyToECDSA(publicKey); + boolean valid = ew.VerifySignature(ellipticCurvePublicKey, payload, signature, timestamp); + System.out.println("Valid Signature: " + valid); + } catch (Exception exception) { + Logger.getLogger(Example.class.getName()).log(Level.SEVERE, "something went wrong", exception); + } + } +} diff --git a/pom.xml b/pom.xml index 3463b417..c7bb48e2 100644 --- a/pom.xml +++ b/pom.xml @@ -303,5 +303,10 @@ 2.1.0 test + + org.bouncycastle + bcprov-jdk15on + 1.65 + \ No newline at end of file diff --git a/src/main/java/com/sendgrid/helpers/eventwebhook/EventWebhook.java b/src/main/java/com/sendgrid/helpers/eventwebhook/EventWebhook.java new file mode 100644 index 00000000..6e52bd38 --- /dev/null +++ b/src/main/java/com/sendgrid/helpers/eventwebhook/EventWebhook.java @@ -0,0 +1,68 @@ +package com.sendgrid.helpers.eventwebhook; + +import java.security.InvalidKeyException; +import java.security.KeyFactory; +import java.security.NoSuchAlgorithmException; +import java.security.NoSuchProviderException; +import java.security.Signature; +import java.security.SignatureException; +import java.security.interfaces.ECPublicKey; +import java.security.spec.InvalidKeySpecException; +import java.security.spec.X509EncodedKeySpec; +import java.util.Base64; + +/** + * This class allows you to easily use the Event Webhook feature. Read the docs + * for more details: + * https://sendgrid.com/docs/for-developers/tracking-events/event. + */ +public class EventWebhook { + /** + * Convert the public key string to a ECPublicKey. + * + * @param publicKey: verification key under Mail Settings + * @return a public key using the ECDSA algorithm + * @throws NoSuchAlgorithmException + * @throws NoSuchProviderException + * @throws InvalidKeySpecException + */ + public java.security.interfaces.ECPublicKey ConvertPublicKeyToECDSA(String publicKey) + throws NoSuchAlgorithmException, NoSuchProviderException, InvalidKeySpecException { + byte[] publicKeyInBytes = Base64.getDecoder().decode(publicKey); + KeyFactory factory = KeyFactory.getInstance("ECDSA", "BC"); + return (ECPublicKey) factory.generatePublic(new X509EncodedKeySpec(publicKeyInBytes)); + } + + /** + * Verify signed event webhook requests. + * + * @param publicKey: elliptic curve public key + * @param payload: event payload in the request body + * @param signature: value obtained from the + * 'X-Twilio-Email-Event-Webhook-Signature' header + * @param timestamp: value obtained from the + * 'X-Twilio-Email-Event-Webhook-Timestamp' header + * @return true or false if signature is valid + * @throws NoSuchAlgorithmException + * @throws NoSuchProviderException + * @throws InvalidKeyException + * @throws SignatureException + */ + public boolean VerifySignature(ECPublicKey publicKey, String payload, String signature, String timestamp) + throws NoSuchAlgorithmException, NoSuchProviderException, InvalidKeyException, SignatureException { + + // prepend the payload with the timestamp + String payloadWithTimestamp = timestamp + payload; + + // create the signature object + Signature signatureObject = Signature.getInstance("SHA256withECDSA", "BC"); + signatureObject.initVerify(publicKey); + signatureObject.update(payloadWithTimestamp.getBytes()); + + // decode the signature + byte[] signatureInBytes = Base64.getDecoder().decode(signature); + + // verify the signature + return signatureObject.verify(signatureInBytes); + } +} diff --git a/src/main/java/com/sendgrid/helpers/eventwebhook/EventWebhookHeader.java b/src/main/java/com/sendgrid/helpers/eventwebhook/EventWebhookHeader.java new file mode 100644 index 00000000..7bdc422c --- /dev/null +++ b/src/main/java/com/sendgrid/helpers/eventwebhook/EventWebhookHeader.java @@ -0,0 +1,20 @@ +package com.sendgrid.helpers.eventwebhook; + +/** + * This enum lists headers that get posted to the webhook. Read the docs for + * more details: https://sendgrid.com/docs/for-developers/tracking-events/event. + */ +public enum EventWebhookHeader { + SIGNATURE("X-Twilio-Email-Event-Webhook-Signature"), TIMESTAMP("X-Twilio-Email-Event-Webhook-Timestamp"); + + public final String name; + + EventWebhookHeader(String name) { + this.name = name; + } + + @Override + public String toString() { + return name; + } +} diff --git a/src/test/java/com/sendgrid/helpers/eventwebhook/EventWebhookTest.java b/src/test/java/com/sendgrid/helpers/eventwebhook/EventWebhookTest.java new file mode 100644 index 00000000..434201bb --- /dev/null +++ b/src/test/java/com/sendgrid/helpers/eventwebhook/EventWebhookTest.java @@ -0,0 +1,27 @@ +package com.sendgrid.helpers.eventwebhook; + +import java.security.Security; +import java.security.interfaces.ECPublicKey; +import org.bouncycastle.jce.provider.BouncyCastleProvider; +import org.junit.Assert; +import org.junit.Test; + +public class EventWebhookTest { + @Test + public void testVerifySignature() throws Exception { + + Security.addProvider(new BouncyCastleProvider()); + + String testPublicKey = "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEEDr2LjtURuePQzplybdC+u4CwrqDqBaWjcMMsTbhdbcwHBcepxo7yAQGhHPTnlvFYPAZFceEu/1FwCM/QmGUhA=="; + String testPayload = "{\"category\":\"example_payload\",\"event\":\"test_event\",\"message_id\":\"message_id\"}"; + String testSignature = "MEUCIQCtIHJeH93Y+qpYeWrySphQgpNGNr/U+UyUlBkU6n7RAwIgJTz2C+8a8xonZGi6BpSzoQsbVRamr2nlxFDWYNH2j/0="; + String testTimestamp = "1588788367"; + + EventWebhook ew = new EventWebhook(); + ECPublicKey ellipticCurvePublicKey = ew.ConvertPublicKeyToECDSA(testPublicKey); + boolean isValidSignature = ew.VerifySignature(ellipticCurvePublicKey, testPayload, testSignature, + testTimestamp); + + Assert.assertTrue(isValidSignature); + } +} From 83e58d36969c40d025d911f8dab5e2e40d1b2aaf Mon Sep 17 00:00:00 2001 From: Twilio Date: Wed, 13 May 2020 19:45:09 +0000 Subject: [PATCH 185/345] [Librarian] Version Bump --- CHANGELOG.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2dc16ffc..342d5a09 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,13 @@ # Change Log All notable changes to this project will be documented in this file. +[2020-05-13] Version 4.5.0 +-------------------------- +**Library - Feature** +- [PR #622](https://github.com/sendgrid/sendgrid-java/pull/622): verify signature from event webhook. Thanks to [@anujs3](https://github.com/anujs3)! +- [PR #621](https://github.com/sendgrid/sendgrid-java/pull/621): add support for Twilio Email. Thanks to [@childish-sambino](https://github.com/childish-sambino)! + + [2020-04-15] Version 4.4.8 -------------------------- **Library - Fix** From 810be077e969a038290192f94807a0d35fc4e050 Mon Sep 17 00:00:00 2001 From: Twilio Date: Wed, 13 May 2020 20:09:20 +0000 Subject: [PATCH 186/345] Release 4.5.0 --- CONTRIBUTING.md | 2 +- README.md | 6 +++--- pom.xml | 14 +++++++------- src/main/java/com/sendgrid/BaseInterface.java | 2 +- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 7b6b97a3..e96c2960 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -101,7 +101,7 @@ touch Example.java Add the example you want to test to Example.java, including the headers at the top of the file. ``` bash -javac -classpath ../repo/com/sendgrid/4.4.8/sendgrid-4.4.8-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.4.8/sendgrid-4.4.8-jar.jar:. Example +javac -classpath ../repo/com/sendgrid/4.5.0/sendgrid-4.5.0-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.5.0/sendgrid-4.5.0-jar.jar:. Example ``` diff --git a/README.md b/README.md index d5d5e5ff..8caf5d24 100644 --- a/README.md +++ b/README.md @@ -39,7 +39,7 @@ We appreciate your continued support, thank you! ## Prerequisites - Java version Oracle JDK 7, 8 or OpenJDK 7 -- The Twilio SendGrid service, starting at the [free level](https://sendgrid.com/free?source=sendgrid-java) to send up to 4.4.8 emails for the first 30 days, then send 100 emails/day free forever or check out [our pricing](https://sendgrid.com/pricing?source=sendgrid-java). +- The Twilio SendGrid service, starting at the [free level](https://sendgrid.com/free?source=sendgrid-java) to send up to 4.5.0 emails for the first 30 days, then send 100 emails/day free forever or check out [our pricing](https://sendgrid.com/pricing?source=sendgrid-java). ## Setup Environment Variables @@ -67,7 +67,7 @@ Add the following to your build.gradle file in the root of your project. ... dependencies { ... - implementation 'com.sendgrid:sendgrid-java:4.4.8' + implementation 'com.sendgrid:sendgrid-java:4.5.0' } repositories { @@ -86,7 +86,7 @@ mvn install You can just drop the jar file in. It's a fat jar - it has all the dependencies built in. -[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.4.8/sendgrid-java.jar) +[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.5.0/sendgrid-java.jar) ## Dependencies diff --git a/pom.xml b/pom.xml index c7bb48e2..d0ff2d07 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ com.sendgrid sendgrid-java Twilio SendGrid Java helper library - 4.4.8 + 4.5.0 This Java module allows you to quickly and easily send emails through Twilio SendGrid using Java. https://github.com/sendgrid/sendgrid-java @@ -26,7 +26,7 @@ https://github.com/sendgrid/sendgrid-java scm:git:git@github.com:sendgrid/sendgrid-java.git scm:git:git@github.com:sendgrid/sendgrid-java.git - 4.4.8 + 4.5.0 @@ -303,10 +303,10 @@ 2.1.0 test - - org.bouncycastle - bcprov-jdk15on - 1.65 - + + org.bouncycastle + bcprov-jdk15on + 1.65 + \ No newline at end of file diff --git a/src/main/java/com/sendgrid/BaseInterface.java b/src/main/java/com/sendgrid/BaseInterface.java index 0b87b528..d4813ecf 100644 --- a/src/main/java/com/sendgrid/BaseInterface.java +++ b/src/main/java/com/sendgrid/BaseInterface.java @@ -11,7 +11,7 @@ */ public abstract class BaseInterface implements SendGridAPI { - private static final String VERSION = "3.0.0"; + private static final String VERSION = "4.5.0"; private static final String USER_AGENT = "sendgrid/" + VERSION + ";java"; private static final int RATE_LIMIT_RESPONSE_CODE = 429; From feabd2cde80c9d067f84319e0eb981c112b22649 Mon Sep 17 00:00:00 2001 From: Twilio Date: Wed, 13 May 2020 16:24:52 -0700 Subject: [PATCH 187/345] fix: library version test --- src/test/java/com/sendgrid/SendGridTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/com/sendgrid/SendGridTest.java b/src/test/java/com/sendgrid/SendGridTest.java index 92c0b4a2..2045a937 100644 --- a/src/test/java/com/sendgrid/SendGridTest.java +++ b/src/test/java/com/sendgrid/SendGridTest.java @@ -43,7 +43,7 @@ public void testConstructWithClient() throws IOException { @Test public void testLibraryVersion() { SendGrid sg = new SendGrid(SENDGRID_API_KEY); - Assert.assertEquals(sg.getLibraryVersion(), "3.0.0"); + Assert.assertEquals(sg.getLibraryVersion(), "4.5.0"); } @Test From b50129fc9b240113e3cbc5db7a98ecbf1a70682e Mon Sep 17 00:00:00 2001 From: Sam Harrison Date: Fri, 29 May 2020 10:03:10 -0500 Subject: [PATCH 188/345] docs: shorten and correct the issue template link --- CONTRIBUTING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index e96c2960..30240905 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -48,7 +48,7 @@ Before you decide to create a new issue, please try the following: ### Please use our Bug Report Template -In order to make the process easier, we've included a [sample bug report template](https://github.com/sendgrid/sendgrid-java/blob/master/ISSUE_TEMPLATE.md) (borrowed from [Ghost](https://github.com/TryGhost/Ghost/)). The template uses [GitHub flavored markdown](https://help.github.com/articles/github-flavored-markdown/) for formatting. +In order to make the process easier, we've included a [sample bug report template](ISSUE_TEMPLATE.md). ## Improvements to the Codebase From 217e6ed1f0346dfded6f62532301869ff42d7636 Mon Sep 17 00:00:00 2001 From: childish-sambino Date: Wed, 3 Jun 2020 13:26:09 -0500 Subject: [PATCH 189/345] feat: add prism Docker setup (#626) --- .gitignore | 1 + .travis.yml | 30 +- CONTRIBUTING.md | 20 +- Dockerfile | 21 + Makefile | 13 +- docker/Dockerfile | 24 - docker/README.md | 31 - docker/USAGE.md | 32 - docker/entrypoint.sh | 31 - scripts/startPrism.sh | 58 -- src/test/java/com/sendgrid/SendGridTest.java | 711 ++++++------------- test/prism.sh | 42 -- 12 files changed, 272 insertions(+), 742 deletions(-) create mode 100644 Dockerfile delete mode 100644 docker/Dockerfile delete mode 100644 docker/README.md delete mode 100644 docker/USAGE.md delete mode 100644 docker/entrypoint.sh delete mode 100755 scripts/startPrism.sh delete mode 100755 test/prism.sh diff --git a/.gitignore b/.gitignore index fa35c4dd..12b0a405 100644 --- a/.gitignore +++ b/.gitignore @@ -17,3 +17,4 @@ examples/Example.java .vscode sendgrid-java.jar dependency-reduced-pom.xml +prism* diff --git a/.travis.yml b/.travis.yml index db96dad8..7becc3f3 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,35 +1,19 @@ language: java before_install: - echo $GPG_SECRET_KEYS | base64 --decode | $GPG_EXECUTABLE --import --batch || true -matrix: - include: - - jdk: openjdk7 - dist: trusty - - jdk: openjdk8 - dist: xenial - - jdk: openjdk11 - dist: xenial - - jdk: oraclejdk7 - dist: precise - - jdk: oraclejdk8 - dist: trusty - - jdk: oraclejdk11 - dist: trusty - allow_failures: - - jdk: openjdk7 - - jdk: oraclejdk7 -before_script: - - "./scripts/startPrism.sh &" - - sleep 20 -install: - - mvn --settings .maven.xml install -DskipTests=true -Dgpg.skip -Dmaven.javadoc.skip=true -B -V +env: + - version=8 + - version=11 +script: + - make test-docker + deploy: - provider: script script: mvn clean deploy --settings .maven.xml -DskipTests=true -B -U -Prelease edge: true on: tags: true - jdk: openjdk8 + condition: $version = 8 branch: master notifications: diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 30240905..8367539d 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -128,25 +128,9 @@ All test files are in the [`tests`](https://github.com/sendgrid/sendgrid-java/tr For the purposes of contributing to this repo, please update the [`SendGridTest.java`](https://github.com/sendgrid/sendgrid-java/tree/master/src/test/java/com/sendgrid/SendGridTest.java) file with unit tests as you modify the code. -1. Download [prism](http://stoplight.io/platform/prism/) for your platform ([Mac OS X](https://github.com/stoplightio/prism/releases/download/v0.6.21/prism_darwin_amd64), [Linux](https://github.com/stoplightio/prism/releases/download/v0.6.21/prism_linux_amd64), [Windows](https://github.com/stoplightio/prism/releases/download/v0.6.21/prism_windows_amd64.exe)) and save the binary to the sendgrid-java directory (or any directory you would like. The sendgrid-java directory is chosen mostly for convenience.) +The integration tests require a Twilio SendGrid mock API in order to execute. We've simplified setting this up using Docker to run the tests. You will just need [Docker Desktop](https://docs.docker.com/get-docker/) and `make`. -1. Add execute permissions - - ```bash - chmod +x prism - ``` - -1. In a separate terminal, cd into the directory you chose for prism and start the sendgrid local server which the tests will use. - - ```bash - ./prism run --mock --list --spec https://raw.githubusercontent.com/sendgrid/sendgrid-oai/master/oai_stoplight.json - ``` - -1. Now you can run the test suite from the root of the project - - ```bash - ./gradlew test -i - ``` +Once these are available, simply execute the Docker test target to run all tests: `make test-docker`. This command can also be used to open an interactive shell into the container where this library is installed. To start a *bash* shell for example, use this command: `command=bash make test-docker`. ## Style Guidelines & Naming Conventions diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 00000000..6587fff8 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,21 @@ +ARG version=latest +FROM openjdk:$version + +# version <= 11 +RUN apt-get update \ + && apt-get install -y make maven || true +COPY prism/prism/nginx/cert.crt /usr/local/share/ca-certificates/cert.crt +RUN update-ca-certificates || true + +# version > 11 +RUN yum update -y \ + && yum install -y make wget || true +RUN wget http://repos.fedorapeople.org/repos/dchen/apache-maven/epel-apache-maven.repo -O /etc/yum.repos.d/epel-apache-maven.repo \ + && yum install -y maven || true +RUN keytool -import -trustcacerts -cacerts -storepass changeit -noprompt \ + -alias api.sendgrid.com -file /usr/local/share/ca-certificates/cert.crt || true + +WORKDIR /app +COPY . . + +RUN make install diff --git a/Makefile b/Makefile index 36295ba5..a7e6c434 100644 --- a/Makefile +++ b/Makefile @@ -1,17 +1,20 @@ -.PHONY: install test test-integration clean +.PHONY: install test test-integ test-docker clean VERSION := $(shell mvn help:evaluate -Dexpression=project.version --batch-mode | grep -e '^[^\[]') install: @java -version || (echo "Java is not installed, please install Java >= 7"; exit 1); - mvn clean install -DskipTests=true -Dgpg.skip -B + mvn clean install -DskipTests=true -Dgpg.skip -Dmaven.javadoc.skip=true -B cp target/sendgrid-java-$(VERSION)-shaded.jar sendgrid-java.jar test: mvn test -test-integration: - ./scripts/startPrism.sh & - sleep 5 +test-integ: test + +version ?= latest +test-docker: + curl -s https://raw.githubusercontent.com/sendgrid/sendgrid-oai/master/prism/prism.sh -o prism.sh + version=$(version) bash ./prism.sh clean: mvn clean diff --git a/docker/Dockerfile b/docker/Dockerfile deleted file mode 100644 index cc4ce776..00000000 --- a/docker/Dockerfile +++ /dev/null @@ -1,24 +0,0 @@ -FROM store/oracle/serverjre:8 - -ENV OAI_SPEC_URL="https://raw.githubusercontent.com/sendgrid/sendgrid-oai/master/oai_stoplight.json" - -RUN yum install -y git - -WORKDIR /root - -# install Prism -ADD https://raw.githubusercontent.com/stoplightio/prism/master/install install.sh -RUN chmod +x ./install.sh && \ - ./install.sh && \ - rm ./install.sh - -# Set up default Twilio SendGrid env -WORKDIR /root/sources -RUN git clone https://github.com/sendgrid/sendgrid-java.git -WORKDIR /root -RUN ln -s /root/sources/sendgrid-java - -COPY entrypoint.sh entrypoint.sh -RUN chmod +x entrypoint.sh -ENTRYPOINT ["./entrypoint.sh"] -CMD ["--mock"] diff --git a/docker/README.md b/docker/README.md deleted file mode 100644 index dccc98cf..00000000 --- a/docker/README.md +++ /dev/null @@ -1,31 +0,0 @@ -# Supported tags and respective `Dockerfile` links - - `v1.0.0`, `latest` [(Dockerfile)](https://github.com/sendgrid/sendgrid-java/blob/master/docker/Dockerfile) - -# Quick reference -Due to Oracle's JDK license, you must build this Docker image using the official Oracle image located in the Docker Store. You will need a Docker store account. Once you have an account, you must accept the Oracle license [here](https://store.docker.com/images/oracle-serverjre-8). On the command line, type `docker login` and provide your credentials. You may then build the image using this command `docker build -t sendgrid/sendgrid-java -f Dockerfile .` - - - **Where to get help:** - [Contact Twilio SendGrid Support](https://support.sendgrid.com/hc/en-us) - - - **Where to file issues:** - https://github.com/sendgrid/sendgrid-java/issues - - - **Where to get more info:** - [USAGE.md](https://github.com/sendgrid/sendgrid-java/blob/master/docker/USAGE.md) - - - **Maintained by:** - [Twilio SendGrid Inc.](https://sendgrid.com) - -# Usage examples - - Most recent version: `docker run -it sendgrid/sendgrid-java`. - - Your own fork: - ```sh-session - $ git clone https://github.com/you/cool-sendgrid-java.git - $ realpath cool-sendgrid-java - /path/to/cool-sendgrid-java - $ docker run -it -v /path/to/cool-sendgrid-java:/mnt/sendgrid-java sendgrid/sendgrid-java - ``` - -For more detailed information, see [USAGE.md](https://github.com/sendgrid/sendgrid-java/blob/master/docker/USAGE.md). - -![SendGrid Logo](https://github.com/sendgrid/sendgrid-python/raw/master/twilio_sendgrid_logo.png) diff --git a/docker/USAGE.md b/docker/USAGE.md deleted file mode 100644 index dab8ed36..00000000 --- a/docker/USAGE.md +++ /dev/null @@ -1,32 +0,0 @@ -You can use Docker to easily try out or test sendgrid-java. - - -# Quickstart - -1. Install Docker on your machine. -2. If you have not done so, create a Docker Store account [here](https://store.docker.com/signup?next=%2F) -3. Navigate [here](https://store.docker.com/images/oracle-serverjre-8) and click the "Proceed to Checkout" link (don't worry, it's free). -4. On the command line, execute `docker login` and provide your credentials. -5. Build the Docker image using the command `docker build -t sendgrid/sendgrid-java -f Dockerfile .` -6. Run `docker run -it sendgrid/sendgrid-java`. - - -# Info - -This Docker image contains - - `sendgrid-java` - - Stoplight's Prism, which lets you try out the API without actually sending email - -Run it in interactive mode with `-it`. - -You can mount repositories in the `/mnt/sendgrid-java` and `/mnt/java-http-client` directories to use them instead of the default Twilio SendGrid libraries. Read on for more info. - - -# Testing -Testing is easy! -1. Run the container: `docker run -it sendgrid/sendgrid-java` -2. `cd sendgrid-java` -3. run `./gradlew test` - -![SendGrid Logo](https://github.com/sendgrid/sendgrid-python/raw/master/twilio_sendgrid_logo.png) - diff --git a/docker/entrypoint.sh b/docker/entrypoint.sh deleted file mode 100644 index 556d85bd..00000000 --- a/docker/entrypoint.sh +++ /dev/null @@ -1,31 +0,0 @@ -#! /bin/bash -clear - -# check for + link mounted libraries: -if [ -d /mnt/sendgrid-java ] -then - rm /root/sendgrid - ln -s /mnt/sendgrid-java/sendgrid - echo "Linked mounted sendgrid-java's code to /root/sendgrid" -fi - -SENDGRID_JAVA_VERSION="1.0.0" -echo "Welcome to sendgrid-java docker v${SENDGRID_JAVA_VERSION}." -echo - -if [ "$1" != "--no-mock" ] -then - echo "Starting Prism in mock mode. Calls made to Prism will not actually send emails." - echo "Disable this by running this container with --no-mock." - prism run --mock --spec $OAI_SPEC_URL 2> /dev/null & -else - echo "Starting Prism in live (--no-mock) mode. Calls made to Prism will send emails." - prism run --spec $OAI_SPEC_URL 2> /dev/null & -fi -echo "To use Prism, make API calls to localhost:4010. For example," -echo " sg = sendgrid.SendGridAPIClient(" -echo " host='http://localhost:4010/'," -echo " api_key=os.environ.get('SENDGRID_API_KEY_CAMPAIGNS'))" -echo "To stop Prism, run \"kill $!\" from the shell." - -bash \ No newline at end of file diff --git a/scripts/startPrism.sh b/scripts/startPrism.sh deleted file mode 100755 index 53923593..00000000 --- a/scripts/startPrism.sh +++ /dev/null @@ -1,58 +0,0 @@ -#!/bin/bash - -set -eu - -install () { - -echo "Installing Prism..." - -UNAME=$(uname) -ARCH=$(uname -m) -if [ "$UNAME" != "Linux" ] && [ "$UNAME" != "Darwin" ] && [ "$ARCH" != "x86_64" ] && [ "$ARCH" != "i686" ]; then - echo "Sorry, OS/Architecture not supported: ${UNAME}/${ARCH}. Download binary from https://github.com/stoplightio/prism/releases" - exit 1 -fi - -if [ "$UNAME" = "Darwin" ] ; then - OSX_ARCH=$(uname -m) - if [ "${OSX_ARCH}" = "x86_64" ] ; then - PLATFORM="darwin_amd64" - fi -elif [ "$UNAME" = "Linux" ] ; then - LINUX_ARCH=$(uname -m) - if [ "${LINUX_ARCH}" = "i686" ] ; then - PLATFORM="linux_386" - elif [ "${LINUX_ARCH}" = "x86_64" ] ; then - PLATFORM="linux_amd64" - fi -fi - -mkdir -p ../prism/bin -#LATEST=$(curl -s https://api.github.com/repos/stoplightio/prism/tags | grep -Eo '"name":.*?[^\\]",' | head -n 1 | sed 's/[," ]//g' | cut -d ':' -f 2) -LATEST="v0.6.21" -URL="https://github.com/stoplightio/prism/releases/download/$LATEST/prism_$PLATFORM" -DEST=../prism/bin/prism - -if [ -z $LATEST ] ; then - echo "Error requesting. Download binary from ${URL}" - exit 1 -else - curl -L $URL -o $DEST - chmod +x $DEST -fi -} - -run () { - echo "Running prism..." - cd ../prism/bin - ./prism run --mock --spec https://raw.githubusercontent.com/sendgrid/sendgrid-oai/master/oai_stoplight.json -} - -if [ -f ../prism/bin/prism ]; then - echo "Prism is already installed." - run -else - echo "Prism is not installed." - install - run -fi diff --git a/src/test/java/com/sendgrid/SendGridTest.java b/src/test/java/com/sendgrid/SendGridTest.java index 2045a937..0dc2a86e 100644 --- a/src/test/java/com/sendgrid/SendGridTest.java +++ b/src/test/java/com/sendgrid/SendGridTest.java @@ -92,14 +92,7 @@ public void testRateLimitSleep() { @Test public void test_async() { final Object sync = new Object(); - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -137,14 +130,7 @@ public void response(Response response) { @Test public void test_async_rate_limit() { final Object sync = new Object(); - SendGrid sg = null; - if(System.getenv("TRAVIS") != null && Boolean.parseBoolean(System.getenv("TRAVIS"))) { - sg = new SendGrid("SENDGRID_API_KEY"); - sg.setHost(System.getenv("MOCK_HOST")); - } else { - sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); - } + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "429"); Request request = new Request(); @@ -177,8 +163,7 @@ public void response(Response response) { @Test public void test_access_settings_activity_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -191,8 +176,7 @@ public void test_access_settings_activity_get() throws IOException { @Test public void test_access_settings_whitelist_post() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); @@ -205,8 +189,7 @@ public void test_access_settings_whitelist_post() throws IOException { @Test public void test_access_settings_whitelist_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -218,8 +201,7 @@ public void test_access_settings_whitelist_get() throws IOException { @Test public void test_access_settings_whitelist_delete() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -232,8 +214,7 @@ public void test_access_settings_whitelist_delete() throws IOException { @Test public void test_access_settings_whitelist__rule_id__get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -245,8 +226,7 @@ public void test_access_settings_whitelist__rule_id__get() throws IOException { @Test public void test_access_settings_whitelist__rule_id__delete() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -258,8 +238,7 @@ public void test_access_settings_whitelist__rule_id__delete() throws IOException @Test public void test_alerts_post() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); @@ -272,8 +251,7 @@ public void test_alerts_post() throws IOException { @Test public void test_alerts_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -285,8 +263,7 @@ public void test_alerts_get() throws IOException { @Test public void test_alerts__alert_id__patch() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -299,8 +276,7 @@ public void test_alerts__alert_id__patch() throws IOException { @Test public void test_alerts__alert_id__get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -312,8 +288,7 @@ public void test_alerts__alert_id__get() throws IOException { @Test public void test_alerts__alert_id__delete() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -325,8 +300,7 @@ public void test_alerts__alert_id__delete() throws IOException { @Test public void test_api_keys_post() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); @@ -339,8 +313,7 @@ public void test_api_keys_post() throws IOException { @Test public void test_api_keys_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -353,8 +326,7 @@ public void test_api_keys_get() throws IOException { @Test public void test_api_keys__api_key_id__put() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -367,8 +339,7 @@ public void test_api_keys__api_key_id__put() throws IOException { @Test public void test_api_keys__api_key_id__patch() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -381,8 +352,7 @@ public void test_api_keys__api_key_id__patch() throws IOException { @Test public void test_api_keys__api_key_id__get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -394,8 +364,7 @@ public void test_api_keys__api_key_id__get() throws IOException { @Test public void test_api_keys__api_key_id__delete() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -407,8 +376,7 @@ public void test_api_keys__api_key_id__delete() throws IOException { @Test public void test_asm_groups_post() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); @@ -421,8 +389,7 @@ public void test_asm_groups_post() throws IOException { @Test public void test_asm_groups_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -435,8 +402,7 @@ public void test_asm_groups_get() throws IOException { @Test public void test_asm_groups__group_id__patch() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); @@ -449,8 +415,7 @@ public void test_asm_groups__group_id__patch() throws IOException { @Test public void test_asm_groups__group_id__get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -462,8 +427,7 @@ public void test_asm_groups__group_id__get() throws IOException { @Test public void test_asm_groups__group_id__delete() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -475,8 +439,7 @@ public void test_asm_groups__group_id__delete() throws IOException { @Test public void test_asm_groups__group_id__suppressions_post() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); @@ -489,8 +452,7 @@ public void test_asm_groups__group_id__suppressions_post() throws IOException { @Test public void test_asm_groups__group_id__suppressions_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -502,8 +464,7 @@ public void test_asm_groups__group_id__suppressions_get() throws IOException { @Test public void test_asm_groups__group_id__suppressions_search_post() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -516,8 +477,7 @@ public void test_asm_groups__group_id__suppressions_search_post() throws IOExcep @Test public void test_asm_groups__group_id__suppressions__email__delete() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -529,8 +489,7 @@ public void test_asm_groups__group_id__suppressions__email__delete() throws IOEx @Test public void test_asm_suppressions_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -542,8 +501,7 @@ public void test_asm_suppressions_get() throws IOException { @Test public void test_asm_suppressions_global_post() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); @@ -556,8 +514,7 @@ public void test_asm_suppressions_global_post() throws IOException { @Test public void test_asm_suppressions_global__email__get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -569,8 +526,7 @@ public void test_asm_suppressions_global__email__get() throws IOException { @Test public void test_asm_suppressions_global__email__delete() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -582,8 +538,7 @@ public void test_asm_suppressions_global__email__delete() throws IOException { @Test public void test_asm_suppressions__email__get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -595,8 +550,7 @@ public void test_asm_suppressions__email__get() throws IOException { @Test public void test_browsers_stats_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -614,8 +568,7 @@ public void test_browsers_stats_get() throws IOException { @Test public void test_campaigns_post() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); @@ -628,8 +581,7 @@ public void test_campaigns_post() throws IOException { @Test public void test_campaigns_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -643,8 +595,7 @@ public void test_campaigns_get() throws IOException { @Test public void test_campaigns__campaign_id__patch() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -657,8 +608,7 @@ public void test_campaigns__campaign_id__patch() throws IOException { @Test public void test_campaigns__campaign_id__get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -670,8 +620,7 @@ public void test_campaigns__campaign_id__get() throws IOException { @Test public void test_campaigns__campaign_id__delete() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -683,8 +632,7 @@ public void test_campaigns__campaign_id__delete() throws IOException { @Test public void test_campaigns__campaign_id__schedules_patch() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -697,8 +645,7 @@ public void test_campaigns__campaign_id__schedules_patch() throws IOException { @Test public void test_campaigns__campaign_id__schedules_post() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); @@ -711,8 +658,7 @@ public void test_campaigns__campaign_id__schedules_post() throws IOException { @Test public void test_campaigns__campaign_id__schedules_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -724,8 +670,7 @@ public void test_campaigns__campaign_id__schedules_get() throws IOException { @Test public void test_campaigns__campaign_id__schedules_delete() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -737,8 +682,7 @@ public void test_campaigns__campaign_id__schedules_delete() throws IOException { @Test public void test_campaigns__campaign_id__schedules_now_post() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); @@ -750,8 +694,7 @@ public void test_campaigns__campaign_id__schedules_now_post() throws IOException @Test public void test_campaigns__campaign_id__schedules_test_post() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -764,8 +707,7 @@ public void test_campaigns__campaign_id__schedules_test_post() throws IOExceptio @Test public void test_categories_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -780,8 +722,7 @@ public void test_categories_get() throws IOException { @Test public void test_categories_stats_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -799,8 +740,7 @@ public void test_categories_stats_get() throws IOException { @Test public void test_categories_stats_sums_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -819,8 +759,7 @@ public void test_categories_stats_sums_get() throws IOException { @Test public void test_clients_stats_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -835,8 +774,7 @@ public void test_clients_stats_get() throws IOException { @Test public void test_clients__client_type__stats_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -851,8 +789,7 @@ public void test_clients__client_type__stats_get() throws IOException { @Test public void test_contactdb_custom_fields_post() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); @@ -865,8 +802,7 @@ public void test_contactdb_custom_fields_post() throws IOException { @Test public void test_contactdb_custom_fields_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -878,8 +814,7 @@ public void test_contactdb_custom_fields_get() throws IOException { @Test public void test_contactdb_custom_fields__custom_field_id__get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -891,8 +826,7 @@ public void test_contactdb_custom_fields__custom_field_id__get() throws IOExcept @Test public void test_contactdb_custom_fields__custom_field_id__delete() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "202"); Request request = new Request(); @@ -904,8 +838,7 @@ public void test_contactdb_custom_fields__custom_field_id__delete() throws IOExc @Test public void test_contactdb_lists_post() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); @@ -918,8 +851,7 @@ public void test_contactdb_lists_post() throws IOException { @Test public void test_contactdb_lists_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -931,8 +863,7 @@ public void test_contactdb_lists_get() throws IOException { @Test public void test_contactdb_lists_delete() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -945,8 +876,7 @@ public void test_contactdb_lists_delete() throws IOException { @Test public void test_contactdb_lists__list_id__patch() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -960,8 +890,7 @@ public void test_contactdb_lists__list_id__patch() throws IOException { @Test public void test_contactdb_lists__list_id__get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -974,8 +903,7 @@ public void test_contactdb_lists__list_id__get() throws IOException { @Test public void test_contactdb_lists__list_id__delete() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "202"); Request request = new Request(); @@ -988,8 +916,7 @@ public void test_contactdb_lists__list_id__delete() throws IOException { @Test public void test_contactdb_lists__list_id__recipients_post() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); @@ -1002,8 +929,7 @@ public void test_contactdb_lists__list_id__recipients_post() throws IOException @Test public void test_contactdb_lists__list_id__recipients_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1018,8 +944,7 @@ public void test_contactdb_lists__list_id__recipients_get() throws IOException { @Test public void test_contactdb_lists__list_id__recipients__recipient_id__post() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); @@ -1031,8 +956,7 @@ public void test_contactdb_lists__list_id__recipients__recipient_id__post() thro @Test public void test_contactdb_lists__list_id__recipients__recipient_id__delete() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -1046,8 +970,7 @@ public void test_contactdb_lists__list_id__recipients__recipient_id__delete() th @Test public void test_contactdb_recipients_patch() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); @@ -1060,8 +983,7 @@ public void test_contactdb_recipients_patch() throws IOException { @Test public void test_contactdb_recipients_post() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); @@ -1074,8 +996,7 @@ public void test_contactdb_recipients_post() throws IOException { @Test public void test_contactdb_recipients_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1089,8 +1010,7 @@ public void test_contactdb_recipients_get() throws IOException { @Test public void test_contactdb_recipients_delete() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1103,8 +1023,7 @@ public void test_contactdb_recipients_delete() throws IOException { @Test public void test_contactdb_recipients_billable_count_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1116,8 +1035,7 @@ public void test_contactdb_recipients_billable_count_get() throws IOException { @Test public void test_contactdb_recipients_count_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1129,8 +1047,7 @@ public void test_contactdb_recipients_count_get() throws IOException { @Test public void test_contactdb_recipients_search_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1143,8 +1060,7 @@ public void test_contactdb_recipients_search_get() throws IOException { @Test public void test_contactdb_recipients__recipient_id__get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1156,8 +1072,7 @@ public void test_contactdb_recipients__recipient_id__get() throws IOException { @Test public void test_contactdb_recipients__recipient_id__delete() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -1169,8 +1084,7 @@ public void test_contactdb_recipients__recipient_id__delete() throws IOException @Test public void test_contactdb_recipients__recipient_id__lists_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1182,8 +1096,7 @@ public void test_contactdb_recipients__recipient_id__lists_get() throws IOExcept @Test public void test_contactdb_reserved_fields_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1195,8 +1108,7 @@ public void test_contactdb_reserved_fields_get() throws IOException { @Test public void test_contactdb_segments_post() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1209,8 +1121,7 @@ public void test_contactdb_segments_post() throws IOException { @Test public void test_contactdb_segments_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1222,8 +1133,7 @@ public void test_contactdb_segments_get() throws IOException { @Test public void test_contactdb_segments__segment_id__patch() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1237,8 +1147,7 @@ public void test_contactdb_segments__segment_id__patch() throws IOException { @Test public void test_contactdb_segments__segment_id__get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1251,8 +1160,7 @@ public void test_contactdb_segments__segment_id__get() throws IOException { @Test public void test_contactdb_segments__segment_id__delete() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -1265,8 +1173,7 @@ public void test_contactdb_segments__segment_id__delete() throws IOException { @Test public void test_contactdb_segments__segment_id__recipients_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1280,8 +1187,7 @@ public void test_contactdb_segments__segment_id__recipients_get() throws IOExcep @Test public void test_devices_stats_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1298,8 +1204,7 @@ public void test_devices_stats_get() throws IOException { @Test public void test_geo_stats_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1317,8 +1222,7 @@ public void test_geo_stats_get() throws IOException { @Test public void test_ips_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1335,8 +1239,7 @@ public void test_ips_get() throws IOException { @Test public void test_ips_assigned_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1348,8 +1251,7 @@ public void test_ips_assigned_get() throws IOException { @Test public void test_ips_pools_post() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1362,8 +1264,7 @@ public void test_ips_pools_post() throws IOException { @Test public void test_ips_pools_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1375,8 +1276,7 @@ public void test_ips_pools_get() throws IOException { @Test public void test_ips_pools__pool_name__put() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1389,8 +1289,7 @@ public void test_ips_pools__pool_name__put() throws IOException { @Test public void test_ips_pools__pool_name__get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1402,8 +1301,7 @@ public void test_ips_pools__pool_name__get() throws IOException { @Test public void test_ips_pools__pool_name__delete() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -1415,8 +1313,7 @@ public void test_ips_pools__pool_name__delete() throws IOException { @Test public void test_ips_pools__pool_name__ips_post() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); @@ -1429,8 +1326,7 @@ public void test_ips_pools__pool_name__ips_post() throws IOException { @Test public void test_ips_pools__pool_name__ips__ip__delete() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -1442,8 +1338,7 @@ public void test_ips_pools__pool_name__ips__ip__delete() throws IOException { @Test public void test_ips_warmup_post() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1456,8 +1351,7 @@ public void test_ips_warmup_post() throws IOException { @Test public void test_ips_warmup_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1469,8 +1363,7 @@ public void test_ips_warmup_get() throws IOException { @Test public void test_ips_warmup__ip_address__get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1482,8 +1375,7 @@ public void test_ips_warmup__ip_address__get() throws IOException { @Test public void test_ips_warmup__ip_address__delete() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -1495,8 +1387,7 @@ public void test_ips_warmup__ip_address__delete() throws IOException { @Test public void test_ips__ip_address__get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1508,8 +1399,7 @@ public void test_ips__ip_address__get() throws IOException { @Test public void test_mail_batch_post() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); @@ -1521,8 +1411,7 @@ public void test_mail_batch_post() throws IOException { @Test public void test_mail_batch__batch_id__get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1534,8 +1423,7 @@ public void test_mail_batch__batch_id__get() throws IOException { @Test public void test_mail_send_post() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "202"); Request request = new Request(); @@ -1548,8 +1436,7 @@ public void test_mail_send_post() throws IOException { @Test public void test_mail_settings_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1563,8 +1450,7 @@ public void test_mail_settings_get() throws IOException { @Test public void test_mail_settings_address_whitelist_patch() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1577,8 +1463,7 @@ public void test_mail_settings_address_whitelist_patch() throws IOException { @Test public void test_mail_settings_address_whitelist_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1590,8 +1475,7 @@ public void test_mail_settings_address_whitelist_get() throws IOException { @Test public void test_mail_settings_bcc_patch() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1604,8 +1488,7 @@ public void test_mail_settings_bcc_patch() throws IOException { @Test public void test_mail_settings_bcc_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1617,8 +1500,7 @@ public void test_mail_settings_bcc_get() throws IOException { @Test public void test_mail_settings_bounce_purge_patch() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1631,8 +1513,7 @@ public void test_mail_settings_bounce_purge_patch() throws IOException { @Test public void test_mail_settings_bounce_purge_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1644,8 +1525,7 @@ public void test_mail_settings_bounce_purge_get() throws IOException { @Test public void test_mail_settings_footer_patch() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1658,8 +1538,7 @@ public void test_mail_settings_footer_patch() throws IOException { @Test public void test_mail_settings_footer_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1671,8 +1550,7 @@ public void test_mail_settings_footer_get() throws IOException { @Test public void test_mail_settings_forward_bounce_patch() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1685,8 +1563,7 @@ public void test_mail_settings_forward_bounce_patch() throws IOException { @Test public void test_mail_settings_forward_bounce_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1698,8 +1575,7 @@ public void test_mail_settings_forward_bounce_get() throws IOException { @Test public void test_mail_settings_forward_spam_patch() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1712,8 +1588,7 @@ public void test_mail_settings_forward_spam_patch() throws IOException { @Test public void test_mail_settings_forward_spam_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1725,8 +1600,7 @@ public void test_mail_settings_forward_spam_get() throws IOException { @Test public void test_mail_settings_plain_content_patch() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1739,8 +1613,7 @@ public void test_mail_settings_plain_content_patch() throws IOException { @Test public void test_mail_settings_plain_content_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1752,8 +1625,7 @@ public void test_mail_settings_plain_content_get() throws IOException { @Test public void test_mail_settings_spam_check_patch() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1766,8 +1638,7 @@ public void test_mail_settings_spam_check_patch() throws IOException { @Test public void test_mail_settings_spam_check_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1779,8 +1650,7 @@ public void test_mail_settings_spam_check_get() throws IOException { @Test public void test_mail_settings_template_patch() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1793,8 +1663,7 @@ public void test_mail_settings_template_patch() throws IOException { @Test public void test_mail_settings_template_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1806,8 +1675,7 @@ public void test_mail_settings_template_get() throws IOException { @Test public void test_mailbox_providers_stats_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1825,8 +1693,7 @@ public void test_mailbox_providers_stats_get() throws IOException { @Test public void test_partner_settings_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1840,8 +1707,7 @@ public void test_partner_settings_get() throws IOException { @Test public void test_partner_settings_new_relic_patch() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1854,8 +1720,7 @@ public void test_partner_settings_new_relic_patch() throws IOException { @Test public void test_partner_settings_new_relic_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1867,8 +1732,7 @@ public void test_partner_settings_new_relic_get() throws IOException { @Test public void test_scopes_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1880,8 +1744,7 @@ public void test_scopes_get() throws IOException { @Test public void test_senders_post() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); @@ -1894,8 +1757,7 @@ public void test_senders_post() throws IOException { @Test public void test_senders_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1907,8 +1769,7 @@ public void test_senders_get() throws IOException { @Test public void test_senders__sender_id__patch() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1921,8 +1782,7 @@ public void test_senders__sender_id__patch() throws IOException { @Test public void test_senders__sender_id__get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1934,8 +1794,7 @@ public void test_senders__sender_id__get() throws IOException { @Test public void test_senders__sender_id__delete() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -1947,8 +1806,7 @@ public void test_senders__sender_id__delete() throws IOException { @Test public void test_senders__sender_id__resend_verification_post() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -1960,8 +1818,7 @@ public void test_senders__sender_id__resend_verification_post() throws IOExcepti @Test public void test_stats_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1978,8 +1835,7 @@ public void test_stats_get() throws IOException { @Test public void test_subusers_post() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -1992,8 +1848,7 @@ public void test_subusers_post() throws IOException { @Test public void test_subusers_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2008,8 +1863,7 @@ public void test_subusers_get() throws IOException { @Test public void test_subusers_reputations_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2022,8 +1876,7 @@ public void test_subusers_reputations_get() throws IOException { @Test public void test_subusers_stats_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2041,8 +1894,7 @@ public void test_subusers_stats_get() throws IOException { @Test public void test_subusers_stats_monthly_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2060,8 +1912,7 @@ public void test_subusers_stats_monthly_get() throws IOException { @Test public void test_subusers_stats_sums_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2080,8 +1931,7 @@ public void test_subusers_stats_sums_get() throws IOException { @Test public void test_subusers__subuser_name__patch() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -2094,8 +1944,7 @@ public void test_subusers__subuser_name__patch() throws IOException { @Test public void test_subusers__subuser_name__delete() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -2107,8 +1956,7 @@ public void test_subusers__subuser_name__delete() throws IOException { @Test public void test_subusers__subuser_name__ips_put() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2121,8 +1969,7 @@ public void test_subusers__subuser_name__ips_put() throws IOException { @Test public void test_subusers__subuser_name__monitor_put() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2135,8 +1982,7 @@ public void test_subusers__subuser_name__monitor_put() throws IOException { @Test public void test_subusers__subuser_name__monitor_post() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2149,8 +1995,7 @@ public void test_subusers__subuser_name__monitor_post() throws IOException { @Test public void test_subusers__subuser_name__monitor_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2162,8 +2007,7 @@ public void test_subusers__subuser_name__monitor_get() throws IOException { @Test public void test_subusers__subuser_name__monitor_delete() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -2175,8 +2019,7 @@ public void test_subusers__subuser_name__monitor_delete() throws IOException { @Test public void test_subusers__subuser_name__stats_monthly_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2193,8 +2036,7 @@ public void test_subusers__subuser_name__stats_monthly_get() throws IOException @Test public void test_suppression_blocks_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2210,8 +2052,7 @@ public void test_suppression_blocks_get() throws IOException { @Test public void test_suppression_blocks_delete() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -2224,8 +2065,7 @@ public void test_suppression_blocks_delete() throws IOException { @Test public void test_suppression_blocks__email__get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2237,8 +2077,7 @@ public void test_suppression_blocks__email__get() throws IOException { @Test public void test_suppression_blocks__email__delete() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -2250,8 +2089,7 @@ public void test_suppression_blocks__email__delete() throws IOException { @Test public void test_suppression_bounces_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2265,8 +2103,7 @@ public void test_suppression_bounces_get() throws IOException { @Test public void test_suppression_bounces_delete() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -2279,8 +2116,7 @@ public void test_suppression_bounces_delete() throws IOException { @Test public void test_suppression_bounces__email__get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2292,8 +2128,7 @@ public void test_suppression_bounces__email__get() throws IOException { @Test public void test_suppression_bounces__email__delete() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -2306,8 +2141,7 @@ public void test_suppression_bounces__email__delete() throws IOException { @Test public void test_suppression_invalid_emails_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2323,8 +2157,7 @@ public void test_suppression_invalid_emails_get() throws IOException { @Test public void test_suppression_invalid_emails_delete() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -2337,8 +2170,7 @@ public void test_suppression_invalid_emails_delete() throws IOException { @Test public void test_suppression_invalid_emails__email__get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2350,8 +2182,7 @@ public void test_suppression_invalid_emails__email__get() throws IOException { @Test public void test_suppression_invalid_emails__email__delete() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -2363,8 +2194,7 @@ public void test_suppression_invalid_emails__email__delete() throws IOException @Test public void test_suppression_spam_report__email__get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2376,8 +2206,7 @@ public void test_suppression_spam_report__email__get() throws IOException { @Test public void test_suppression_spam_report__email__delete() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -2389,8 +2218,7 @@ public void test_suppression_spam_report__email__delete() throws IOException { @Test public void test_suppression_spam_reports_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2406,8 +2234,7 @@ public void test_suppression_spam_reports_get() throws IOException { @Test public void test_suppression_spam_reports_delete() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -2420,8 +2247,7 @@ public void test_suppression_spam_reports_delete() throws IOException { @Test public void test_suppression_unsubscribes_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2437,8 +2263,7 @@ public void test_suppression_unsubscribes_get() throws IOException { @Test public void test_templates_post() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); @@ -2451,8 +2276,7 @@ public void test_templates_post() throws IOException { @Test public void test_templates_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2464,8 +2288,7 @@ public void test_templates_get() throws IOException { @Test public void test_templates__template_id__patch() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2478,8 +2301,7 @@ public void test_templates__template_id__patch() throws IOException { @Test public void test_templates__template_id__get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2491,8 +2313,7 @@ public void test_templates__template_id__get() throws IOException { @Test public void test_templates__template_id__delete() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -2504,8 +2325,7 @@ public void test_templates__template_id__delete() throws IOException { @Test public void test_templates__template_id__versions_post() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); @@ -2518,8 +2338,7 @@ public void test_templates__template_id__versions_post() throws IOException { @Test public void test_templates__template_id__versions__version_id__patch() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2532,8 +2351,7 @@ public void test_templates__template_id__versions__version_id__patch() throws IO @Test public void test_templates__template_id__versions__version_id__get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2545,8 +2363,7 @@ public void test_templates__template_id__versions__version_id__get() throws IOEx @Test public void test_templates__template_id__versions__version_id__delete() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -2558,8 +2375,7 @@ public void test_templates__template_id__versions__version_id__delete() throws I @Test public void test_templates__template_id__versions__version_id__activate_post() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2571,8 +2387,7 @@ public void test_templates__template_id__versions__version_id__activate_post() t @Test public void test_tracking_settings_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2586,8 +2401,7 @@ public void test_tracking_settings_get() throws IOException { @Test public void test_tracking_settings_click_patch() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2600,8 +2414,7 @@ public void test_tracking_settings_click_patch() throws IOException { @Test public void test_tracking_settings_click_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2613,8 +2426,7 @@ public void test_tracking_settings_click_get() throws IOException { @Test public void test_tracking_settings_google_analytics_patch() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2627,8 +2439,7 @@ public void test_tracking_settings_google_analytics_patch() throws IOException { @Test public void test_tracking_settings_google_analytics_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2640,8 +2451,7 @@ public void test_tracking_settings_google_analytics_get() throws IOException { @Test public void test_tracking_settings_open_patch() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2654,8 +2464,7 @@ public void test_tracking_settings_open_patch() throws IOException { @Test public void test_tracking_settings_open_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2667,8 +2476,7 @@ public void test_tracking_settings_open_get() throws IOException { @Test public void test_tracking_settings_subscription_patch() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2681,8 +2489,7 @@ public void test_tracking_settings_subscription_patch() throws IOException { @Test public void test_tracking_settings_subscription_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2694,8 +2501,7 @@ public void test_tracking_settings_subscription_get() throws IOException { @Test public void test_user_account_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2707,8 +2513,7 @@ public void test_user_account_get() throws IOException { @Test public void test_user_credits_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2720,8 +2525,7 @@ public void test_user_credits_get() throws IOException { @Test public void test_user_email_put() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2734,8 +2538,7 @@ public void test_user_email_put() throws IOException { @Test public void test_user_email_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2747,8 +2550,7 @@ public void test_user_email_get() throws IOException { @Test public void test_user_password_put() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2761,8 +2563,7 @@ public void test_user_password_put() throws IOException { @Test public void test_user_profile_patch() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2775,8 +2576,7 @@ public void test_user_profile_patch() throws IOException { @Test public void test_user_profile_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2788,8 +2588,7 @@ public void test_user_profile_get() throws IOException { @Test public void test_user_scheduled_sends_post() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); @@ -2802,8 +2601,7 @@ public void test_user_scheduled_sends_post() throws IOException { @Test public void test_user_scheduled_sends_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2815,8 +2613,7 @@ public void test_user_scheduled_sends_get() throws IOException { @Test public void test_user_scheduled_sends__batch_id__patch() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -2829,8 +2626,7 @@ public void test_user_scheduled_sends__batch_id__patch() throws IOException { @Test public void test_user_scheduled_sends__batch_id__get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2842,8 +2638,7 @@ public void test_user_scheduled_sends__batch_id__get() throws IOException { @Test public void test_user_scheduled_sends__batch_id__delete() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -2855,8 +2650,7 @@ public void test_user_scheduled_sends__batch_id__delete() throws IOException { @Test public void test_user_settings_enforced_tls_patch() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2869,8 +2663,7 @@ public void test_user_settings_enforced_tls_patch() throws IOException { @Test public void test_user_settings_enforced_tls_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2882,8 +2675,7 @@ public void test_user_settings_enforced_tls_get() throws IOException { @Test public void test_user_username_put() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2896,8 +2688,7 @@ public void test_user_username_put() throws IOException { @Test public void test_user_username_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2909,8 +2700,7 @@ public void test_user_username_get() throws IOException { @Test public void test_user_webhooks_event_settings_patch() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2923,8 +2713,7 @@ public void test_user_webhooks_event_settings_patch() throws IOException { @Test public void test_user_webhooks_event_settings_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2936,8 +2725,7 @@ public void test_user_webhooks_event_settings_get() throws IOException { @Test public void test_user_webhooks_event_test_post() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -2950,8 +2738,7 @@ public void test_user_webhooks_event_test_post() throws IOException { @Test public void test_user_webhooks_parse_settings_post() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); @@ -2964,8 +2751,7 @@ public void test_user_webhooks_parse_settings_post() throws IOException { @Test public void test_user_webhooks_parse_settings_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2977,8 +2763,7 @@ public void test_user_webhooks_parse_settings_get() throws IOException { @Test public void test_user_webhooks_parse_settings__hostname__patch() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -2991,8 +2776,7 @@ public void test_user_webhooks_parse_settings__hostname__patch() throws IOExcept @Test public void test_user_webhooks_parse_settings__hostname__get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -3004,8 +2788,7 @@ public void test_user_webhooks_parse_settings__hostname__get() throws IOExceptio @Test public void test_user_webhooks_parse_settings__hostname__delete() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -3017,8 +2800,7 @@ public void test_user_webhooks_parse_settings__hostname__delete() throws IOExcep @Test public void test_user_webhooks_parse_stats_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -3035,8 +2817,7 @@ public void test_user_webhooks_parse_stats_get() throws IOException { @Test public void test_whitelabel_domains_post() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); @@ -3049,8 +2830,7 @@ public void test_whitelabel_domains_post() throws IOException { @Test public void test_whitelabel_domains_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -3067,8 +2847,7 @@ public void test_whitelabel_domains_get() throws IOException { @Test public void test_whitelabel_domains_default_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -3080,8 +2859,7 @@ public void test_whitelabel_domains_default_get() throws IOException { @Test public void test_whitelabel_domains_subuser_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -3093,8 +2871,7 @@ public void test_whitelabel_domains_subuser_get() throws IOException { @Test public void test_whitelabel_domains_subuser_delete() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -3106,8 +2883,7 @@ public void test_whitelabel_domains_subuser_delete() throws IOException { @Test public void test_whitelabel_domains__domain_id__patch() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -3120,8 +2896,7 @@ public void test_whitelabel_domains__domain_id__patch() throws IOException { @Test public void test_whitelabel_domains__domain_id__get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -3133,8 +2908,7 @@ public void test_whitelabel_domains__domain_id__get() throws IOException { @Test public void test_whitelabel_domains__domain_id__delete() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -3146,8 +2920,7 @@ public void test_whitelabel_domains__domain_id__delete() throws IOException { @Test public void test_whitelabel_domains__domain_id__subuser_post() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); @@ -3160,8 +2933,7 @@ public void test_whitelabel_domains__domain_id__subuser_post() throws IOExceptio @Test public void test_whitelabel_domains__id__ips_post() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -3174,8 +2946,7 @@ public void test_whitelabel_domains__id__ips_post() throws IOException { @Test public void test_whitelabel_domains__id__ips__ip__delete() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -3187,8 +2958,7 @@ public void test_whitelabel_domains__id__ips__ip__delete() throws IOException { @Test public void test_whitelabel_domains__id__validate_post() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -3200,8 +2970,7 @@ public void test_whitelabel_domains__id__validate_post() throws IOException { @Test public void test_whitelabel_ips_post() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); @@ -3214,8 +2983,7 @@ public void test_whitelabel_ips_post() throws IOException { @Test public void test_whitelabel_ips_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -3230,8 +2998,7 @@ public void test_whitelabel_ips_get() throws IOException { @Test public void test_whitelabel_ips__id__get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -3243,8 +3010,7 @@ public void test_whitelabel_ips__id__get() throws IOException { @Test public void test_whitelabel_ips__id__delete() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -3256,8 +3022,7 @@ public void test_whitelabel_ips__id__delete() throws IOException { @Test public void test_whitelabel_ips__id__validate_post() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -3269,8 +3034,7 @@ public void test_whitelabel_ips__id__validate_post() throws IOException { @Test public void test_whitelabel_links_post() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "201"); Request request = new Request(); @@ -3285,8 +3049,7 @@ public void test_whitelabel_links_post() throws IOException { @Test public void test_whitelabel_links_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -3299,8 +3062,7 @@ public void test_whitelabel_links_get() throws IOException { @Test public void test_whitelabel_links_default_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -3313,8 +3075,7 @@ public void test_whitelabel_links_default_get() throws IOException { @Test public void test_whitelabel_links_subuser_get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -3327,8 +3088,7 @@ public void test_whitelabel_links_subuser_get() throws IOException { @Test public void test_whitelabel_links_subuser_delete() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -3341,8 +3101,7 @@ public void test_whitelabel_links_subuser_delete() throws IOException { @Test public void test_whitelabel_links__id__patch() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -3355,8 +3114,7 @@ public void test_whitelabel_links__id__patch() throws IOException { @Test public void test_whitelabel_links__id__get() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -3368,8 +3126,7 @@ public void test_whitelabel_links__id__get() throws IOException { @Test public void test_whitelabel_links__id__delete() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); @@ -3381,8 +3138,7 @@ public void test_whitelabel_links__id__delete() throws IOException { @Test public void test_whitelabel_links__id__validate_post() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); @@ -3394,8 +3150,7 @@ public void test_whitelabel_links__id__validate_post() throws IOException { @Test public void test_whitelabel_links__link_id__subuser_post() throws IOException { - SendGrid sg = new SendGrid("SENDGRID_API_KEY", true); - sg.setHost("localhost:4010"); + SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); diff --git a/test/prism.sh b/test/prism.sh deleted file mode 100755 index d6e0f251..00000000 --- a/test/prism.sh +++ /dev/null @@ -1,42 +0,0 @@ -#!/bin/bash - -install () { - -set -eu - -UNAME=$(uname) -ARCH=$(uname -m) -if [ "$UNAME" != "Linux" ] && [ "$UNAME" != "Darwin" ] && [ "$ARCH" != "x86_64" ] && [ "$ARCH" != "i686" ]; then - echo "Sorry, OS/Architecture not supported: ${UNAME}/${ARCH}. Download binary from https://github.com/stoplightio/prism/releases" - exit 1 -fi - -if [ "$UNAME" = "Darwin" ] ; then - OSX_ARCH=$(uname -m) - if [ "${OSX_ARCH}" = "x86_64" ] ; then - PLATFORM="darwin_amd64" - fi -elif [ "$UNAME" = "Linux" ] ; then - LINUX_ARCH=$(uname -m) - if [ "${LINUX_ARCH}" = "i686" ] ; then - PLATFORM="linux_386" - elif [ "${LINUX_ARCH}" = "x86_64" ] ; then - PLATFORM="linux_amd64" - fi -fi - -#LATEST=$(curl -s https://api.github.com/repos/stoplightio/prism/tags | grep -Eo '"name":.*?[^\\]",' | head -n 1 | sed 's/[," ]//g' | cut -d ':' -f 2) -LATEST="v0.1.5" -URL="https://github.com/stoplightio/prism/releases/download/$LATEST/prism_$PLATFORM" -DEST=./prism/bin/prism - -if [ -z $LATEST ] ; then - echo "Error requesting. Download binary from ${URL}" - exit 1 -else - curl -L $URL -o $DEST - chmod +x $DEST -fi -} - -install From 07b57b75b49191132d9670b23dae5725f7043be0 Mon Sep 17 00:00:00 2001 From: Twilio Date: Wed, 10 Jun 2020 19:37:20 +0000 Subject: [PATCH 190/345] [Librarian] Version Bump --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 342d5a09..e7ade9f9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,12 @@ # Change Log All notable changes to this project will be documented in this file. +[2020-06-10] Version 4.6.0 +-------------------------- +**Library - Feature** +- [PR #626](https://github.com/sendgrid/sendgrid-java/pull/626): add prism Docker setup. Thanks to [@childish-sambino](https://github.com/childish-sambino)! + + [2020-05-13] Version 4.5.0 -------------------------- **Library - Feature** From eabee46c82995606ba312563b381f2efa0401c2e Mon Sep 17 00:00:00 2001 From: Twilio Date: Wed, 10 Jun 2020 19:52:22 +0000 Subject: [PATCH 191/345] Release 4.6.0 --- CONTRIBUTING.md | 2 +- README.md | 6 +++--- pom.xml | 4 ++-- src/main/java/com/sendgrid/BaseInterface.java | 2 +- src/test/java/com/sendgrid/SendGridTest.java | 2 +- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 8367539d..43d8d8ea 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -101,7 +101,7 @@ touch Example.java Add the example you want to test to Example.java, including the headers at the top of the file. ``` bash -javac -classpath ../repo/com/sendgrid/4.5.0/sendgrid-4.5.0-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.5.0/sendgrid-4.5.0-jar.jar:. Example +javac -classpath ../repo/com/sendgrid/4.6.0/sendgrid-4.6.0-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.6.0/sendgrid-4.6.0-jar.jar:. Example ``` diff --git a/README.md b/README.md index 8caf5d24..20fa177f 100644 --- a/README.md +++ b/README.md @@ -39,7 +39,7 @@ We appreciate your continued support, thank you! ## Prerequisites - Java version Oracle JDK 7, 8 or OpenJDK 7 -- The Twilio SendGrid service, starting at the [free level](https://sendgrid.com/free?source=sendgrid-java) to send up to 4.5.0 emails for the first 30 days, then send 100 emails/day free forever or check out [our pricing](https://sendgrid.com/pricing?source=sendgrid-java). +- The Twilio SendGrid service, starting at the [free level](https://sendgrid.com/free?source=sendgrid-java) to send up to 4.6.0 emails for the first 30 days, then send 100 emails/day free forever or check out [our pricing](https://sendgrid.com/pricing?source=sendgrid-java). ## Setup Environment Variables @@ -67,7 +67,7 @@ Add the following to your build.gradle file in the root of your project. ... dependencies { ... - implementation 'com.sendgrid:sendgrid-java:4.5.0' + implementation 'com.sendgrid:sendgrid-java:4.6.0' } repositories { @@ -86,7 +86,7 @@ mvn install You can just drop the jar file in. It's a fat jar - it has all the dependencies built in. -[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.5.0/sendgrid-java.jar) +[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.6.0/sendgrid-java.jar) ## Dependencies diff --git a/pom.xml b/pom.xml index d0ff2d07..432908f1 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ com.sendgrid sendgrid-java Twilio SendGrid Java helper library - 4.5.0 + 4.6.0 This Java module allows you to quickly and easily send emails through Twilio SendGrid using Java. https://github.com/sendgrid/sendgrid-java @@ -26,7 +26,7 @@ https://github.com/sendgrid/sendgrid-java scm:git:git@github.com:sendgrid/sendgrid-java.git scm:git:git@github.com:sendgrid/sendgrid-java.git - 4.5.0 + 4.6.0 diff --git a/src/main/java/com/sendgrid/BaseInterface.java b/src/main/java/com/sendgrid/BaseInterface.java index d4813ecf..fad02bb7 100644 --- a/src/main/java/com/sendgrid/BaseInterface.java +++ b/src/main/java/com/sendgrid/BaseInterface.java @@ -11,7 +11,7 @@ */ public abstract class BaseInterface implements SendGridAPI { - private static final String VERSION = "4.5.0"; + private static final String VERSION = "4.6.0"; private static final String USER_AGENT = "sendgrid/" + VERSION + ";java"; private static final int RATE_LIMIT_RESPONSE_CODE = 429; diff --git a/src/test/java/com/sendgrid/SendGridTest.java b/src/test/java/com/sendgrid/SendGridTest.java index 0dc2a86e..c00cc776 100644 --- a/src/test/java/com/sendgrid/SendGridTest.java +++ b/src/test/java/com/sendgrid/SendGridTest.java @@ -43,7 +43,7 @@ public void testConstructWithClient() throws IOException { @Test public void testLibraryVersion() { SendGrid sg = new SendGrid(SENDGRID_API_KEY); - Assert.assertEquals(sg.getLibraryVersion(), "4.5.0"); + Assert.assertEquals(sg.getLibraryVersion(), "4.6.0"); } @Test From 3aa96eb05b4c3b94e20ae053cad500125d4e775f Mon Sep 17 00:00:00 2001 From: Sam Harrison Date: Wed, 10 Jun 2020 15:58:18 -0500 Subject: [PATCH 192/345] fix: run with openjdk8 in TravisCI --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index 7becc3f3..7b7c65a3 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,4 +1,5 @@ language: java +jdk: openjdk8 before_install: - echo $GPG_SECRET_KEYS | base64 --decode | $GPG_EXECUTABLE --import --batch || true env: From 3239e86640055dc4475763257e9c4e9f50314f8f Mon Sep 17 00:00:00 2001 From: childish-sambino Date: Thu, 2 Jul 2020 16:06:51 -0500 Subject: [PATCH 193/345] fix: don't use dependency version ranges (#635) Using a version range like this results in maven attempting to get SNAPSHOT information for the dependency since it's possible a SNAPSHOT release would match the version range. It's not a big deal, but there are better approaches. The idea was we want to pick up the latest 4.X version of java-http-client, but even a version range does not guarantee this. It only guarantees that a 4.X version will be used (not necessarily the latest release). What we really want is the latest non-snapshot, minor version release for all dependencies, not just java-http-client. Also note that Maven version ranges perform basic string comparison so even it they were capable of getting the latest release for a dependency, it might not actually be the latest release if proper semver is used. --- pom.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index 432908f1..081690eb 100644 --- a/pom.xml +++ b/pom.xml @@ -274,7 +274,7 @@ com.sendgrid java-http-client - [4.2,5.0) + 4.3.3 com.fasterxml.jackson.core @@ -300,7 +300,7 @@ org.mockito mockito-core - 2.1.0 + 2.28.2 test @@ -309,4 +309,4 @@ 1.65 - \ No newline at end of file + From ee6fad6e83a8ec508ac1ba50b14871d77347de1f Mon Sep 17 00:00:00 2001 From: Twilio Date: Wed, 8 Jul 2020 19:51:47 +0000 Subject: [PATCH 194/345] [Librarian] Version Bump --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index e7ade9f9..3e767f0a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,12 @@ # Change Log All notable changes to this project will be documented in this file. +[2020-07-08] Version 4.6.1 +-------------------------- +**Library - Fix** +- [PR #635](https://github.com/sendgrid/sendgrid-java/pull/635): don't use dependency version ranges. Thanks to [@childish-sambino](https://github.com/childish-sambino)! + + [2020-06-10] Version 4.6.0 -------------------------- **Library - Feature** From 88b85cb8cbc886b1481fb33c18d0346a3b44ed94 Mon Sep 17 00:00:00 2001 From: Twilio Date: Wed, 8 Jul 2020 19:57:39 +0000 Subject: [PATCH 195/345] Release 4.6.1 --- CONTRIBUTING.md | 2 +- README.md | 6 +++--- pom.xml | 8 ++++---- src/main/java/com/sendgrid/BaseInterface.java | 2 +- src/test/java/com/sendgrid/SendGridTest.java | 2 +- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 43d8d8ea..dbdcf01f 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -101,7 +101,7 @@ touch Example.java Add the example you want to test to Example.java, including the headers at the top of the file. ``` bash -javac -classpath ../repo/com/sendgrid/4.6.0/sendgrid-4.6.0-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.6.0/sendgrid-4.6.0-jar.jar:. Example +javac -classpath ../repo/com/sendgrid/4.6.1/sendgrid-4.6.1-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.6.1/sendgrid-4.6.1-jar.jar:. Example ``` diff --git a/README.md b/README.md index 20fa177f..955ceadd 100644 --- a/README.md +++ b/README.md @@ -39,7 +39,7 @@ We appreciate your continued support, thank you! ## Prerequisites - Java version Oracle JDK 7, 8 or OpenJDK 7 -- The Twilio SendGrid service, starting at the [free level](https://sendgrid.com/free?source=sendgrid-java) to send up to 4.6.0 emails for the first 30 days, then send 100 emails/day free forever or check out [our pricing](https://sendgrid.com/pricing?source=sendgrid-java). +- The Twilio SendGrid service, starting at the [free level](https://sendgrid.com/free?source=sendgrid-java) to send up to 4.6.1 emails for the first 30 days, then send 100 emails/day free forever or check out [our pricing](https://sendgrid.com/pricing?source=sendgrid-java). ## Setup Environment Variables @@ -67,7 +67,7 @@ Add the following to your build.gradle file in the root of your project. ... dependencies { ... - implementation 'com.sendgrid:sendgrid-java:4.6.0' + implementation 'com.sendgrid:sendgrid-java:4.6.1' } repositories { @@ -86,7 +86,7 @@ mvn install You can just drop the jar file in. It's a fat jar - it has all the dependencies built in. -[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.6.0/sendgrid-java.jar) +[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.6.1/sendgrid-java.jar) ## Dependencies diff --git a/pom.xml b/pom.xml index 081690eb..561d291e 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ com.sendgrid sendgrid-java Twilio SendGrid Java helper library - 4.6.0 + 4.6.1 This Java module allows you to quickly and easily send emails through Twilio SendGrid using Java. https://github.com/sendgrid/sendgrid-java @@ -26,7 +26,7 @@ https://github.com/sendgrid/sendgrid-java scm:git:git@github.com:sendgrid/sendgrid-java.git scm:git:git@github.com:sendgrid/sendgrid-java.git - 4.6.0 + 4.6.1 @@ -306,7 +306,7 @@ org.bouncycastle bcprov-jdk15on - 1.65 + 1.66 - + \ No newline at end of file diff --git a/src/main/java/com/sendgrid/BaseInterface.java b/src/main/java/com/sendgrid/BaseInterface.java index fad02bb7..776888d2 100644 --- a/src/main/java/com/sendgrid/BaseInterface.java +++ b/src/main/java/com/sendgrid/BaseInterface.java @@ -11,7 +11,7 @@ */ public abstract class BaseInterface implements SendGridAPI { - private static final String VERSION = "4.6.0"; + private static final String VERSION = "4.6.1"; private static final String USER_AGENT = "sendgrid/" + VERSION + ";java"; private static final int RATE_LIMIT_RESPONSE_CODE = 429; diff --git a/src/test/java/com/sendgrid/SendGridTest.java b/src/test/java/com/sendgrid/SendGridTest.java index c00cc776..87e2fede 100644 --- a/src/test/java/com/sendgrid/SendGridTest.java +++ b/src/test/java/com/sendgrid/SendGridTest.java @@ -43,7 +43,7 @@ public void testConstructWithClient() throws IOException { @Test public void testLibraryVersion() { SendGrid sg = new SendGrid(SENDGRID_API_KEY); - Assert.assertEquals(sg.getLibraryVersion(), "4.6.0"); + Assert.assertEquals(sg.getLibraryVersion(), "4.6.1"); } @Test From d9f4413707c38cd7c702d04574b207da56343002 Mon Sep 17 00:00:00 2001 From: Elise Shanholtz Date: Wed, 8 Jul 2020 13:30:14 -0700 Subject: [PATCH 196/345] fix: bouncycastle artifact ID --- pom.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index 561d291e..378bdea1 100644 --- a/pom.xml +++ b/pom.xml @@ -305,8 +305,8 @@ org.bouncycastle - bcprov-jdk15on - 1.66 + bcprov-jdk15to18 + 1.65 - \ No newline at end of file + From c6e63611735c0ff23885b2eae30d3bb2f88a3505 Mon Sep 17 00:00:00 2001 From: childish-sambino Date: Wed, 15 Jul 2020 09:04:50 -0500 Subject: [PATCH 197/345] docs: fix the kitchen sink example and link to it in the use cases doc (#637) The "Kitchen Sink" example and other mail-send examples were out-of-date. This change updates them to use the latest package version. --- USE_CASES.md | 5 +- .../DeleteIPFromAccessSettings.java | 30 +- examples/helpers/mail/Example.java | 102 +- examples/ips/RetrieveAllPools.java | 3 +- examples/temp.txt | 1917 ----------------- examples/temp2.txt | 1917 ----------------- 6 files changed, 48 insertions(+), 3926 deletions(-) delete mode 100644 examples/temp.txt delete mode 100644 examples/temp2.txt diff --git a/USE_CASES.md b/USE_CASES.md index 520825d6..4bea0387 100644 --- a/USE_CASES.md +++ b/USE_CASES.md @@ -1,7 +1,8 @@ This documentation provides examples for specific use cases. Please [open an issue](https://github.com/sendgrid/sendgrid-java/issues) or make a pull request for any use cases you would like us to document here. Thank you! -# Table of Contents +# Use Cases +* [Send Mail Examples](examples/helpers/mail/Example.java) * [Transactional Templates](#transactional-templates) * [Legacy Templates](#legacy-templates) * [How to Setup a Domain Authentication](#domain-authentication) @@ -9,7 +10,6 @@ This documentation provides examples for specific use cases. Please [open an iss * [Send an Email With Twilio Email (Pilot)](#send-an-email-with-twilio-email-pilot) * [Send an SMS Message](#send-an-sms-message) - # Transactional Templates For this example, we assume you have created a [transactional template](https://sendgrid.com/docs/User_Guide/Transactional_Templates/index.html) in the UI or via the API. Following is the template content we used for testing. @@ -110,7 +110,6 @@ public class Example { } ``` - # Legacy Templates For this example, we assume you have created a [legacy template](https://sendgrid.com/docs/User_Guide/Transactional_Templates/index.html). Following is the template content we used for testing. diff --git a/examples/accesssettings/DeleteIPFromAccessSettings.java b/examples/accesssettings/DeleteIPFromAccessSettings.java index d084c99c..ce9eeb0c 100644 --- a/examples/accesssettings/DeleteIPFromAccessSettings.java +++ b/examples/accesssettings/DeleteIPFromAccessSettings.java @@ -10,20 +10,20 @@ */ public class DeleteIPFromAccessSettings extends Example { - - private void run() throws IOException { - try { - String endPoint = "access_settings/whitelist"; - String body = "{\"ids\":[1,2,3]}"; - Request request = createRequest(Method.DELETE, endPoint, body); - Response response = execute(request); - printResponseInfo(response); - } catch (IOException ex) { - throw ex; - } + private void run() throws IOException { + try { + String endPoint = "access_settings/whitelist"; + String body = "{\"ids\":[1,2,3]}"; + Request request = createRequest(Method.DELETE, endPoint, body); + Response response = execute(request); + printResponseInfo(response); + } catch (IOException ex) { + throw ex; } + } - public static void main(String[] args) throws IOException { - DeleteIPFromAccessSettings deleteIPFromAccessSettings = new DeleteIPFromAccessSettings(); - deleteIPFromAccessSettings.run(); -} \ No newline at end of file + public static void main(String[] args) throws IOException { + DeleteIPFromAccessSettings deleteIPFromAccessSettings = new DeleteIPFromAccessSettings(); + deleteIPFromAccessSettings.run(); + } +} diff --git a/examples/helpers/mail/Example.java b/examples/helpers/mail/Example.java index a74cdbd5..8ff7ed42 100644 --- a/examples/helpers/mail/Example.java +++ b/examples/helpers/mail/Example.java @@ -1,33 +1,16 @@ -import com.sendgrid.ASM; -import com.sendgrid.Attachments; -import com.sendgrid.BccSettings; -import com.sendgrid.ClickTrackingSetting; -import com.sendgrid.Client; -import com.sendgrid.Content; -import com.sendgrid.Email; -import com.sendgrid.FooterSetting; -import com.sendgrid.GoogleAnalyticsSetting; -import com.sendgrid.Mail; -import com.sendgrid.MailSettings; import com.sendgrid.Method; -import com.sendgrid.OpenTrackingSetting; -import com.sendgrid.Personalization; import com.sendgrid.Request; import com.sendgrid.Response; import com.sendgrid.SendGrid; -import com.sendgrid.Setting; -import com.sendgrid.SpamCheckSetting; -import com.sendgrid.SubscriptionTrackingSetting; -import com.sendgrid.TrackingSettings; +import com.sendgrid.helpers.mail.Mail; +import com.sendgrid.helpers.mail.objects.*; import java.io.IOException; -import java.util.HashMap; -import java.util.Map; public class Example { // Fully populated Mail object - public static Mail buildKitchenSink() throws IOException { + public static Mail buildKitchenSink() { Mail mail = new Mail(); Email fromEmail = new Email(); @@ -143,7 +126,7 @@ public static Mail buildKitchenSink() throws IOException { ASM asm = new ASM(); asm.setGroupId(99); - asm.setGroupsToDisplay(new int[] {4,5,6,7,8}); + asm.setGroupsToDisplay(new int[]{4, 5, 6, 7, 8}); mail.setASM(asm); // This must be a valid [batch ID](https://sendgrid.com/docs/API_Reference/SMTP_API/scheduling_parameters.html) to work @@ -208,7 +191,7 @@ public static Mail buildKitchenSink() throws IOException { } // API V3 Dynamic Template implementation - public static Mail buildDynamicTemplate() throws IOException { + public static Mail buildDynamicTemplate() { Mail mail = new Mail(); Email fromEmail = new Email(); @@ -223,12 +206,12 @@ public static Mail buildDynamicTemplate() throws IOException { personalization.addDynamicTemplateData("city", "Denver"); personalization.addTo(new Email("test@example.com")); mail.addPersonalization(personalization); - + return mail; } // Minimum required to send an email - public static Mail buildHelloEmail() throws IOException { + public static Mail buildHelloEmail() { Email from = new Email("test@example.com"); String subject = "Hello World from the Twilio SendGrid Java Library"; Email to = new Email("test@example.com"); @@ -244,65 +227,38 @@ public static Mail buildHelloEmail() throws IOException { } public static void baselineExample() throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - sg.addRequestHeader("X-Mock", "true"); - - Request request = new Request(); - Mail helloWorld = buildHelloEmail(); - try { - request.setMethod(Method.POST); - request.setEndpoint("mail/send"); - request.setBody(helloWorld.build()); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } + final Mail helloWorld = buildHelloEmail(); + send(helloWorld); } public static void kitchenSinkExample() throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - sg.addRequestHeader("X-Mock", "true"); - - Request request = new Request(); - Mail kitchenSink = buildKitchenSink(); - try { - request.setMethod(Method.POST); - request.setEndpoint("mail/send"); - request.setBody(kitchenSink.build()); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } + final Mail kitchenSink = buildKitchenSink(); + send(kitchenSink); } public static void dynamicTemplateExample() throws IOException { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + final Mail dynamicTemplate = buildDynamicTemplate(); + send(dynamicTemplate); + } + + private static void send(final Mail mail) throws IOException { + final SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); sg.addRequestHeader("X-Mock", "true"); - Request request = new Request(); - Mail dynamicTemplate = buildDynamicTemplate(); - try { - request.setMethod(Method.POST); - request.setEndpoint("mail/send"); - request.setBody(dynamicTemplate.build()); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } + final Request request = new Request(); + request.setMethod(Method.POST); + request.setEndpoint("mail/send"); + request.setBody(mail.build()); + + final Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); } public static void main(String[] args) throws IOException { - // baselineExample(); - // kitchenSinkExample(); + baselineExample(); + kitchenSinkExample(); dynamicTemplateExample(); } -} \ No newline at end of file +} diff --git a/examples/ips/RetrieveAllPools.java b/examples/ips/RetrieveAllPools.java index a4362ce0..93bf78ec 100644 --- a/examples/ips/RetrieveAllPools.java +++ b/examples/ips/RetrieveAllPools.java @@ -27,4 +27,5 @@ public static void main(String[] args) throws IOException { } catch (IOException ex) { throw ex; } - } \ No newline at end of file + } +} diff --git a/examples/temp.txt b/examples/temp.txt deleted file mode 100644 index 83556ad8..00000000 --- a/examples/temp.txt +++ /dev/null @@ -1,1917 +0,0 @@ -META-INF/ -META-INF/MANIFEST.MF -LICENSE.md -com/ -com/sendgrid/ -com/sendgrid/SendGridAPI.class -com/sendgrid/SendGrid$1.class -com/sendgrid/APICallback.class -com/sendgrid/SendGrid$2.class -com/sendgrid/SendGrid.class -com/sendgrid/SpamCheckSetting.class -com/sendgrid/Attachments$Builder.class -com/sendgrid/OpenTrackingSetting.class -com/sendgrid/Setting.class -com/sendgrid/GoogleAnalyticsSetting.class -com/sendgrid/ASM.class -com/sendgrid/FooterSetting.class -com/sendgrid/Personalization.class -com/sendgrid/Email.class -com/sendgrid/MailSettings.class -com/sendgrid/BccSettings.class -com/sendgrid/Content.class -com/sendgrid/TrackingSettings.class -com/sendgrid/ClickTrackingSetting.class -com/sendgrid/Attachments.class -com/sendgrid/ContentVerifier.class -com/sendgrid/SubscriptionTrackingSetting.class -com/sendgrid/Mail.class -com/sendgrid/RateLimitException.class -META-INF/maven/ -META-INF/maven/com.sendgrid/ -META-INF/maven/com.sendgrid/sendgrid-java/ -META-INF/maven/com.sendgrid/sendgrid-java/pom.xml -META-INF/maven/com.sendgrid/sendgrid-java/pom.properties -com/sendgrid/Client$1.class -com/sendgrid/Client.class -com/sendgrid/HttpDeleteWithBody.class -com/sendgrid/Method.class -com/sendgrid/Request.class -com/sendgrid/Response.class -com/sendgrid/SendGridResponseHandler.class -org/ -org/apache/ -org/apache/http/ -org/apache/http/message/ -org/apache/http/message/BasicHeaderElementIterator.class -org/apache/http/message/LineParser.class -org/apache/http/message/BasicHttpEntityEnclosingRequest.class -org/apache/http/message/HeaderValueFormatter.class -org/apache/http/message/BasicLineFormatter.class -org/apache/http/message/BasicLineParser.class -org/apache/http/message/HeaderGroup.class -org/apache/http/message/BasicNameValuePair.class -org/apache/http/message/BufferedHeader.class -org/apache/http/message/BasicListHeaderIterator.class -org/apache/http/message/BasicHeader.class -org/apache/http/message/LineFormatter.class -org/apache/http/message/BasicHttpResponse.class -org/apache/http/message/BasicTokenIterator.class -org/apache/http/message/BasicRequestLine.class -org/apache/http/message/ParserCursor.class -org/apache/http/message/BasicHeaderValueParser.class -org/apache/http/message/BasicHeaderValueFormatter.class -org/apache/http/message/BasicHttpRequest.class -org/apache/http/message/HeaderValueParser.class -org/apache/http/message/AbstractHttpMessage.class -org/apache/http/message/TokenParser.class -org/apache/http/message/BasicHeaderIterator.class -org/apache/http/message/BasicHeaderElement.class -org/apache/http/message/BasicStatusLine.class -org/apache/http/concurrent/ -org/apache/http/concurrent/BasicFuture.class -org/apache/http/concurrent/Cancellable.class -org/apache/http/concurrent/FutureCallback.class -org/apache/http/HeaderElement.class -org/apache/http/TruncatedChunkException.class -org/apache/http/ExceptionLogger$1.class -org/apache/http/version.properties -org/apache/http/HeaderElementIterator.class -org/apache/http/ProtocolVersion.class -org/apache/http/ExceptionLogger.class -org/apache/http/HttpRequestFactory.class -org/apache/http/HttpConnection.class -org/apache/http/HttpRequestInterceptor.class -org/apache/http/ContentTooLongException.class -org/apache/http/UnsupportedHttpVersionException.class -org/apache/http/HttpResponseInterceptor.class -org/apache/http/HttpInetConnection.class -org/apache/http/HttpEntity.class -org/apache/http/HttpException.class -org/apache/http/annotation/ -org/apache/http/annotation/Obsolete.class -org/apache/http/annotation/Experimental.class -org/apache/http/annotation/NotThreadSafe.class -org/apache/http/annotation/Immutable.class -org/apache/http/annotation/ThreadSafe.class -org/apache/http/annotation/GuardedBy.class -org/apache/http/Consts.class -org/apache/http/HttpConnectionMetrics.class -org/apache/http/HttpMessage.class -org/apache/http/MethodNotSupportedException.class -org/apache/http/ParseException.class -org/apache/http/params/ -org/apache/http/params/CoreProtocolPNames.class -org/apache/http/params/SyncBasicHttpParams.class -org/apache/http/params/DefaultedHttpParams.class -org/apache/http/params/HttpParams.class -org/apache/http/params/AbstractHttpParams.class -org/apache/http/params/HttpAbstractParamBean.class -org/apache/http/params/HttpConnectionParams.class -org/apache/http/params/BasicHttpParams.class -org/apache/http/params/HttpConnectionParamBean.class -org/apache/http/params/CoreConnectionPNames.class -org/apache/http/params/HttpParamConfig.class -org/apache/http/params/HttpProtocolParamBean.class -org/apache/http/params/HttpProtocolParams.class -org/apache/http/params/HttpParamsNames.class -org/apache/http/ReasonPhraseCatalog.class -org/apache/http/MalformedChunkCodingException.class -org/apache/http/FormattedHeader.class -org/apache/http/HttpResponse.class -org/apache/http/HeaderIterator.class -org/apache/http/HttpHeaders.class -org/apache/http/HttpClientConnection.class -org/apache/http/HttpHost.class -org/apache/http/protocol/ -org/apache/http/protocol/ResponseDate.class -org/apache/http/protocol/ChainBuilder.class -org/apache/http/protocol/HttpDateGenerator.class -org/apache/http/protocol/HttpRequestHandlerMapper.class -org/apache/http/protocol/HTTP.class -org/apache/http/protocol/SyncBasicHttpContext.class -org/apache/http/protocol/HttpService$HttpRequestHandlerResolverAdapter.class -org/apache/http/protocol/ImmutableHttpProcessor.class -org/apache/http/protocol/BasicHttpContext.class -org/apache/http/protocol/HttpProcessorBuilder.class -org/apache/http/protocol/RequestTargetHost.class -org/apache/http/protocol/ResponseConnControl.class -org/apache/http/protocol/HttpRequestInterceptorList.class -org/apache/http/protocol/HttpRequestExecutor.class -org/apache/http/protocol/RequestUserAgent.class -org/apache/http/protocol/HttpRequestHandlerResolver.class -org/apache/http/protocol/BasicHttpProcessor.class -org/apache/http/protocol/ResponseServer.class -org/apache/http/protocol/ResponseContent.class -org/apache/http/protocol/RequestDate.class -org/apache/http/protocol/HttpService.class -org/apache/http/protocol/HttpContext.class -org/apache/http/protocol/RequestConnControl.class -org/apache/http/protocol/UriHttpRequestHandlerMapper.class -org/apache/http/protocol/UriPatternMatcher.class -org/apache/http/protocol/HttpCoreContext.class -org/apache/http/protocol/HttpProcessor.class -org/apache/http/protocol/RequestExpectContinue.class -org/apache/http/protocol/HttpExpectationVerifier.class -org/apache/http/protocol/HttpRequestHandlerRegistry.class -org/apache/http/protocol/HttpResponseInterceptorList.class -org/apache/http/protocol/HttpRequestHandler.class -org/apache/http/protocol/ExecutionContext.class -org/apache/http/protocol/RequestContent.class -org/apache/http/protocol/DefaultedHttpContext.class -org/apache/http/HttpStatus.class -org/apache/http/TokenIterator.class -org/apache/http/ssl/ -org/apache/http/ssl/SSLContextBuilder$TrustManagerDelegate.class -org/apache/http/ssl/TrustStrategy.class -org/apache/http/ssl/PrivateKeyStrategy.class -org/apache/http/ssl/SSLContextBuilder$KeyManagerDelegate.class -org/apache/http/ssl/SSLContexts.class -org/apache/http/ssl/SSLContextBuilder.class -org/apache/http/ssl/SSLInitializationException.class -org/apache/http/ssl/PrivateKeyDetails.class -org/apache/http/ConnectionReuseStrategy.class -org/apache/http/pool/ -org/apache/http/pool/AbstractConnPool$4.class -org/apache/http/pool/AbstractConnPool$2.class -org/apache/http/pool/PoolEntry.class -org/apache/http/pool/ConnFactory.class -org/apache/http/pool/RouteSpecificPool.class -org/apache/http/pool/AbstractConnPool$3.class -org/apache/http/pool/PoolEntryCallback.class -org/apache/http/pool/AbstractConnPool.class -org/apache/http/pool/ConnPoolControl.class -org/apache/http/pool/PoolStats.class -org/apache/http/pool/AbstractConnPool$1.class -org/apache/http/pool/ConnPool.class -org/apache/http/pool/PoolEntryFuture.class -org/apache/http/config/ -org/apache/http/config/MessageConstraints$Builder.class -org/apache/http/config/ConnectionConfig.class -org/apache/http/config/SocketConfig.class -org/apache/http/config/Registry.class -org/apache/http/config/ConnectionConfig$Builder.class -org/apache/http/config/RegistryBuilder.class -org/apache/http/config/SocketConfig$Builder.class -org/apache/http/config/MessageConstraints.class -org/apache/http/config/Lookup.class -org/apache/http/HttpResponseFactory.class -org/apache/http/HttpRequest.class -org/apache/http/RequestLine.class -org/apache/http/HttpServerConnection.class -org/apache/http/NameValuePair.class -org/apache/http/util/ -org/apache/http/util/LangUtils.class -org/apache/http/util/NetUtils.class -org/apache/http/util/EntityUtils.class -org/apache/http/util/EncodingUtils.class -org/apache/http/util/TextUtils.class -org/apache/http/util/CharsetUtils.class -org/apache/http/util/CharArrayBuffer.class -org/apache/http/util/ByteArrayBuffer.class -org/apache/http/util/Asserts.class -org/apache/http/util/ExceptionUtils.class -org/apache/http/util/Args.class -org/apache/http/util/VersionInfo.class -org/apache/http/HttpVersion.class -org/apache/http/HttpConnectionFactory.class -org/apache/http/impl/ -org/apache/http/impl/DefaultHttpRequestFactory.class -org/apache/http/impl/SocketHttpClientConnection.class -org/apache/http/impl/bootstrap/ -org/apache/http/impl/bootstrap/SSLServerSetupHandler.class -org/apache/http/impl/bootstrap/HttpServer$Status.class -org/apache/http/impl/bootstrap/ThreadFactoryImpl.class -org/apache/http/impl/bootstrap/Worker.class -org/apache/http/impl/bootstrap/RequestListener.class -org/apache/http/impl/bootstrap/ServerBootstrap.class -org/apache/http/impl/bootstrap/HttpServer.class -org/apache/http/impl/SocketHttpServerConnection.class -org/apache/http/impl/BHttpConnectionBase.class -org/apache/http/impl/DefaultConnectionReuseStrategy.class -org/apache/http/impl/DefaultHttpServerConnection.class -org/apache/http/impl/AbstractHttpClientConnection.class -org/apache/http/impl/EnglishReasonPhraseCatalog.class -org/apache/http/impl/DefaultBHttpServerConnection.class -org/apache/http/impl/DefaultHttpClientConnection.class -org/apache/http/impl/pool/ -org/apache/http/impl/pool/BasicConnPool.class -org/apache/http/impl/pool/BasicConnFactory.class -org/apache/http/impl/pool/BasicPoolEntry.class -org/apache/http/impl/DefaultBHttpClientConnectionFactory.class -org/apache/http/impl/DefaultBHttpClientConnection.class -org/apache/http/impl/AbstractHttpServerConnection.class -org/apache/http/impl/io/ -org/apache/http/impl/io/HttpResponseWriter.class -org/apache/http/impl/io/HttpTransportMetricsImpl.class -org/apache/http/impl/io/AbstractSessionInputBuffer.class -org/apache/http/impl/io/DefaultHttpRequestWriter.class -org/apache/http/impl/io/SessionInputBufferImpl.class -org/apache/http/impl/io/ContentLengthOutputStream.class -org/apache/http/impl/io/SocketInputBuffer.class -org/apache/http/impl/io/DefaultHttpResponseWriterFactory.class -org/apache/http/impl/io/DefaultHttpRequestWriterFactory.class -org/apache/http/impl/io/IdentityOutputStream.class -org/apache/http/impl/io/IdentityInputStream.class -org/apache/http/impl/io/SocketOutputBuffer.class -org/apache/http/impl/io/ChunkedOutputStream.class -org/apache/http/impl/io/DefaultHttpResponseParserFactory.class -org/apache/http/impl/io/ContentLengthInputStream.class -org/apache/http/impl/io/HttpRequestWriter.class -org/apache/http/impl/io/DefaultHttpResponseWriter.class -org/apache/http/impl/io/DefaultHttpRequestParserFactory.class -org/apache/http/impl/io/AbstractMessageParser.class -org/apache/http/impl/io/EmptyInputStream.class -org/apache/http/impl/io/DefaultHttpRequestParser.class -org/apache/http/impl/io/SessionOutputBufferImpl.class -org/apache/http/impl/io/HttpRequestParser.class -org/apache/http/impl/io/AbstractSessionOutputBuffer.class -org/apache/http/impl/io/DefaultHttpResponseParser.class -org/apache/http/impl/io/ChunkedInputStream.class -org/apache/http/impl/io/AbstractMessageWriter.class -org/apache/http/impl/io/HttpResponseParser.class -org/apache/http/impl/entity/ -org/apache/http/impl/entity/DisallowIdentityContentLengthStrategy.class -org/apache/http/impl/entity/LaxContentLengthStrategy.class -org/apache/http/impl/entity/StrictContentLengthStrategy.class -org/apache/http/impl/entity/EntityDeserializer.class -org/apache/http/impl/entity/EntitySerializer.class -org/apache/http/impl/DefaultHttpResponseFactory.class -org/apache/http/impl/DefaultBHttpServerConnectionFactory.class -org/apache/http/impl/HttpConnectionMetricsImpl.class -org/apache/http/impl/ConnSupport.class -org/apache/http/impl/NoConnectionReuseStrategy.class -org/apache/http/ConnectionClosedException.class -org/apache/http/StatusLine.class -org/apache/http/io/ -org/apache/http/io/HttpMessageWriterFactory.class -org/apache/http/io/BufferInfo.class -org/apache/http/io/HttpMessageParserFactory.class -org/apache/http/io/HttpTransportMetrics.class -org/apache/http/io/SessionOutputBuffer.class -org/apache/http/io/HttpMessageParser.class -org/apache/http/io/EofSensor.class -org/apache/http/io/HttpMessageWriter.class -org/apache/http/io/SessionInputBuffer.class -org/apache/http/NoHttpResponseException.class -org/apache/http/HttpEntityEnclosingRequest.class -org/apache/http/entity/ -org/apache/http/entity/ContentLengthStrategy.class -org/apache/http/entity/FileEntity.class -org/apache/http/entity/InputStreamEntity.class -org/apache/http/entity/SerializableEntity.class -org/apache/http/entity/StringEntity.class -org/apache/http/entity/HttpEntityWrapper.class -org/apache/http/entity/ContentProducer.class -org/apache/http/entity/BufferedHttpEntity.class -org/apache/http/entity/ByteArrayEntity.class -org/apache/http/entity/EntityTemplate.class -org/apache/http/entity/BasicHttpEntity.class -org/apache/http/entity/ContentType.class -org/apache/http/entity/AbstractHttpEntity.class -org/apache/http/ProtocolException.class -org/apache/http/MessageConstraintException.class -org/apache/http/ExceptionLogger$2.class -org/apache/http/Header.class -META-INF/DEPENDENCIES -META-INF/NOTICE -META-INF/LICENSE -META-INF/maven/org.apache.httpcomponents/ -META-INF/maven/org.apache.httpcomponents/httpcore/ -META-INF/maven/org.apache.httpcomponents/httpcore/pom.xml -META-INF/maven/org.apache.httpcomponents/httpcore/pom.properties -org/apache/http/auth/ -org/apache/http/auth/KerberosCredentials.class -org/apache/http/auth/AuthSchemeRegistry.class -org/apache/http/auth/ChallengeState.class -org/apache/http/auth/NTUserPrincipal.class -org/apache/http/auth/InvalidCredentialsException.class -org/apache/http/auth/AuthSchemeRegistry$1.class -org/apache/http/auth/NTCredentials.class -org/apache/http/auth/AuthScheme.class -org/apache/http/auth/AuthenticationException.class -org/apache/http/auth/params/ -org/apache/http/auth/params/AuthParams.class -org/apache/http/auth/params/AuthParamBean.class -org/apache/http/auth/params/AuthPNames.class -org/apache/http/auth/BasicUserPrincipal.class -org/apache/http/auth/AuthSchemeProvider.class -org/apache/http/auth/ContextAwareAuthScheme.class -org/apache/http/auth/AuthProtocolState.class -org/apache/http/auth/AuthScope.class -org/apache/http/auth/AuthSchemeFactory.class -org/apache/http/auth/AUTH.class -org/apache/http/auth/Credentials.class -org/apache/http/auth/UsernamePasswordCredentials.class -org/apache/http/auth/AuthOption.class -org/apache/http/auth/MalformedChallengeException.class -org/apache/http/auth/AuthState.class -org/apache/http/cookie/ -org/apache/http/cookie/CookieSpecRegistry.class -org/apache/http/cookie/CookieSpec.class -org/apache/http/cookie/CookieRestrictionViolationException.class -org/apache/http/cookie/CookieIdentityComparator.class -org/apache/http/cookie/SM.class -org/apache/http/cookie/CookieOrigin.class -org/apache/http/cookie/CookieAttributeHandler.class -org/apache/http/cookie/SetCookie2.class -org/apache/http/cookie/params/ -org/apache/http/cookie/params/CookieSpecParamBean.class -org/apache/http/cookie/params/CookieSpecPNames.class -org/apache/http/cookie/MalformedCookieException.class -org/apache/http/cookie/ClientCookie.class -org/apache/http/cookie/CommonCookieAttributeHandler.class -org/apache/http/cookie/CookieSpecRegistry$1.class -org/apache/http/cookie/CookiePathComparator.class -org/apache/http/cookie/SetCookie.class -org/apache/http/cookie/Cookie.class -org/apache/http/cookie/CookieSpecProvider.class -org/apache/http/cookie/CookiePriorityComparator.class -org/apache/http/cookie/CookieSpecFactory.class -org/apache/http/client/ -org/apache/http/client/RedirectStrategy.class -org/apache/http/client/ConnectionBackoffStrategy.class -org/apache/http/client/version.properties -org/apache/http/client/AuthenticationStrategy.class -org/apache/http/client/HttpClient.class -org/apache/http/client/methods/ -org/apache/http/client/methods/HttpOptions.class -org/apache/http/client/methods/AbortableHttpRequest.class -org/apache/http/client/methods/HttpRequestBase.class -org/apache/http/client/methods/AbstractExecutionAwareRequest$2.class -org/apache/http/client/methods/RequestBuilder.class -org/apache/http/client/methods/HttpGet.class -org/apache/http/client/methods/HttpPatch.class -org/apache/http/client/methods/HttpDelete.class -org/apache/http/client/methods/HttpUriRequest.class -org/apache/http/client/methods/CloseableHttpResponse.class -org/apache/http/client/methods/HttpRequestWrapper$1.class -org/apache/http/client/methods/RequestBuilder$InternalEntityEclosingRequest.class -org/apache/http/client/methods/HttpRequestWrapper$HttpEntityEnclosingRequestWrapper.class -org/apache/http/client/methods/RequestBuilder$InternalRequest.class -org/apache/http/client/methods/HttpRequestWrapper.class -org/apache/http/client/methods/HttpHead.class -org/apache/http/client/methods/HttpExecutionAware.class -org/apache/http/client/methods/AbstractExecutionAwareRequest.class -org/apache/http/client/methods/Configurable.class -org/apache/http/client/methods/AbstractExecutionAwareRequest$1.class -org/apache/http/client/methods/HttpPost.class -org/apache/http/client/methods/HttpEntityEnclosingRequestBase.class -org/apache/http/client/methods/HttpTrace.class -org/apache/http/client/methods/HttpPut.class -org/apache/http/client/CredentialsProvider.class -org/apache/http/client/UserTokenHandler.class -org/apache/http/client/CookieStore.class -org/apache/http/client/HttpResponseException.class -org/apache/http/client/ClientProtocolException.class -org/apache/http/client/AuthenticationHandler.class -org/apache/http/client/params/ -org/apache/http/client/params/HttpClientParams.class -org/apache/http/client/params/ClientPNames.class -org/apache/http/client/params/ClientParamBean.class -org/apache/http/client/params/CookiePolicy.class -org/apache/http/client/params/AuthPolicy.class -org/apache/http/client/params/HttpClientParamConfig.class -org/apache/http/client/params/AllClientPNames.class -org/apache/http/client/CircularRedirectException.class -org/apache/http/client/utils/ -org/apache/http/client/utils/Punycode.class -org/apache/http/client/utils/Idn.class -org/apache/http/client/utils/HttpClientUtils.class -org/apache/http/client/utils/URIBuilder.class -org/apache/http/client/utils/URIUtils.class -org/apache/http/client/utils/DateUtils$DateFormatHolder.class -org/apache/http/client/utils/URLEncodedUtils.class -org/apache/http/client/utils/JdkIdn.class -org/apache/http/client/utils/CloneUtils.class -org/apache/http/client/utils/DateUtils.class -org/apache/http/client/utils/Rfc3492Idn.class -org/apache/http/client/protocol/ -org/apache/http/client/protocol/RequestAcceptEncoding.class -org/apache/http/client/protocol/ResponseProcessCookies.class -org/apache/http/client/protocol/RequestDefaultHeaders.class -org/apache/http/client/protocol/ResponseContentEncoding$2.class -org/apache/http/client/protocol/ClientContext.class -org/apache/http/client/protocol/ResponseAuthCache.class -org/apache/http/client/protocol/RequestAuthenticationBase$1.class -org/apache/http/client/protocol/RequestTargetAuthentication.class -org/apache/http/client/protocol/RequestProxyAuthentication.class -org/apache/http/client/protocol/RequestClientConnControl.class -org/apache/http/client/protocol/ResponseAuthCache$1.class -org/apache/http/client/protocol/RequestAddCookies.class -org/apache/http/client/protocol/RequestAuthCache.class -org/apache/http/client/protocol/ClientContextConfigurer.class -org/apache/http/client/protocol/ResponseContentEncoding$1.class -org/apache/http/client/protocol/RequestExpectContinue.class -org/apache/http/client/protocol/ResponseContentEncoding.class -org/apache/http/client/protocol/RequestAuthenticationBase.class -org/apache/http/client/protocol/HttpClientContext.class -org/apache/http/client/BackoffManager.class -org/apache/http/client/config/ -org/apache/http/client/config/RequestConfig$Builder.class -org/apache/http/client/config/RequestConfig.class -org/apache/http/client/config/CookieSpecs.class -org/apache/http/client/config/AuthSchemes.class -org/apache/http/client/AuthCache.class -org/apache/http/client/ResponseHandler.class -org/apache/http/client/RedirectException.class -org/apache/http/client/RedirectHandler.class -org/apache/http/client/NonRepeatableRequestException.class -org/apache/http/client/entity/ -org/apache/http/client/entity/DeflateInputStream.class -org/apache/http/client/entity/InputStreamFactory.class -org/apache/http/client/entity/UrlEncodedFormEntity.class -org/apache/http/client/entity/DeflateInputStream$DeflateStream.class -org/apache/http/client/entity/GzipCompressingEntity.class -org/apache/http/client/entity/EntityBuilder.class -org/apache/http/client/entity/LazyDecompressingInputStream.class -org/apache/http/client/entity/DecompressingEntity.class -org/apache/http/client/entity/GzipDecompressingEntity$1.class -org/apache/http/client/entity/DeflateDecompressingEntity$1.class -org/apache/http/client/entity/GzipDecompressingEntity.class -org/apache/http/client/entity/DeflateDecompressingEntity.class -org/apache/http/client/HttpRequestRetryHandler.class -org/apache/http/client/RequestDirector.class -org/apache/http/client/ServiceUnavailableRetryStrategy.class -org/apache/http/conn/ -org/apache/http/conn/OperatedClientConnection.class -org/apache/http/conn/ManagedClientConnection.class -org/apache/http/conn/ConnectionRequest.class -org/apache/http/conn/EofSensorInputStream.class -org/apache/http/conn/ClientConnectionOperator.class -org/apache/http/conn/HttpClientConnectionOperator.class -org/apache/http/conn/BasicManagedEntity.class -org/apache/http/conn/ConnectionKeepAliveStrategy.class -org/apache/http/conn/ManagedHttpClientConnection.class -org/apache/http/conn/BasicEofSensorWatcher.class -org/apache/http/conn/HttpClientConnectionManager.class -org/apache/http/conn/HttpRoutedConnection.class -org/apache/http/conn/EofSensorWatcher.class -org/apache/http/conn/routing/ -org/apache/http/conn/routing/BasicRouteDirector.class -org/apache/http/conn/routing/RouteInfo$LayerType.class -org/apache/http/conn/routing/RouteInfo.class -org/apache/http/conn/routing/RouteTracker.class -org/apache/http/conn/routing/HttpRouteDirector.class -org/apache/http/conn/routing/HttpRoutePlanner.class -org/apache/http/conn/routing/RouteInfo$TunnelType.class -org/apache/http/conn/routing/HttpRoute.class -org/apache/http/conn/SchemePortResolver.class -org/apache/http/conn/ClientConnectionManager.class -org/apache/http/conn/params/ -org/apache/http/conn/params/ConnManagerParamBean.class -org/apache/http/conn/params/ConnRouteParamBean.class -org/apache/http/conn/params/ConnManagerParams$1.class -org/apache/http/conn/params/ConnManagerPNames.class -org/apache/http/conn/params/ConnConnectionParamBean.class -org/apache/http/conn/params/ConnManagerParams.class -org/apache/http/conn/params/ConnPerRouteBean.class -org/apache/http/conn/params/ConnConnectionPNames.class -org/apache/http/conn/params/ConnPerRoute.class -org/apache/http/conn/params/ConnRoutePNames.class -org/apache/http/conn/params/ConnRouteParams.class -org/apache/http/conn/socket/ -org/apache/http/conn/socket/PlainConnectionSocketFactory.class -org/apache/http/conn/socket/ConnectionSocketFactory.class -org/apache/http/conn/socket/LayeredConnectionSocketFactory.class -org/apache/http/conn/ClientConnectionRequest.class -org/apache/http/conn/ssl/ -org/apache/http/conn/ssl/TrustSelfSignedStrategy.class -org/apache/http/conn/ssl/SSLContextBuilder$TrustManagerDelegate.class -org/apache/http/conn/ssl/DefaultHostnameVerifier$1.class -org/apache/http/conn/ssl/DefaultHostnameVerifier$TYPE.class -org/apache/http/conn/ssl/BrowserCompatHostnameVerifier.class -org/apache/http/conn/ssl/TrustStrategy.class -org/apache/http/conn/ssl/PrivateKeyStrategy.class -org/apache/http/conn/ssl/SSLContextBuilder$KeyManagerDelegate.class -org/apache/http/conn/ssl/X509HostnameVerifier.class -org/apache/http/conn/ssl/AbstractVerifier.class -org/apache/http/conn/ssl/SSLSocketFactory.class -org/apache/http/conn/ssl/SSLConnectionSocketFactory.class -org/apache/http/conn/ssl/SSLContexts.class -org/apache/http/conn/ssl/AllowAllHostnameVerifier.class -org/apache/http/conn/ssl/StrictHostnameVerifier.class -org/apache/http/conn/ssl/SSLContextBuilder.class -org/apache/http/conn/ssl/DefaultHostnameVerifier.class -org/apache/http/conn/ssl/SSLInitializationException.class -org/apache/http/conn/ssl/PrivateKeyDetails.class -org/apache/http/conn/ssl/NoopHostnameVerifier.class -org/apache/http/conn/ConnectionPoolTimeoutException.class -org/apache/http/conn/ConnectionReleaseTrigger.class -org/apache/http/conn/ClientConnectionManagerFactory.class -org/apache/http/conn/scheme/ -org/apache/http/conn/scheme/SchemeSocketFactoryAdaptor.class -org/apache/http/conn/scheme/SchemeLayeredSocketFactory.class -org/apache/http/conn/scheme/PlainSocketFactory.class -org/apache/http/conn/scheme/LayeredSocketFactoryAdaptor.class -org/apache/http/conn/scheme/Scheme.class -org/apache/http/conn/scheme/HostNameResolver.class -org/apache/http/conn/scheme/SchemeRegistry.class -org/apache/http/conn/scheme/SchemeLayeredSocketFactoryAdaptor2.class -org/apache/http/conn/scheme/SchemeLayeredSocketFactoryAdaptor.class -org/apache/http/conn/scheme/SocketFactory.class -org/apache/http/conn/scheme/SchemeSocketFactory.class -org/apache/http/conn/scheme/SocketFactoryAdaptor.class -org/apache/http/conn/scheme/LayeredSchemeSocketFactory.class -org/apache/http/conn/scheme/LayeredSocketFactory.class -org/apache/http/conn/ConnectTimeoutException.class -org/apache/http/conn/util/ -org/apache/http/conn/util/DomainType.class -org/apache/http/conn/util/InetAddressUtils.class -org/apache/http/conn/util/PublicSuffixList.class -org/apache/http/conn/util/PublicSuffixMatcher.class -org/apache/http/conn/util/PublicSuffixListParser.class -org/apache/http/conn/util/PublicSuffixMatcherLoader.class -org/apache/http/conn/HttpInetSocketAddress.class -org/apache/http/conn/HttpConnectionFactory.class -org/apache/http/conn/HttpHostConnectException.class -org/apache/http/conn/DnsResolver.class -org/apache/http/conn/MultihomePlainSocketFactory.class -org/apache/http/conn/UnsupportedSchemeException.class -org/apache/http/impl/auth/ -org/apache/http/impl/auth/NTLMEngineImpl$CipherGen.class -org/apache/http/impl/auth/NTLMScheme$State.class -org/apache/http/impl/auth/GGSSchemeBase$1.class -org/apache/http/impl/auth/NTLMEngineException.class -org/apache/http/impl/auth/KerberosSchemeFactory.class -org/apache/http/impl/auth/RFC2617Scheme.class -org/apache/http/impl/auth/NTLMScheme.class -org/apache/http/impl/auth/KerberosScheme.class -org/apache/http/impl/auth/HttpEntityDigester.class -org/apache/http/impl/auth/SPNegoScheme.class -org/apache/http/impl/auth/BasicSchemeFactory.class -org/apache/http/impl/auth/NegotiateScheme.class -org/apache/http/impl/auth/NTLMSchemeFactory.class -org/apache/http/impl/auth/NTLMEngineImpl$NTLMMessage.class -org/apache/http/impl/auth/GGSSchemeBase.class -org/apache/http/impl/auth/HttpAuthenticator$1.class -org/apache/http/impl/auth/NTLMEngine.class -org/apache/http/impl/auth/DigestScheme.class -org/apache/http/impl/auth/NTLMEngineImpl.class -org/apache/http/impl/auth/AuthSchemeBase.class -org/apache/http/impl/auth/NTLMEngineImpl$Type3Message.class -org/apache/http/impl/auth/NegotiateSchemeFactory.class -org/apache/http/impl/auth/SpnegoTokenGenerator.class -org/apache/http/impl/auth/NTLMEngineImpl$HMACMD5.class -org/apache/http/impl/auth/HttpAuthenticator.class -org/apache/http/impl/auth/GGSSchemeBase$State.class -org/apache/http/impl/auth/NTLMEngineImpl$MD4.class -org/apache/http/impl/auth/NTLMEngineImpl$Type2Message.class -org/apache/http/impl/auth/DigestSchemeFactory.class -org/apache/http/impl/auth/SPNegoSchemeFactory.class -org/apache/http/impl/auth/NTLMEngineImpl$Type1Message.class -org/apache/http/impl/auth/BasicScheme.class -org/apache/http/impl/auth/UnsupportedDigestAlgorithmException.class -org/apache/http/impl/cookie/ -org/apache/http/impl/cookie/BestMatchSpec.class -org/apache/http/impl/cookie/RFC2965DiscardAttributeHandler.class -org/apache/http/impl/cookie/DefaultCookieSpecProvider$CompatibilityLevel.class -org/apache/http/impl/cookie/BasicClientCookie2.class -org/apache/http/impl/cookie/BasicSecureHandler.class -org/apache/http/impl/cookie/RFC2109Spec.class -org/apache/http/impl/cookie/RFC2965Spec.class -org/apache/http/impl/cookie/PublicSuffixFilter.class -org/apache/http/impl/cookie/RFC6265CookieSpecProvider$2.class -org/apache/http/impl/cookie/BasicDomainHandler.class -org/apache/http/impl/cookie/DefaultCookieSpecProvider.class -org/apache/http/impl/cookie/RFC2109VersionHandler.class -org/apache/http/impl/cookie/RFC2109DomainHandler.class -org/apache/http/impl/cookie/BasicMaxAgeHandler.class -org/apache/http/impl/cookie/NetscapeDraftSpec.class -org/apache/http/impl/cookie/LaxExpiresHandler.class -org/apache/http/impl/cookie/BasicExpiresHandler.class -org/apache/http/impl/cookie/BrowserCompatSpec.class -org/apache/http/impl/cookie/RFC2965SpecFactory.class -org/apache/http/impl/cookie/DefaultCookieSpec.class -org/apache/http/impl/cookie/BrowserCompatSpec$1.class -org/apache/http/impl/cookie/BrowserCompatVersionAttributeHandler.class -org/apache/http/impl/cookie/IgnoreSpec.class -org/apache/http/impl/cookie/RFC6265CookieSpecProvider.class -org/apache/http/impl/cookie/BestMatchSpecFactory.class -org/apache/http/impl/cookie/RFC6265CookieSpecProvider$CompatibilityLevel.class -org/apache/http/impl/cookie/RFC6265StrictSpec.class -org/apache/http/impl/cookie/RFC2965PortAttributeHandler.class -org/apache/http/impl/cookie/IgnoreSpecProvider.class -org/apache/http/impl/cookie/BasicClientCookie.class -org/apache/http/impl/cookie/NetscapeDraftHeaderParser.class -org/apache/http/impl/cookie/DefaultCookieSpecProvider$1.class -org/apache/http/impl/cookie/BasicPathHandler.class -org/apache/http/impl/cookie/LaxMaxAgeHandler.class -org/apache/http/impl/cookie/RFC6265CookieSpecBase.class -org/apache/http/impl/cookie/RFC2965SpecProvider.class -org/apache/http/impl/cookie/NetscapeDomainHandler.class -org/apache/http/impl/cookie/RFC2965DomainAttributeHandler.class -org/apache/http/impl/cookie/PublicSuffixDomainFilter.class -org/apache/http/impl/cookie/IgnoreSpecFactory.class -org/apache/http/impl/cookie/RFC6265CookieSpecProvider$1.class -org/apache/http/impl/cookie/RFC2965VersionAttributeHandler.class -org/apache/http/impl/cookie/AbstractCookieAttributeHandler.class -org/apache/http/impl/cookie/BrowserCompatSpecFactory.class -org/apache/http/impl/cookie/RFC2109SpecProvider.class -org/apache/http/impl/cookie/BrowserCompatSpecFactory$SecurityLevel.class -org/apache/http/impl/cookie/NetscapeDraftSpecFactory.class -org/apache/http/impl/cookie/CookieSpecBase.class -org/apache/http/impl/cookie/RFC6265LaxSpec.class -org/apache/http/impl/cookie/DateParseException.class -org/apache/http/impl/cookie/RFC2109SpecFactory.class -org/apache/http/impl/cookie/RFC6265CookieSpec.class -org/apache/http/impl/cookie/PublicSuffixListParser.class -org/apache/http/impl/cookie/AbstractCookieSpec.class -org/apache/http/impl/cookie/BasicCommentHandler.class -org/apache/http/impl/cookie/DateUtils.class -org/apache/http/impl/cookie/RFC2965CommentUrlAttributeHandler.class -org/apache/http/impl/cookie/NetscapeDraftSpecProvider.class -org/apache/http/impl/client/ -org/apache/http/impl/client/TargetAuthenticationStrategy.class -org/apache/http/impl/client/LaxRedirectStrategy.class -org/apache/http/impl/client/NoopUserTokenHandler.class -org/apache/http/impl/client/RoutedRequest.class -org/apache/http/impl/client/AuthenticationStrategyImpl.class -org/apache/http/impl/client/MinimalHttpClient$1.class -org/apache/http/impl/client/CloseableHttpResponseProxy.class -org/apache/http/impl/client/DefaultProxyAuthenticationHandler.class -org/apache/http/impl/client/DefaultRedirectStrategy.class -org/apache/http/impl/client/FutureRequestExecutionService.class -org/apache/http/impl/client/FutureRequestExecutionMetrics$DurationCounter.class -org/apache/http/impl/client/HttpClientBuilder.class -org/apache/http/impl/client/AutoRetryHttpClient.class -org/apache/http/impl/client/BasicCredentialsProvider.class -org/apache/http/impl/client/AbstractResponseHandler.class -org/apache/http/impl/client/IdleConnectionEvictor$DefaultThreadFactory.class -org/apache/http/impl/client/RequestWrapper.class -org/apache/http/impl/client/HttpRequestFutureTask.class -org/apache/http/impl/client/ProxyClient.class -org/apache/http/impl/client/ContentEncodingHttpClient.class -org/apache/http/impl/client/RedirectLocations.class -org/apache/http/impl/client/DefaultHttpRequestRetryHandler.class -org/apache/http/impl/client/HttpRequestTaskCallable.class -org/apache/http/impl/client/StandardHttpRequestRetryHandler.class -org/apache/http/impl/client/AIMDBackoffManager.class -org/apache/http/impl/client/AbstractAuthenticationHandler.class -org/apache/http/impl/client/DecompressingHttpClient.class -org/apache/http/impl/client/SystemClock.class -org/apache/http/impl/client/DefaultRedirectStrategyAdaptor.class -org/apache/http/impl/client/EntityEnclosingRequestWrapper$EntityWrapper.class -org/apache/http/impl/client/AbstractHttpClient.class -org/apache/http/impl/client/Clock.class -org/apache/http/impl/client/DefaultConnectionKeepAliveStrategy.class -org/apache/http/impl/client/InternalHttpClient$1.class -org/apache/http/impl/client/SystemDefaultHttpClient.class -org/apache/http/impl/client/AuthenticationStrategyAdaptor.class -org/apache/http/impl/client/IdleConnectionEvictor.class -org/apache/http/impl/client/SystemDefaultCredentialsProvider.class -org/apache/http/impl/client/FutureRequestExecutionMetrics.class -org/apache/http/impl/client/InternalHttpClient.class -org/apache/http/impl/client/HttpClientBuilder$2.class -org/apache/http/impl/client/NullBackoffStrategy.class -org/apache/http/impl/client/DefaultBackoffStrategy.class -org/apache/http/impl/client/HttpAuthenticator.class -org/apache/http/impl/client/BasicCookieStore.class -org/apache/http/impl/client/EntityEnclosingRequestWrapper.class -org/apache/http/impl/client/CookieSpecRegistries.class -org/apache/http/impl/client/DefaultClientConnectionReuseStrategy.class -org/apache/http/impl/client/DefaultServiceUnavailableRetryStrategy.class -org/apache/http/impl/client/DefaultRedirectHandler.class -org/apache/http/impl/client/HttpClients.class -org/apache/http/impl/client/CloseableHttpClient.class -org/apache/http/impl/client/TunnelRefusedException.class -org/apache/http/impl/client/MinimalHttpClient.class -org/apache/http/impl/client/BasicAuthCache.class -org/apache/http/impl/client/BasicResponseHandler.class -org/apache/http/impl/client/DefaultUserTokenHandler.class -org/apache/http/impl/client/HttpClientBuilder$1.class -org/apache/http/impl/client/ClientParamsStack.class -org/apache/http/impl/client/DefaultRequestDirector.class -org/apache/http/impl/client/DefaultTargetAuthenticationHandler.class -org/apache/http/impl/client/IdleConnectionEvictor$1.class -org/apache/http/impl/client/DefaultHttpClient.class -org/apache/http/impl/client/ProxyAuthenticationStrategy.class -org/apache/http/impl/execchain/ -org/apache/http/impl/execchain/ServiceUnavailableRetryExec.class -org/apache/http/impl/execchain/RequestEntityProxy.class -org/apache/http/impl/execchain/ProtocolExec.class -org/apache/http/impl/execchain/MinimalClientExec.class -org/apache/http/impl/execchain/MainClientExec.class -org/apache/http/impl/execchain/RedirectExec.class -org/apache/http/impl/execchain/ClientExecChain.class -org/apache/http/impl/execchain/ConnectionHolder.class -org/apache/http/impl/execchain/HttpResponseProxy.class -org/apache/http/impl/execchain/RetryExec.class -org/apache/http/impl/execchain/TunnelRefusedException.class -org/apache/http/impl/execchain/RequestAbortedException.class -org/apache/http/impl/execchain/ResponseEntityProxy.class -org/apache/http/impl/execchain/BackoffStrategyExec.class -org/apache/http/impl/conn/ -org/apache/http/impl/conn/HttpPoolEntry.class -org/apache/http/impl/conn/DefaultClientConnection.class -org/apache/http/impl/conn/CPool.class -org/apache/http/impl/conn/PoolingHttpClientConnectionManager.class -org/apache/http/impl/conn/Wire.class -org/apache/http/impl/conn/DefaultHttpClientConnectionOperator.class -org/apache/http/impl/conn/IdleConnectionHandler.class -org/apache/http/impl/conn/ManagedHttpClientConnectionFactory.class -org/apache/http/impl/conn/SystemDefaultRoutePlanner$1.class -org/apache/http/impl/conn/CPoolProxy.class -org/apache/http/impl/conn/DefaultHttpRoutePlanner.class -org/apache/http/impl/conn/PoolingClientConnectionManager.class -org/apache/http/impl/conn/DefaultManagedHttpClientConnection.class -org/apache/http/impl/conn/LoggingSessionInputBuffer.class -org/apache/http/impl/conn/ConnectionShutdownException.class -org/apache/http/impl/conn/LoggingOutputStream.class -org/apache/http/impl/conn/ManagedClientConnectionImpl.class -org/apache/http/impl/conn/PoolingHttpClientConnectionManager$ConfigData.class -org/apache/http/impl/conn/DefaultResponseParser.class -org/apache/http/impl/conn/LoggingInputStream.class -org/apache/http/impl/conn/AbstractClientConnAdapter.class -org/apache/http/impl/conn/SystemDefaultRoutePlanner.class -org/apache/http/impl/conn/tsccm/ -org/apache/http/impl/conn/tsccm/ConnPoolByRoute.class -org/apache/http/impl/conn/tsccm/ThreadSafeClientConnManager$1.class -org/apache/http/impl/conn/tsccm/RouteSpecificPool.class -org/apache/http/impl/conn/tsccm/ConnPoolByRoute$1.class -org/apache/http/impl/conn/tsccm/PoolEntryRequest.class -org/apache/http/impl/conn/tsccm/ThreadSafeClientConnManager.class -org/apache/http/impl/conn/tsccm/WaitingThread.class -org/apache/http/impl/conn/tsccm/WaitingThreadAborter.class -org/apache/http/impl/conn/tsccm/RouteSpecificPool$1.class -org/apache/http/impl/conn/tsccm/AbstractConnPool.class -org/apache/http/impl/conn/tsccm/BasicPoolEntryRef.class -org/apache/http/impl/conn/tsccm/BasicPooledConnAdapter.class -org/apache/http/impl/conn/tsccm/BasicPoolEntry.class -org/apache/http/impl/conn/SingleClientConnManager$ConnAdapter.class -org/apache/http/impl/conn/PoolingHttpClientConnectionManager$InternalConnectionFactory.class -org/apache/http/impl/conn/DefaultHttpResponseParserFactory.class -org/apache/http/impl/conn/AbstractPoolEntry.class -org/apache/http/impl/conn/ProxySelectorRoutePlanner$1.class -org/apache/http/impl/conn/AbstractPooledConnAdapter.class -org/apache/http/impl/conn/SingleClientConnManager$PoolEntry.class -org/apache/http/impl/conn/HttpConnPool$InternalConnFactory.class -org/apache/http/impl/conn/SchemeRegistryFactory.class -org/apache/http/impl/conn/DefaultClientConnectionOperator.class -org/apache/http/impl/conn/LoggingManagedHttpClientConnection.class -org/apache/http/impl/conn/LoggingSessionOutputBuffer.class -org/apache/http/impl/conn/BasicHttpClientConnectionManager$1.class -org/apache/http/impl/conn/DefaultProxyRoutePlanner.class -org/apache/http/impl/conn/BasicClientConnectionManager$1.class -org/apache/http/impl/conn/PoolingHttpClientConnectionManager$1.class -org/apache/http/impl/conn/BasicHttpClientConnectionManager.class -org/apache/http/impl/conn/PoolingClientConnectionManager$1.class -org/apache/http/impl/conn/IdleConnectionHandler$TimeValues.class -org/apache/http/impl/conn/CPoolEntry.class -org/apache/http/impl/conn/DefaultSchemePortResolver.class -org/apache/http/impl/conn/SingleClientConnManager.class -org/apache/http/impl/conn/DefaultRoutePlanner.class -org/apache/http/impl/conn/InMemoryDnsResolver.class -org/apache/http/impl/conn/DefaultHttpResponseParser.class -org/apache/http/impl/conn/HttpConnPool.class -org/apache/http/impl/conn/BasicClientConnectionManager.class -org/apache/http/impl/conn/SingleClientConnManager$1.class -org/apache/http/impl/conn/ProxySelectorRoutePlanner.class -org/apache/http/impl/conn/SystemDefaultDnsResolver.class -mozilla/ -mozilla/public-suffix-list.txt -META-INF/maven/org.apache.httpcomponents/httpclient/ -META-INF/maven/org.apache.httpcomponents/httpclient/pom.xml -META-INF/maven/org.apache.httpcomponents/httpclient/pom.properties -META-INF/NOTICE.txt -META-INF/LICENSE.txt -org/apache/commons/ -org/apache/commons/logging/ -org/apache/commons/logging/impl/ -org/apache/commons/logging/impl/AvalonLogger.class -org/apache/commons/logging/impl/SimpleLog.class -org/apache/commons/logging/impl/Log4JLogger.class -org/apache/commons/logging/impl/WeakHashtable.class -org/apache/commons/logging/impl/WeakHashtable$1.class -org/apache/commons/logging/impl/Jdk14Logger.class -org/apache/commons/logging/impl/ServletContextCleaner.class -org/apache/commons/logging/impl/WeakHashtable$WeakKey.class -org/apache/commons/logging/impl/NoOpLog.class -org/apache/commons/logging/impl/LogKitLogger.class -org/apache/commons/logging/impl/LogFactoryImpl$3.class -org/apache/commons/logging/impl/LogFactoryImpl$1.class -org/apache/commons/logging/impl/WeakHashtable$Referenced.class -org/apache/commons/logging/impl/SimpleLog$1.class -org/apache/commons/logging/impl/Jdk13LumberjackLogger.class -org/apache/commons/logging/impl/LogFactoryImpl.class -org/apache/commons/logging/impl/LogFactoryImpl$2.class -org/apache/commons/logging/impl/WeakHashtable$Entry.class -org/apache/commons/logging/LogSource.class -org/apache/commons/logging/LogFactory$4.class -org/apache/commons/logging/LogFactory$3.class -org/apache/commons/logging/LogFactory$6.class -org/apache/commons/logging/LogConfigurationException.class -org/apache/commons/logging/LogFactory.class -org/apache/commons/logging/LogFactory$5.class -org/apache/commons/logging/LogFactory$1.class -org/apache/commons/logging/LogFactory$2.class -org/apache/commons/logging/Log.class -META-INF/maven/commons-logging/ -META-INF/maven/commons-logging/commons-logging/ -META-INF/maven/commons-logging/commons-logging/pom.xml -META-INF/maven/commons-logging/commons-logging/pom.properties -org/apache/commons/codec/ -org/apache/commons/codec/binary/ -org/apache/commons/codec/binary/Base32.class -org/apache/commons/codec/binary/Base32InputStream.class -org/apache/commons/codec/binary/Base32OutputStream.class -org/apache/commons/codec/binary/Base64.class -org/apache/commons/codec/binary/Base64InputStream.class -org/apache/commons/codec/binary/Base64OutputStream.class -org/apache/commons/codec/binary/BaseNCodec$Context.class -org/apache/commons/codec/binary/BaseNCodec.class -org/apache/commons/codec/binary/BaseNCodecInputStream.class -org/apache/commons/codec/binary/BaseNCodecOutputStream.class -org/apache/commons/codec/binary/BinaryCodec.class -org/apache/commons/codec/binary/Hex.class -org/apache/commons/codec/binary/StringUtils.class -org/apache/commons/codec/BinaryDecoder.class -org/apache/commons/codec/BinaryEncoder.class -org/apache/commons/codec/CharEncoding.class -org/apache/commons/codec/Charsets.class -org/apache/commons/codec/Decoder.class -org/apache/commons/codec/DecoderException.class -org/apache/commons/codec/digest/ -org/apache/commons/codec/digest/B64.class -org/apache/commons/codec/digest/Crypt.class -org/apache/commons/codec/digest/DigestUtils.class -org/apache/commons/codec/digest/Md5Crypt.class -org/apache/commons/codec/digest/MessageDigestAlgorithms.class -org/apache/commons/codec/digest/Sha2Crypt.class -org/apache/commons/codec/digest/UnixCrypt.class -org/apache/commons/codec/Encoder.class -org/apache/commons/codec/EncoderException.class -org/apache/commons/codec/language/ -org/apache/commons/codec/language/AbstractCaverphone.class -org/apache/commons/codec/language/bm/ -org/apache/commons/codec/language/bm/ash_approx_any.txt -org/apache/commons/codec/language/bm/ash_approx_common.txt -org/apache/commons/codec/language/bm/ash_approx_cyrillic.txt -org/apache/commons/codec/language/bm/ash_approx_english.txt -org/apache/commons/codec/language/bm/ash_approx_french.txt -org/apache/commons/codec/language/bm/ash_approx_german.txt -org/apache/commons/codec/language/bm/ash_approx_hebrew.txt -org/apache/commons/codec/language/bm/ash_approx_hungarian.txt -org/apache/commons/codec/language/bm/ash_approx_polish.txt -org/apache/commons/codec/language/bm/ash_approx_romanian.txt -org/apache/commons/codec/language/bm/ash_approx_russian.txt -org/apache/commons/codec/language/bm/ash_approx_spanish.txt -org/apache/commons/codec/language/bm/ash_exact_any.txt -org/apache/commons/codec/language/bm/ash_exact_approx_common.txt -org/apache/commons/codec/language/bm/ash_exact_common.txt -org/apache/commons/codec/language/bm/ash_exact_cyrillic.txt -org/apache/commons/codec/language/bm/ash_exact_english.txt -org/apache/commons/codec/language/bm/ash_exact_french.txt -org/apache/commons/codec/language/bm/ash_exact_german.txt -org/apache/commons/codec/language/bm/ash_exact_hebrew.txt -org/apache/commons/codec/language/bm/ash_exact_hungarian.txt -org/apache/commons/codec/language/bm/ash_exact_polish.txt -org/apache/commons/codec/language/bm/ash_exact_romanian.txt -org/apache/commons/codec/language/bm/ash_exact_russian.txt -org/apache/commons/codec/language/bm/ash_exact_spanish.txt -org/apache/commons/codec/language/bm/ash_hebrew_common.txt -org/apache/commons/codec/language/bm/ash_languages.txt -org/apache/commons/codec/language/bm/ash_rules_any.txt -org/apache/commons/codec/language/bm/ash_rules_cyrillic.txt -org/apache/commons/codec/language/bm/ash_rules_english.txt -org/apache/commons/codec/language/bm/ash_rules_french.txt -org/apache/commons/codec/language/bm/ash_rules_german.txt -org/apache/commons/codec/language/bm/ash_rules_hebrew.txt -org/apache/commons/codec/language/bm/ash_rules_hungarian.txt -org/apache/commons/codec/language/bm/ash_rules_polish.txt -org/apache/commons/codec/language/bm/ash_rules_romanian.txt -org/apache/commons/codec/language/bm/ash_rules_russian.txt -org/apache/commons/codec/language/bm/ash_rules_spanish.txt -org/apache/commons/codec/language/bm/BeiderMorseEncoder.class -org/apache/commons/codec/language/bm/gen_approx_any.txt -org/apache/commons/codec/language/bm/gen_approx_arabic.txt -org/apache/commons/codec/language/bm/gen_approx_common.txt -org/apache/commons/codec/language/bm/gen_approx_cyrillic.txt -org/apache/commons/codec/language/bm/gen_approx_czech.txt -org/apache/commons/codec/language/bm/gen_approx_dutch.txt -org/apache/commons/codec/language/bm/gen_approx_english.txt -org/apache/commons/codec/language/bm/gen_approx_french.txt -org/apache/commons/codec/language/bm/gen_approx_german.txt -org/apache/commons/codec/language/bm/gen_approx_greek.txt -org/apache/commons/codec/language/bm/gen_approx_greeklatin.txt -org/apache/commons/codec/language/bm/gen_approx_hebrew.txt -org/apache/commons/codec/language/bm/gen_approx_hungarian.txt -org/apache/commons/codec/language/bm/gen_approx_italian.txt -org/apache/commons/codec/language/bm/gen_approx_polish.txt -org/apache/commons/codec/language/bm/gen_approx_portuguese.txt -org/apache/commons/codec/language/bm/gen_approx_romanian.txt -org/apache/commons/codec/language/bm/gen_approx_russian.txt -org/apache/commons/codec/language/bm/gen_approx_spanish.txt -org/apache/commons/codec/language/bm/gen_approx_turkish.txt -org/apache/commons/codec/language/bm/gen_exact_any.txt -org/apache/commons/codec/language/bm/gen_exact_approx_common.txt -org/apache/commons/codec/language/bm/gen_exact_arabic.txt -org/apache/commons/codec/language/bm/gen_exact_common.txt -org/apache/commons/codec/language/bm/gen_exact_cyrillic.txt -org/apache/commons/codec/language/bm/gen_exact_czech.txt -org/apache/commons/codec/language/bm/gen_exact_dutch.txt -org/apache/commons/codec/language/bm/gen_exact_english.txt -org/apache/commons/codec/language/bm/gen_exact_french.txt -org/apache/commons/codec/language/bm/gen_exact_german.txt -org/apache/commons/codec/language/bm/gen_exact_greek.txt -org/apache/commons/codec/language/bm/gen_exact_greeklatin.txt -org/apache/commons/codec/language/bm/gen_exact_hebrew.txt -org/apache/commons/codec/language/bm/gen_exact_hungarian.txt -org/apache/commons/codec/language/bm/gen_exact_italian.txt -org/apache/commons/codec/language/bm/gen_exact_polish.txt -org/apache/commons/codec/language/bm/gen_exact_portuguese.txt -org/apache/commons/codec/language/bm/gen_exact_romanian.txt -org/apache/commons/codec/language/bm/gen_exact_russian.txt -org/apache/commons/codec/language/bm/gen_exact_spanish.txt -org/apache/commons/codec/language/bm/gen_exact_turkish.txt -org/apache/commons/codec/language/bm/gen_hebrew_common.txt -org/apache/commons/codec/language/bm/gen_languages.txt -org/apache/commons/codec/language/bm/gen_rules_any.txt -org/apache/commons/codec/language/bm/gen_rules_arabic.txt -org/apache/commons/codec/language/bm/gen_rules_cyrillic.txt -org/apache/commons/codec/language/bm/gen_rules_czech.txt -org/apache/commons/codec/language/bm/gen_rules_dutch.txt -org/apache/commons/codec/language/bm/gen_rules_english.txt -org/apache/commons/codec/language/bm/gen_rules_french.txt -org/apache/commons/codec/language/bm/gen_rules_german.txt -org/apache/commons/codec/language/bm/gen_rules_greek.txt -org/apache/commons/codec/language/bm/gen_rules_greeklatin.txt -org/apache/commons/codec/language/bm/gen_rules_hebrew.txt -org/apache/commons/codec/language/bm/gen_rules_hungarian.txt -org/apache/commons/codec/language/bm/gen_rules_italian.txt -org/apache/commons/codec/language/bm/gen_rules_polish.txt -org/apache/commons/codec/language/bm/gen_rules_portuguese.txt -org/apache/commons/codec/language/bm/gen_rules_romanian.txt -org/apache/commons/codec/language/bm/gen_rules_russian.txt -org/apache/commons/codec/language/bm/gen_rules_spanish.txt -org/apache/commons/codec/language/bm/gen_rules_turkish.txt -org/apache/commons/codec/language/bm/Lang$1.class -org/apache/commons/codec/language/bm/Lang$LangRule.class -org/apache/commons/codec/language/bm/Lang.class -org/apache/commons/codec/language/bm/lang.txt -org/apache/commons/codec/language/bm/Languages$1.class -org/apache/commons/codec/language/bm/Languages$2.class -org/apache/commons/codec/language/bm/Languages$LanguageSet.class -org/apache/commons/codec/language/bm/Languages$SomeLanguages.class -org/apache/commons/codec/language/bm/Languages.class -org/apache/commons/codec/language/bm/NameType.class -org/apache/commons/codec/language/bm/PhoneticEngine$1.class -org/apache/commons/codec/language/bm/PhoneticEngine$PhonemeBuilder.class -org/apache/commons/codec/language/bm/PhoneticEngine$RulesApplication.class -org/apache/commons/codec/language/bm/PhoneticEngine.class -org/apache/commons/codec/language/bm/ResourceConstants.class -org/apache/commons/codec/language/bm/Rule$1.class -org/apache/commons/codec/language/bm/Rule$10.class -org/apache/commons/codec/language/bm/Rule$2.class -org/apache/commons/codec/language/bm/Rule$3.class -org/apache/commons/codec/language/bm/Rule$4.class -org/apache/commons/codec/language/bm/Rule$5.class -org/apache/commons/codec/language/bm/Rule$6.class -org/apache/commons/codec/language/bm/Rule$7.class -org/apache/commons/codec/language/bm/Rule$8.class -org/apache/commons/codec/language/bm/Rule$9.class -org/apache/commons/codec/language/bm/Rule$Phoneme$1.class -org/apache/commons/codec/language/bm/Rule$Phoneme.class -org/apache/commons/codec/language/bm/Rule$PhonemeExpr.class -org/apache/commons/codec/language/bm/Rule$PhonemeList.class -org/apache/commons/codec/language/bm/Rule$RPattern.class -org/apache/commons/codec/language/bm/Rule.class -org/apache/commons/codec/language/bm/RuleType.class -org/apache/commons/codec/language/bm/sep_approx_any.txt -org/apache/commons/codec/language/bm/sep_approx_common.txt -org/apache/commons/codec/language/bm/sep_approx_french.txt -org/apache/commons/codec/language/bm/sep_approx_hebrew.txt -org/apache/commons/codec/language/bm/sep_approx_italian.txt -org/apache/commons/codec/language/bm/sep_approx_portuguese.txt -org/apache/commons/codec/language/bm/sep_approx_spanish.txt -org/apache/commons/codec/language/bm/sep_exact_any.txt -org/apache/commons/codec/language/bm/sep_exact_approx_common.txt -org/apache/commons/codec/language/bm/sep_exact_common.txt -org/apache/commons/codec/language/bm/sep_exact_french.txt -org/apache/commons/codec/language/bm/sep_exact_hebrew.txt -org/apache/commons/codec/language/bm/sep_exact_italian.txt -org/apache/commons/codec/language/bm/sep_exact_portuguese.txt -org/apache/commons/codec/language/bm/sep_exact_spanish.txt -org/apache/commons/codec/language/bm/sep_hebrew_common.txt -org/apache/commons/codec/language/bm/sep_languages.txt -org/apache/commons/codec/language/bm/sep_rules_any.txt -org/apache/commons/codec/language/bm/sep_rules_french.txt -org/apache/commons/codec/language/bm/sep_rules_hebrew.txt -org/apache/commons/codec/language/bm/sep_rules_italian.txt -org/apache/commons/codec/language/bm/sep_rules_portuguese.txt -org/apache/commons/codec/language/bm/sep_rules_spanish.txt -org/apache/commons/codec/language/Caverphone.class -org/apache/commons/codec/language/Caverphone1.class -org/apache/commons/codec/language/Caverphone2.class -org/apache/commons/codec/language/ColognePhonetic$CologneBuffer.class -org/apache/commons/codec/language/ColognePhonetic$CologneInputBuffer.class -org/apache/commons/codec/language/ColognePhonetic$CologneOutputBuffer.class -org/apache/commons/codec/language/ColognePhonetic.class -org/apache/commons/codec/language/DoubleMetaphone$DoubleMetaphoneResult.class -org/apache/commons/codec/language/DoubleMetaphone.class -org/apache/commons/codec/language/MatchRatingApproachEncoder.class -org/apache/commons/codec/language/Metaphone.class -org/apache/commons/codec/language/Nysiis.class -org/apache/commons/codec/language/RefinedSoundex.class -org/apache/commons/codec/language/Soundex.class -org/apache/commons/codec/language/SoundexUtils.class -org/apache/commons/codec/net/ -org/apache/commons/codec/net/BCodec.class -org/apache/commons/codec/net/QCodec.class -org/apache/commons/codec/net/QuotedPrintableCodec.class -org/apache/commons/codec/net/RFC1522Codec.class -org/apache/commons/codec/net/URLCodec.class -org/apache/commons/codec/net/Utils.class -org/apache/commons/codec/StringDecoder.class -org/apache/commons/codec/StringEncoder.class -org/apache/commons/codec/StringEncoderComparator.class -META-INF/maven/commons-codec/ -META-INF/maven/commons-codec/commons-codec/ -META-INF/maven/commons-codec/commons-codec/pom.xml -META-INF/maven/commons-codec/commons-codec/pom.properties -META-INF/maven/com.fasterxml.jackson.core/ -META-INF/maven/com.fasterxml.jackson.core/jackson-core/ -META-INF/maven/com.fasterxml.jackson.core/jackson-core/pom.properties -META-INF/maven/com.fasterxml.jackson.core/jackson-core/pom.xml -META-INF/services/ -META-INF/services/com.fasterxml.jackson.core.JsonFactory -com/fasterxml/ -com/fasterxml/jackson/ -com/fasterxml/jackson/core/ -com/fasterxml/jackson/core/Base64Variant.class -com/fasterxml/jackson/core/Base64Variants.class -com/fasterxml/jackson/core/FormatFeature.class -com/fasterxml/jackson/core/FormatSchema.class -com/fasterxml/jackson/core/JsonEncoding.class -com/fasterxml/jackson/core/JsonFactory$Feature.class -com/fasterxml/jackson/core/JsonFactory.class -com/fasterxml/jackson/core/JsonGenerationException.class -com/fasterxml/jackson/core/JsonGenerator$1.class -com/fasterxml/jackson/core/JsonGenerator$Feature.class -com/fasterxml/jackson/core/JsonGenerator.class -com/fasterxml/jackson/core/JsonLocation.class -com/fasterxml/jackson/core/JsonParseException.class -com/fasterxml/jackson/core/JsonParser$Feature.class -com/fasterxml/jackson/core/JsonParser$NumberType.class -com/fasterxml/jackson/core/JsonParser.class -com/fasterxml/jackson/core/JsonPointer.class -com/fasterxml/jackson/core/JsonProcessingException.class -com/fasterxml/jackson/core/JsonStreamContext.class -com/fasterxml/jackson/core/JsonToken.class -com/fasterxml/jackson/core/JsonTokenId.class -com/fasterxml/jackson/core/JsonpCharacterEscapes.class -com/fasterxml/jackson/core/ObjectCodec.class -com/fasterxml/jackson/core/PrettyPrinter.class -com/fasterxml/jackson/core/SerializableString.class -com/fasterxml/jackson/core/TreeCodec.class -com/fasterxml/jackson/core/TreeNode.class -com/fasterxml/jackson/core/Version.class -com/fasterxml/jackson/core/Versioned.class -com/fasterxml/jackson/core/async/ -com/fasterxml/jackson/core/async/ByteArrayFeeder.class -com/fasterxml/jackson/core/async/ByteBufferFeeder.class -com/fasterxml/jackson/core/async/NonBlockingInputFeeder.class -com/fasterxml/jackson/core/base/ -com/fasterxml/jackson/core/base/GeneratorBase.class -com/fasterxml/jackson/core/base/ParserBase.class -com/fasterxml/jackson/core/base/ParserMinimalBase.class -com/fasterxml/jackson/core/filter/ -com/fasterxml/jackson/core/filter/FilteringGeneratorDelegate.class -com/fasterxml/jackson/core/filter/FilteringParserDelegate.class -com/fasterxml/jackson/core/filter/JsonPointerBasedFilter.class -com/fasterxml/jackson/core/filter/TokenFilter.class -com/fasterxml/jackson/core/filter/TokenFilterContext.class -com/fasterxml/jackson/core/format/ -com/fasterxml/jackson/core/format/DataFormatDetector.class -com/fasterxml/jackson/core/format/DataFormatMatcher.class -com/fasterxml/jackson/core/format/InputAccessor$Std.class -com/fasterxml/jackson/core/format/InputAccessor.class -com/fasterxml/jackson/core/format/MatchStrength.class -com/fasterxml/jackson/core/io/ -com/fasterxml/jackson/core/io/CharTypes.class -com/fasterxml/jackson/core/io/CharacterEscapes.class -com/fasterxml/jackson/core/io/DataOutputAsStream.class -com/fasterxml/jackson/core/io/IOContext.class -com/fasterxml/jackson/core/io/InputDecorator.class -com/fasterxml/jackson/core/io/JsonEOFException.class -com/fasterxml/jackson/core/io/JsonStringEncoder.class -com/fasterxml/jackson/core/io/MergedStream.class -com/fasterxml/jackson/core/io/NumberInput.class -com/fasterxml/jackson/core/io/NumberOutput.class -com/fasterxml/jackson/core/io/OutputDecorator.class -com/fasterxml/jackson/core/io/SegmentedStringWriter.class -com/fasterxml/jackson/core/io/SerializedString.class -com/fasterxml/jackson/core/io/UTF32Reader.class -com/fasterxml/jackson/core/io/UTF8Writer.class -com/fasterxml/jackson/core/json/ -com/fasterxml/jackson/core/json/ByteSourceJsonBootstrapper.class -com/fasterxml/jackson/core/json/DupDetector.class -com/fasterxml/jackson/core/json/JsonGeneratorImpl.class -com/fasterxml/jackson/core/json/JsonReadContext.class -com/fasterxml/jackson/core/json/JsonWriteContext.class -com/fasterxml/jackson/core/json/PackageVersion.class -com/fasterxml/jackson/core/json/ReaderBasedJsonParser.class -com/fasterxml/jackson/core/json/UTF8DataInputJsonParser.class -com/fasterxml/jackson/core/json/UTF8JsonGenerator.class -com/fasterxml/jackson/core/json/UTF8StreamJsonParser.class -com/fasterxml/jackson/core/json/WriterBasedJsonGenerator.class -com/fasterxml/jackson/core/json/async/ -com/fasterxml/jackson/core/json/async/NonBlockingJsonParser.class -com/fasterxml/jackson/core/json/async/NonBlockingJsonParserBase.class -com/fasterxml/jackson/core/sym/ -com/fasterxml/jackson/core/sym/ByteQuadsCanonicalizer$TableInfo.class -com/fasterxml/jackson/core/sym/ByteQuadsCanonicalizer.class -com/fasterxml/jackson/core/sym/CharsToNameCanonicalizer$Bucket.class -com/fasterxml/jackson/core/sym/CharsToNameCanonicalizer$TableInfo.class -com/fasterxml/jackson/core/sym/CharsToNameCanonicalizer.class -com/fasterxml/jackson/core/sym/Name.class -com/fasterxml/jackson/core/sym/Name1.class -com/fasterxml/jackson/core/sym/Name2.class -com/fasterxml/jackson/core/sym/Name3.class -com/fasterxml/jackson/core/sym/NameN.class -com/fasterxml/jackson/core/type/ -com/fasterxml/jackson/core/type/ResolvedType.class -com/fasterxml/jackson/core/type/TypeReference.class -com/fasterxml/jackson/core/type/WritableTypeId$Inclusion.class -com/fasterxml/jackson/core/type/WritableTypeId.class -com/fasterxml/jackson/core/util/ -com/fasterxml/jackson/core/util/BufferRecycler.class -com/fasterxml/jackson/core/util/BufferRecyclers.class -com/fasterxml/jackson/core/util/ByteArrayBuilder.class -com/fasterxml/jackson/core/util/DefaultIndenter.class -com/fasterxml/jackson/core/util/DefaultPrettyPrinter$FixedSpaceIndenter.class -com/fasterxml/jackson/core/util/DefaultPrettyPrinter$Indenter.class -com/fasterxml/jackson/core/util/DefaultPrettyPrinter$NopIndenter.class -com/fasterxml/jackson/core/util/DefaultPrettyPrinter.class -com/fasterxml/jackson/core/util/Instantiatable.class -com/fasterxml/jackson/core/util/InternCache.class -com/fasterxml/jackson/core/util/JsonGeneratorDelegate.class -com/fasterxml/jackson/core/util/JsonParserDelegate.class -com/fasterxml/jackson/core/util/JsonParserSequence.class -com/fasterxml/jackson/core/util/MinimalPrettyPrinter.class -com/fasterxml/jackson/core/util/RequestPayload.class -com/fasterxml/jackson/core/util/Separators.class -com/fasterxml/jackson/core/util/TextBuffer.class -com/fasterxml/jackson/core/util/ThreadLocalBufferManager$ThreadLocalBufferManagerHolder.class -com/fasterxml/jackson/core/util/ThreadLocalBufferManager.class -com/fasterxml/jackson/core/util/VersionUtil.class -META-INF/maven/com.fasterxml.jackson.core/jackson-annotations/ -META-INF/maven/com.fasterxml.jackson.core/jackson-annotations/pom.properties -META-INF/maven/com.fasterxml.jackson.core/jackson-annotations/pom.xml -com/fasterxml/jackson/annotation/ -com/fasterxml/jackson/annotation/JacksonAnnotation.class -com/fasterxml/jackson/annotation/JacksonAnnotationValue.class -com/fasterxml/jackson/annotation/JacksonAnnotationsInside.class -com/fasterxml/jackson/annotation/JacksonInject$Value.class -com/fasterxml/jackson/annotation/JacksonInject.class -com/fasterxml/jackson/annotation/JsonAlias.class -com/fasterxml/jackson/annotation/JsonAnyGetter.class -com/fasterxml/jackson/annotation/JsonAnySetter.class -com/fasterxml/jackson/annotation/JsonAutoDetect$1.class -com/fasterxml/jackson/annotation/JsonAutoDetect$Value.class -com/fasterxml/jackson/annotation/JsonAutoDetect$Visibility.class -com/fasterxml/jackson/annotation/JsonAutoDetect.class -com/fasterxml/jackson/annotation/JsonBackReference.class -com/fasterxml/jackson/annotation/JsonClassDescription.class -com/fasterxml/jackson/annotation/JsonCreator$Mode.class -com/fasterxml/jackson/annotation/JsonCreator.class -com/fasterxml/jackson/annotation/JsonEnumDefaultValue.class -com/fasterxml/jackson/annotation/JsonFilter.class -com/fasterxml/jackson/annotation/JsonFormat$Feature.class -com/fasterxml/jackson/annotation/JsonFormat$Features.class -com/fasterxml/jackson/annotation/JsonFormat$Shape.class -com/fasterxml/jackson/annotation/JsonFormat$Value.class -com/fasterxml/jackson/annotation/JsonFormat.class -com/fasterxml/jackson/annotation/JsonGetter.class -com/fasterxml/jackson/annotation/JsonIdentityInfo.class -com/fasterxml/jackson/annotation/JsonIdentityReference.class -com/fasterxml/jackson/annotation/JsonIgnore.class -com/fasterxml/jackson/annotation/JsonIgnoreProperties$Value.class -com/fasterxml/jackson/annotation/JsonIgnoreProperties.class -com/fasterxml/jackson/annotation/JsonIgnoreType.class -com/fasterxml/jackson/annotation/JsonInclude$Include.class -com/fasterxml/jackson/annotation/JsonInclude$Value.class -com/fasterxml/jackson/annotation/JsonInclude.class -com/fasterxml/jackson/annotation/JsonManagedReference.class -com/fasterxml/jackson/annotation/JsonMerge.class -com/fasterxml/jackson/annotation/JsonProperty$Access.class -com/fasterxml/jackson/annotation/JsonProperty.class -com/fasterxml/jackson/annotation/JsonPropertyDescription.class -com/fasterxml/jackson/annotation/JsonPropertyOrder.class -com/fasterxml/jackson/annotation/JsonRawValue.class -com/fasterxml/jackson/annotation/JsonRootName.class -com/fasterxml/jackson/annotation/JsonSetter$Value.class -com/fasterxml/jackson/annotation/JsonSetter.class -com/fasterxml/jackson/annotation/JsonSubTypes$Type.class -com/fasterxml/jackson/annotation/JsonSubTypes.class -com/fasterxml/jackson/annotation/JsonTypeId.class -com/fasterxml/jackson/annotation/JsonTypeInfo$As.class -com/fasterxml/jackson/annotation/JsonTypeInfo$Id.class -com/fasterxml/jackson/annotation/JsonTypeInfo$None.class -com/fasterxml/jackson/annotation/JsonTypeInfo.class -com/fasterxml/jackson/annotation/JsonTypeName.class -com/fasterxml/jackson/annotation/JsonUnwrapped.class -com/fasterxml/jackson/annotation/JsonValue.class -com/fasterxml/jackson/annotation/JsonView.class -com/fasterxml/jackson/annotation/Nulls.class -com/fasterxml/jackson/annotation/ObjectIdGenerator$IdKey.class -com/fasterxml/jackson/annotation/ObjectIdGenerator.class -com/fasterxml/jackson/annotation/ObjectIdGenerators$Base.class -com/fasterxml/jackson/annotation/ObjectIdGenerators$IntSequenceGenerator.class -com/fasterxml/jackson/annotation/ObjectIdGenerators$None.class -com/fasterxml/jackson/annotation/ObjectIdGenerators$PropertyGenerator.class -com/fasterxml/jackson/annotation/ObjectIdGenerators$StringIdGenerator.class -com/fasterxml/jackson/annotation/ObjectIdGenerators$UUIDGenerator.class -com/fasterxml/jackson/annotation/ObjectIdGenerators.class -com/fasterxml/jackson/annotation/ObjectIdResolver.class -com/fasterxml/jackson/annotation/OptBoolean.class -com/fasterxml/jackson/annotation/PropertyAccessor.class -com/fasterxml/jackson/annotation/SimpleObjectIdResolver.class -META-INF/maven/com.fasterxml.jackson.core/jackson-databind/ -META-INF/maven/com.fasterxml.jackson.core/jackson-databind/pom.properties -META-INF/maven/com.fasterxml.jackson.core/jackson-databind/pom.xml -META-INF/services/com.fasterxml.jackson.core.ObjectCodec -com/fasterxml/jackson/databind/ -com/fasterxml/jackson/databind/AbstractTypeResolver.class -com/fasterxml/jackson/databind/AnnotationIntrospector$ReferenceProperty$Type.class -com/fasterxml/jackson/databind/AnnotationIntrospector$ReferenceProperty.class -com/fasterxml/jackson/databind/AnnotationIntrospector.class -com/fasterxml/jackson/databind/BeanDescription.class -com/fasterxml/jackson/databind/BeanProperty$Bogus.class -com/fasterxml/jackson/databind/BeanProperty$Std.class -com/fasterxml/jackson/databind/BeanProperty.class -com/fasterxml/jackson/databind/DatabindContext.class -com/fasterxml/jackson/databind/DeserializationConfig.class -com/fasterxml/jackson/databind/DeserializationContext.class -com/fasterxml/jackson/databind/DeserializationFeature.class -com/fasterxml/jackson/databind/InjectableValues$Std.class -com/fasterxml/jackson/databind/InjectableValues.class -com/fasterxml/jackson/databind/JavaType.class -com/fasterxml/jackson/databind/JsonDeserializer$None.class -com/fasterxml/jackson/databind/JsonDeserializer.class -com/fasterxml/jackson/databind/JsonMappingException$Reference.class -com/fasterxml/jackson/databind/JsonMappingException.class -com/fasterxml/jackson/databind/JsonNode$1.class -com/fasterxml/jackson/databind/JsonNode.class -com/fasterxml/jackson/databind/JsonSerializable$Base.class -com/fasterxml/jackson/databind/JsonSerializable.class -com/fasterxml/jackson/databind/JsonSerializer$None.class -com/fasterxml/jackson/databind/JsonSerializer.class -com/fasterxml/jackson/databind/KeyDeserializer$None.class -com/fasterxml/jackson/databind/KeyDeserializer.class -com/fasterxml/jackson/databind/MapperFeature.class -com/fasterxml/jackson/databind/MappingIterator.class -com/fasterxml/jackson/databind/MappingJsonFactory.class -com/fasterxml/jackson/databind/Module$SetupContext.class -com/fasterxml/jackson/databind/Module.class -com/fasterxml/jackson/databind/ObjectMapper$1.class -com/fasterxml/jackson/databind/ObjectMapper$2.class -com/fasterxml/jackson/databind/ObjectMapper$3.class -com/fasterxml/jackson/databind/ObjectMapper$DefaultTypeResolverBuilder.class -com/fasterxml/jackson/databind/ObjectMapper$DefaultTyping.class -com/fasterxml/jackson/databind/ObjectMapper.class -com/fasterxml/jackson/databind/ObjectReader.class -com/fasterxml/jackson/databind/ObjectWriter$GeneratorSettings.class -com/fasterxml/jackson/databind/ObjectWriter$Prefetch.class -com/fasterxml/jackson/databind/ObjectWriter.class -com/fasterxml/jackson/databind/PropertyMetadata$MergeInfo.class -com/fasterxml/jackson/databind/PropertyMetadata.class -com/fasterxml/jackson/databind/PropertyName.class -com/fasterxml/jackson/databind/PropertyNamingStrategy$KebabCaseStrategy.class -com/fasterxml/jackson/databind/PropertyNamingStrategy$LowerCaseStrategy.class -com/fasterxml/jackson/databind/PropertyNamingStrategy$LowerCaseWithUnderscoresStrategy.class -com/fasterxml/jackson/databind/PropertyNamingStrategy$PascalCaseStrategy.class -com/fasterxml/jackson/databind/PropertyNamingStrategy$PropertyNamingStrategyBase.class -com/fasterxml/jackson/databind/PropertyNamingStrategy$SnakeCaseStrategy.class -com/fasterxml/jackson/databind/PropertyNamingStrategy$UpperCamelCaseStrategy.class -com/fasterxml/jackson/databind/PropertyNamingStrategy.class -com/fasterxml/jackson/databind/RuntimeJsonMappingException.class -com/fasterxml/jackson/databind/SequenceWriter.class -com/fasterxml/jackson/databind/SerializationConfig.class -com/fasterxml/jackson/databind/SerializationFeature.class -com/fasterxml/jackson/databind/SerializerProvider.class -com/fasterxml/jackson/databind/annotation/ -com/fasterxml/jackson/databind/annotation/JacksonStdImpl.class -com/fasterxml/jackson/databind/annotation/JsonAppend$Attr.class -com/fasterxml/jackson/databind/annotation/JsonAppend$Prop.class -com/fasterxml/jackson/databind/annotation/JsonAppend.class -com/fasterxml/jackson/databind/annotation/JsonDeserialize.class -com/fasterxml/jackson/databind/annotation/JsonNaming.class -com/fasterxml/jackson/databind/annotation/JsonPOJOBuilder$Value.class -com/fasterxml/jackson/databind/annotation/JsonPOJOBuilder.class -com/fasterxml/jackson/databind/annotation/JsonSerialize$Inclusion.class -com/fasterxml/jackson/databind/annotation/JsonSerialize$Typing.class -com/fasterxml/jackson/databind/annotation/JsonSerialize.class -com/fasterxml/jackson/databind/annotation/JsonTypeIdResolver.class -com/fasterxml/jackson/databind/annotation/JsonTypeResolver.class -com/fasterxml/jackson/databind/annotation/JsonValueInstantiator.class -com/fasterxml/jackson/databind/annotation/NoClass.class -com/fasterxml/jackson/databind/cfg/ -com/fasterxml/jackson/databind/cfg/BaseSettings.class -com/fasterxml/jackson/databind/cfg/ConfigFeature.class -com/fasterxml/jackson/databind/cfg/ConfigOverride$Empty.class -com/fasterxml/jackson/databind/cfg/ConfigOverride.class -com/fasterxml/jackson/databind/cfg/ConfigOverrides.class -com/fasterxml/jackson/databind/cfg/ContextAttributes$Impl.class -com/fasterxml/jackson/databind/cfg/ContextAttributes.class -com/fasterxml/jackson/databind/cfg/DeserializerFactoryConfig.class -com/fasterxml/jackson/databind/cfg/HandlerInstantiator.class -com/fasterxml/jackson/databind/cfg/MapperConfig.class -com/fasterxml/jackson/databind/cfg/MapperConfigBase.class -com/fasterxml/jackson/databind/cfg/MutableConfigOverride.class -com/fasterxml/jackson/databind/cfg/PackageVersion.class -com/fasterxml/jackson/databind/cfg/SerializerFactoryConfig.class -com/fasterxml/jackson/databind/deser/ -com/fasterxml/jackson/databind/deser/AbstractDeserializer.class -com/fasterxml/jackson/databind/deser/BasicDeserializerFactory$1.class -com/fasterxml/jackson/databind/deser/BasicDeserializerFactory.class -com/fasterxml/jackson/databind/deser/BeanDeserializer$1.class -com/fasterxml/jackson/databind/deser/BeanDeserializer$BeanReferring.class -com/fasterxml/jackson/databind/deser/BeanDeserializer.class -com/fasterxml/jackson/databind/deser/BeanDeserializerBase.class -com/fasterxml/jackson/databind/deser/BeanDeserializerBuilder.class -com/fasterxml/jackson/databind/deser/BeanDeserializerFactory.class -com/fasterxml/jackson/databind/deser/BeanDeserializerModifier.class -com/fasterxml/jackson/databind/deser/BuilderBasedDeserializer.class -com/fasterxml/jackson/databind/deser/ContextualDeserializer.class -com/fasterxml/jackson/databind/deser/ContextualKeyDeserializer.class -com/fasterxml/jackson/databind/deser/CreatorProperty.class -com/fasterxml/jackson/databind/deser/DataFormatReaders$AccessorForReader.class -com/fasterxml/jackson/databind/deser/DataFormatReaders$Match.class -com/fasterxml/jackson/databind/deser/DataFormatReaders.class -com/fasterxml/jackson/databind/deser/DefaultDeserializationContext$Impl.class -com/fasterxml/jackson/databind/deser/DefaultDeserializationContext.class -com/fasterxml/jackson/databind/deser/DeserializationProblemHandler.class -com/fasterxml/jackson/databind/deser/DeserializerCache.class -com/fasterxml/jackson/databind/deser/DeserializerFactory.class -com/fasterxml/jackson/databind/deser/Deserializers$Base.class -com/fasterxml/jackson/databind/deser/Deserializers.class -com/fasterxml/jackson/databind/deser/KeyDeserializers.class -com/fasterxml/jackson/databind/deser/NullValueProvider.class -com/fasterxml/jackson/databind/deser/ResolvableDeserializer.class -com/fasterxml/jackson/databind/deser/SettableAnyProperty$AnySetterReferring.class -com/fasterxml/jackson/databind/deser/SettableAnyProperty.class -com/fasterxml/jackson/databind/deser/SettableBeanProperty$Delegating.class -com/fasterxml/jackson/databind/deser/SettableBeanProperty.class -com/fasterxml/jackson/databind/deser/UnresolvedForwardReference.class -com/fasterxml/jackson/databind/deser/UnresolvedId.class -com/fasterxml/jackson/databind/deser/ValueInstantiator$Base.class -com/fasterxml/jackson/databind/deser/ValueInstantiator$Gettable.class -com/fasterxml/jackson/databind/deser/ValueInstantiator.class -com/fasterxml/jackson/databind/deser/ValueInstantiators$Base.class -com/fasterxml/jackson/databind/deser/ValueInstantiators.class -com/fasterxml/jackson/databind/deser/impl/ -com/fasterxml/jackson/databind/deser/impl/BeanAsArrayBuilderDeserializer.class -com/fasterxml/jackson/databind/deser/impl/BeanAsArrayDeserializer.class -com/fasterxml/jackson/databind/deser/impl/BeanPropertyMap.class -com/fasterxml/jackson/databind/deser/impl/CreatorCandidate$Param.class -com/fasterxml/jackson/databind/deser/impl/CreatorCandidate.class -com/fasterxml/jackson/databind/deser/impl/CreatorCollector$StdTypeConstructor.class -com/fasterxml/jackson/databind/deser/impl/CreatorCollector.class -com/fasterxml/jackson/databind/deser/impl/ErrorThrowingDeserializer.class -com/fasterxml/jackson/databind/deser/impl/ExternalTypeHandler$Builder.class -com/fasterxml/jackson/databind/deser/impl/ExternalTypeHandler$ExtTypedProperty.class -com/fasterxml/jackson/databind/deser/impl/ExternalTypeHandler.class -com/fasterxml/jackson/databind/deser/impl/FailingDeserializer.class -com/fasterxml/jackson/databind/deser/impl/FieldProperty.class -com/fasterxml/jackson/databind/deser/impl/InnerClassProperty.class -com/fasterxml/jackson/databind/deser/impl/JavaUtilCollectionsDeserializers$1.class -com/fasterxml/jackson/databind/deser/impl/JavaUtilCollectionsDeserializers$JavaUtilCollectionsConverter.class -com/fasterxml/jackson/databind/deser/impl/JavaUtilCollectionsDeserializers.class -com/fasterxml/jackson/databind/deser/impl/ManagedReferenceProperty.class -com/fasterxml/jackson/databind/deser/impl/MergingSettableBeanProperty.class -com/fasterxml/jackson/databind/deser/impl/MethodProperty.class -com/fasterxml/jackson/databind/deser/impl/NullsAsEmptyProvider.class -com/fasterxml/jackson/databind/deser/impl/NullsConstantProvider.class -com/fasterxml/jackson/databind/deser/impl/NullsFailProvider.class -com/fasterxml/jackson/databind/deser/impl/ObjectIdReader.class -com/fasterxml/jackson/databind/deser/impl/ObjectIdReferenceProperty$PropertyReferring.class -com/fasterxml/jackson/databind/deser/impl/ObjectIdReferenceProperty.class -com/fasterxml/jackson/databind/deser/impl/ObjectIdValueProperty.class -com/fasterxml/jackson/databind/deser/impl/PropertyBasedCreator$CaseInsensitiveMap.class -com/fasterxml/jackson/databind/deser/impl/PropertyBasedCreator.class -com/fasterxml/jackson/databind/deser/impl/PropertyBasedObjectIdGenerator.class -com/fasterxml/jackson/databind/deser/impl/PropertyValue$Any.class -com/fasterxml/jackson/databind/deser/impl/PropertyValue$Map.class -com/fasterxml/jackson/databind/deser/impl/PropertyValue$Regular.class -com/fasterxml/jackson/databind/deser/impl/PropertyValue.class -com/fasterxml/jackson/databind/deser/impl/PropertyValueBuffer.class -com/fasterxml/jackson/databind/deser/impl/ReadableObjectId$Referring.class -com/fasterxml/jackson/databind/deser/impl/ReadableObjectId.class -com/fasterxml/jackson/databind/deser/impl/SetterlessProperty.class -com/fasterxml/jackson/databind/deser/impl/TypeWrappedDeserializer.class -com/fasterxml/jackson/databind/deser/impl/UnwrappedPropertyHandler.class -com/fasterxml/jackson/databind/deser/impl/ValueInjector.class -com/fasterxml/jackson/databind/deser/std/ -com/fasterxml/jackson/databind/deser/std/ArrayBlockingQueueDeserializer.class -com/fasterxml/jackson/databind/deser/std/AtomicBooleanDeserializer.class -com/fasterxml/jackson/databind/deser/std/AtomicReferenceDeserializer.class -com/fasterxml/jackson/databind/deser/std/BaseNodeDeserializer.class -com/fasterxml/jackson/databind/deser/std/ByteBufferDeserializer.class -com/fasterxml/jackson/databind/deser/std/CollectionDeserializer$CollectionReferring.class -com/fasterxml/jackson/databind/deser/std/CollectionDeserializer$CollectionReferringAccumulator.class -com/fasterxml/jackson/databind/deser/std/CollectionDeserializer.class -com/fasterxml/jackson/databind/deser/std/ContainerDeserializerBase.class -com/fasterxml/jackson/databind/deser/std/DateDeserializers$CalendarDeserializer.class -com/fasterxml/jackson/databind/deser/std/DateDeserializers$DateBasedDeserializer.class -com/fasterxml/jackson/databind/deser/std/DateDeserializers$DateDeserializer.class -com/fasterxml/jackson/databind/deser/std/DateDeserializers$SqlDateDeserializer.class -com/fasterxml/jackson/databind/deser/std/DateDeserializers$TimestampDeserializer.class -com/fasterxml/jackson/databind/deser/std/DateDeserializers.class -com/fasterxml/jackson/databind/deser/std/DelegatingDeserializer.class -com/fasterxml/jackson/databind/deser/std/EnumDeserializer.class -com/fasterxml/jackson/databind/deser/std/EnumMapDeserializer.class -com/fasterxml/jackson/databind/deser/std/EnumSetDeserializer.class -com/fasterxml/jackson/databind/deser/std/FactoryBasedEnumDeserializer.class -com/fasterxml/jackson/databind/deser/std/FromStringDeserializer$Std.class -com/fasterxml/jackson/databind/deser/std/FromStringDeserializer.class -com/fasterxml/jackson/databind/deser/std/JdkDeserializers.class -com/fasterxml/jackson/databind/deser/std/JsonLocationInstantiator.class -com/fasterxml/jackson/databind/deser/std/JsonNodeDeserializer$ArrayDeserializer.class -com/fasterxml/jackson/databind/deser/std/JsonNodeDeserializer$ObjectDeserializer.class -com/fasterxml/jackson/databind/deser/std/JsonNodeDeserializer.class -com/fasterxml/jackson/databind/deser/std/MapDeserializer$MapReferring.class -com/fasterxml/jackson/databind/deser/std/MapDeserializer$MapReferringAccumulator.class -com/fasterxml/jackson/databind/deser/std/MapDeserializer.class -com/fasterxml/jackson/databind/deser/std/MapEntryDeserializer.class -com/fasterxml/jackson/databind/deser/std/NullifyingDeserializer.class -com/fasterxml/jackson/databind/deser/std/NumberDeserializers$1.class -com/fasterxml/jackson/databind/deser/std/NumberDeserializers$BigDecimalDeserializer.class -com/fasterxml/jackson/databind/deser/std/NumberDeserializers$BigIntegerDeserializer.class -com/fasterxml/jackson/databind/deser/std/NumberDeserializers$BooleanDeserializer.class -com/fasterxml/jackson/databind/deser/std/NumberDeserializers$ByteDeserializer.class -com/fasterxml/jackson/databind/deser/std/NumberDeserializers$CharacterDeserializer.class -com/fasterxml/jackson/databind/deser/std/NumberDeserializers$DoubleDeserializer.class -com/fasterxml/jackson/databind/deser/std/NumberDeserializers$FloatDeserializer.class -com/fasterxml/jackson/databind/deser/std/NumberDeserializers$IntegerDeserializer.class -com/fasterxml/jackson/databind/deser/std/NumberDeserializers$LongDeserializer.class -com/fasterxml/jackson/databind/deser/std/NumberDeserializers$NumberDeserializer.class -com/fasterxml/jackson/databind/deser/std/NumberDeserializers$PrimitiveOrWrapperDeserializer.class -com/fasterxml/jackson/databind/deser/std/NumberDeserializers$ShortDeserializer.class -com/fasterxml/jackson/databind/deser/std/NumberDeserializers.class -com/fasterxml/jackson/databind/deser/std/ObjectArrayDeserializer.class -com/fasterxml/jackson/databind/deser/std/PrimitiveArrayDeserializers$BooleanDeser.class -com/fasterxml/jackson/databind/deser/std/PrimitiveArrayDeserializers$ByteDeser.class -com/fasterxml/jackson/databind/deser/std/PrimitiveArrayDeserializers$CharDeser.class -com/fasterxml/jackson/databind/deser/std/PrimitiveArrayDeserializers$DoubleDeser.class -com/fasterxml/jackson/databind/deser/std/PrimitiveArrayDeserializers$FloatDeser.class -com/fasterxml/jackson/databind/deser/std/PrimitiveArrayDeserializers$IntDeser.class -com/fasterxml/jackson/databind/deser/std/PrimitiveArrayDeserializers$LongDeser.class -com/fasterxml/jackson/databind/deser/std/PrimitiveArrayDeserializers$ShortDeser.class -com/fasterxml/jackson/databind/deser/std/PrimitiveArrayDeserializers.class -com/fasterxml/jackson/databind/deser/std/ReferenceTypeDeserializer.class -com/fasterxml/jackson/databind/deser/std/StackTraceElementDeserializer.class -com/fasterxml/jackson/databind/deser/std/StdDelegatingDeserializer.class -com/fasterxml/jackson/databind/deser/std/StdDeserializer.class -com/fasterxml/jackson/databind/deser/std/StdKeyDeserializer$DelegatingKD.class -com/fasterxml/jackson/databind/deser/std/StdKeyDeserializer$EnumKD.class -com/fasterxml/jackson/databind/deser/std/StdKeyDeserializer$StringCtorKeyDeserializer.class -com/fasterxml/jackson/databind/deser/std/StdKeyDeserializer$StringFactoryKeyDeserializer.class -com/fasterxml/jackson/databind/deser/std/StdKeyDeserializer$StringKD.class -com/fasterxml/jackson/databind/deser/std/StdKeyDeserializer.class -com/fasterxml/jackson/databind/deser/std/StdKeyDeserializers.class -com/fasterxml/jackson/databind/deser/std/StdNodeBasedDeserializer.class -com/fasterxml/jackson/databind/deser/std/StdScalarDeserializer.class -com/fasterxml/jackson/databind/deser/std/StdValueInstantiator.class -com/fasterxml/jackson/databind/deser/std/StringArrayDeserializer.class -com/fasterxml/jackson/databind/deser/std/StringCollectionDeserializer.class -com/fasterxml/jackson/databind/deser/std/StringDeserializer.class -com/fasterxml/jackson/databind/deser/std/ThrowableDeserializer.class -com/fasterxml/jackson/databind/deser/std/TokenBufferDeserializer.class -com/fasterxml/jackson/databind/deser/std/UUIDDeserializer.class -com/fasterxml/jackson/databind/deser/std/UntypedObjectDeserializer$Vanilla.class -com/fasterxml/jackson/databind/deser/std/UntypedObjectDeserializer.class -com/fasterxml/jackson/databind/exc/ -com/fasterxml/jackson/databind/exc/IgnoredPropertyException.class -com/fasterxml/jackson/databind/exc/InvalidDefinitionException.class -com/fasterxml/jackson/databind/exc/InvalidFormatException.class -com/fasterxml/jackson/databind/exc/InvalidNullException.class -com/fasterxml/jackson/databind/exc/InvalidTypeIdException.class -com/fasterxml/jackson/databind/exc/MismatchedInputException.class -com/fasterxml/jackson/databind/exc/PropertyBindingException.class -com/fasterxml/jackson/databind/exc/UnrecognizedPropertyException.class -com/fasterxml/jackson/databind/ext/ -com/fasterxml/jackson/databind/ext/CoreXMLDeserializers$Std.class -com/fasterxml/jackson/databind/ext/CoreXMLDeserializers.class -com/fasterxml/jackson/databind/ext/CoreXMLSerializers$XMLGregorianCalendarSerializer.class -com/fasterxml/jackson/databind/ext/CoreXMLSerializers.class -com/fasterxml/jackson/databind/ext/DOMDeserializer$DocumentDeserializer.class -com/fasterxml/jackson/databind/ext/DOMDeserializer$NodeDeserializer.class -com/fasterxml/jackson/databind/ext/DOMDeserializer.class -com/fasterxml/jackson/databind/ext/DOMSerializer.class -com/fasterxml/jackson/databind/ext/Java7Support.class -com/fasterxml/jackson/databind/ext/Java7SupportImpl.class -com/fasterxml/jackson/databind/ext/NioPathDeserializer.class -com/fasterxml/jackson/databind/ext/NioPathSerializer.class -com/fasterxml/jackson/databind/ext/OptionalHandlerFactory.class -com/fasterxml/jackson/databind/introspect/ -com/fasterxml/jackson/databind/introspect/Annotated.class -com/fasterxml/jackson/databind/introspect/AnnotatedClass$Creators.class -com/fasterxml/jackson/databind/introspect/AnnotatedClass.class -com/fasterxml/jackson/databind/introspect/AnnotatedClassResolver.class -com/fasterxml/jackson/databind/introspect/AnnotatedConstructor$Serialization.class -com/fasterxml/jackson/databind/introspect/AnnotatedConstructor.class -com/fasterxml/jackson/databind/introspect/AnnotatedCreatorCollector.class -com/fasterxml/jackson/databind/introspect/AnnotatedField$Serialization.class -com/fasterxml/jackson/databind/introspect/AnnotatedField.class -com/fasterxml/jackson/databind/introspect/AnnotatedFieldCollector$FieldBuilder.class -com/fasterxml/jackson/databind/introspect/AnnotatedFieldCollector.class -com/fasterxml/jackson/databind/introspect/AnnotatedMember.class -com/fasterxml/jackson/databind/introspect/AnnotatedMethod$Serialization.class -com/fasterxml/jackson/databind/introspect/AnnotatedMethod.class -com/fasterxml/jackson/databind/introspect/AnnotatedMethodCollector$MethodBuilder.class -com/fasterxml/jackson/databind/introspect/AnnotatedMethodCollector.class -com/fasterxml/jackson/databind/introspect/AnnotatedMethodMap.class -com/fasterxml/jackson/databind/introspect/AnnotatedParameter.class -com/fasterxml/jackson/databind/introspect/AnnotatedWithParams.class -com/fasterxml/jackson/databind/introspect/AnnotationCollector$EmptyCollector.class -com/fasterxml/jackson/databind/introspect/AnnotationCollector$NCollector.class -com/fasterxml/jackson/databind/introspect/AnnotationCollector$NoAnnotations.class -com/fasterxml/jackson/databind/introspect/AnnotationCollector$OneAnnotation.class -com/fasterxml/jackson/databind/introspect/AnnotationCollector$OneCollector.class -com/fasterxml/jackson/databind/introspect/AnnotationCollector$TwoAnnotations.class -com/fasterxml/jackson/databind/introspect/AnnotationCollector.class -com/fasterxml/jackson/databind/introspect/AnnotationIntrospectorPair.class -com/fasterxml/jackson/databind/introspect/AnnotationMap.class -com/fasterxml/jackson/databind/introspect/BasicBeanDescription.class -com/fasterxml/jackson/databind/introspect/BasicClassIntrospector.class -com/fasterxml/jackson/databind/introspect/BeanPropertyDefinition.class -com/fasterxml/jackson/databind/introspect/ClassIntrospector$MixInResolver.class -com/fasterxml/jackson/databind/introspect/ClassIntrospector.class -com/fasterxml/jackson/databind/introspect/CollectorBase.class -com/fasterxml/jackson/databind/introspect/ConcreteBeanPropertyBase.class -com/fasterxml/jackson/databind/introspect/JacksonAnnotationIntrospector$1.class -com/fasterxml/jackson/databind/introspect/JacksonAnnotationIntrospector.class -com/fasterxml/jackson/databind/introspect/MemberKey.class -com/fasterxml/jackson/databind/introspect/NopAnnotationIntrospector$1.class -com/fasterxml/jackson/databind/introspect/NopAnnotationIntrospector.class -com/fasterxml/jackson/databind/introspect/ObjectIdInfo.class -com/fasterxml/jackson/databind/introspect/POJOPropertiesCollector.class -com/fasterxml/jackson/databind/introspect/POJOPropertyBuilder$1.class -com/fasterxml/jackson/databind/introspect/POJOPropertyBuilder$10.class -com/fasterxml/jackson/databind/introspect/POJOPropertyBuilder$2.class -com/fasterxml/jackson/databind/introspect/POJOPropertyBuilder$3.class -com/fasterxml/jackson/databind/introspect/POJOPropertyBuilder$4.class -com/fasterxml/jackson/databind/introspect/POJOPropertyBuilder$5.class -com/fasterxml/jackson/databind/introspect/POJOPropertyBuilder$6.class -com/fasterxml/jackson/databind/introspect/POJOPropertyBuilder$7.class -com/fasterxml/jackson/databind/introspect/POJOPropertyBuilder$8.class -com/fasterxml/jackson/databind/introspect/POJOPropertyBuilder$9.class -com/fasterxml/jackson/databind/introspect/POJOPropertyBuilder$Linked.class -com/fasterxml/jackson/databind/introspect/POJOPropertyBuilder$MemberIterator.class -com/fasterxml/jackson/databind/introspect/POJOPropertyBuilder$WithMember.class -com/fasterxml/jackson/databind/introspect/POJOPropertyBuilder.class -com/fasterxml/jackson/databind/introspect/SimpleMixInResolver.class -com/fasterxml/jackson/databind/introspect/TypeResolutionContext$Basic.class -com/fasterxml/jackson/databind/introspect/TypeResolutionContext.class -com/fasterxml/jackson/databind/introspect/VirtualAnnotatedMember.class -com/fasterxml/jackson/databind/introspect/VisibilityChecker$1.class -com/fasterxml/jackson/databind/introspect/VisibilityChecker$Std.class -com/fasterxml/jackson/databind/introspect/VisibilityChecker.class -com/fasterxml/jackson/databind/introspect/WithMember.class -com/fasterxml/jackson/databind/jsonFormatVisitors/ -com/fasterxml/jackson/databind/jsonFormatVisitors/JsonAnyFormatVisitor$Base.class -com/fasterxml/jackson/databind/jsonFormatVisitors/JsonAnyFormatVisitor.class -com/fasterxml/jackson/databind/jsonFormatVisitors/JsonArrayFormatVisitor$Base.class -com/fasterxml/jackson/databind/jsonFormatVisitors/JsonArrayFormatVisitor.class -com/fasterxml/jackson/databind/jsonFormatVisitors/JsonBooleanFormatVisitor$Base.class -com/fasterxml/jackson/databind/jsonFormatVisitors/JsonBooleanFormatVisitor.class -com/fasterxml/jackson/databind/jsonFormatVisitors/JsonFormatTypes.class -com/fasterxml/jackson/databind/jsonFormatVisitors/JsonFormatVisitable.class -com/fasterxml/jackson/databind/jsonFormatVisitors/JsonFormatVisitorWithSerializerProvider.class -com/fasterxml/jackson/databind/jsonFormatVisitors/JsonFormatVisitorWrapper$Base.class -com/fasterxml/jackson/databind/jsonFormatVisitors/JsonFormatVisitorWrapper.class -com/fasterxml/jackson/databind/jsonFormatVisitors/JsonIntegerFormatVisitor$Base.class -com/fasterxml/jackson/databind/jsonFormatVisitors/JsonIntegerFormatVisitor.class -com/fasterxml/jackson/databind/jsonFormatVisitors/JsonMapFormatVisitor$Base.class -com/fasterxml/jackson/databind/jsonFormatVisitors/JsonMapFormatVisitor.class -com/fasterxml/jackson/databind/jsonFormatVisitors/JsonNullFormatVisitor$Base.class -com/fasterxml/jackson/databind/jsonFormatVisitors/JsonNullFormatVisitor.class -com/fasterxml/jackson/databind/jsonFormatVisitors/JsonNumberFormatVisitor$Base.class -com/fasterxml/jackson/databind/jsonFormatVisitors/JsonNumberFormatVisitor.class -com/fasterxml/jackson/databind/jsonFormatVisitors/JsonObjectFormatVisitor$Base.class -com/fasterxml/jackson/databind/jsonFormatVisitors/JsonObjectFormatVisitor.class -com/fasterxml/jackson/databind/jsonFormatVisitors/JsonStringFormatVisitor$Base.class -com/fasterxml/jackson/databind/jsonFormatVisitors/JsonStringFormatVisitor.class -com/fasterxml/jackson/databind/jsonFormatVisitors/JsonValueFormat.class -com/fasterxml/jackson/databind/jsonFormatVisitors/JsonValueFormatVisitor$Base.class -com/fasterxml/jackson/databind/jsonFormatVisitors/JsonValueFormatVisitor.class -com/fasterxml/jackson/databind/jsonschema/ -com/fasterxml/jackson/databind/jsonschema/JsonSchema.class -com/fasterxml/jackson/databind/jsonschema/JsonSerializableSchema.class -com/fasterxml/jackson/databind/jsonschema/SchemaAware.class -com/fasterxml/jackson/databind/jsontype/ -com/fasterxml/jackson/databind/jsontype/NamedType.class -com/fasterxml/jackson/databind/jsontype/SubtypeResolver.class -com/fasterxml/jackson/databind/jsontype/TypeDeserializer$1.class -com/fasterxml/jackson/databind/jsontype/TypeDeserializer.class -com/fasterxml/jackson/databind/jsontype/TypeIdResolver.class -com/fasterxml/jackson/databind/jsontype/TypeResolverBuilder.class -com/fasterxml/jackson/databind/jsontype/TypeSerializer$1.class -com/fasterxml/jackson/databind/jsontype/TypeSerializer.class -com/fasterxml/jackson/databind/jsontype/impl/ -com/fasterxml/jackson/databind/jsontype/impl/AsArrayTypeDeserializer.class -com/fasterxml/jackson/databind/jsontype/impl/AsArrayTypeSerializer.class -com/fasterxml/jackson/databind/jsontype/impl/AsExistingPropertyTypeSerializer.class -com/fasterxml/jackson/databind/jsontype/impl/AsExternalTypeDeserializer.class -com/fasterxml/jackson/databind/jsontype/impl/AsExternalTypeSerializer.class -com/fasterxml/jackson/databind/jsontype/impl/AsPropertyTypeDeserializer.class -com/fasterxml/jackson/databind/jsontype/impl/AsPropertyTypeSerializer.class -com/fasterxml/jackson/databind/jsontype/impl/AsWrapperTypeDeserializer.class -com/fasterxml/jackson/databind/jsontype/impl/AsWrapperTypeSerializer.class -com/fasterxml/jackson/databind/jsontype/impl/ClassNameIdResolver.class -com/fasterxml/jackson/databind/jsontype/impl/MinimalClassNameIdResolver.class -com/fasterxml/jackson/databind/jsontype/impl/StdSubtypeResolver.class -com/fasterxml/jackson/databind/jsontype/impl/StdTypeResolverBuilder$1.class -com/fasterxml/jackson/databind/jsontype/impl/StdTypeResolverBuilder.class -com/fasterxml/jackson/databind/jsontype/impl/SubTypeValidator.class -com/fasterxml/jackson/databind/jsontype/impl/TypeDeserializerBase.class -com/fasterxml/jackson/databind/jsontype/impl/TypeIdResolverBase.class -com/fasterxml/jackson/databind/jsontype/impl/TypeNameIdResolver.class -com/fasterxml/jackson/databind/jsontype/impl/TypeSerializerBase.class -com/fasterxml/jackson/databind/module/ -com/fasterxml/jackson/databind/module/SimpleAbstractTypeResolver.class -com/fasterxml/jackson/databind/module/SimpleDeserializers.class -com/fasterxml/jackson/databind/module/SimpleKeyDeserializers.class -com/fasterxml/jackson/databind/module/SimpleModule.class -com/fasterxml/jackson/databind/module/SimpleSerializers.class -com/fasterxml/jackson/databind/module/SimpleValueInstantiators.class -com/fasterxml/jackson/databind/node/ -com/fasterxml/jackson/databind/node/ArrayNode.class -com/fasterxml/jackson/databind/node/BaseJsonNode.class -com/fasterxml/jackson/databind/node/BigIntegerNode.class -com/fasterxml/jackson/databind/node/BinaryNode.class -com/fasterxml/jackson/databind/node/BooleanNode.class -com/fasterxml/jackson/databind/node/ContainerNode.class -com/fasterxml/jackson/databind/node/DecimalNode.class -com/fasterxml/jackson/databind/node/DoubleNode.class -com/fasterxml/jackson/databind/node/FloatNode.class -com/fasterxml/jackson/databind/node/IntNode.class -com/fasterxml/jackson/databind/node/JsonNodeCreator.class -com/fasterxml/jackson/databind/node/JsonNodeFactory.class -com/fasterxml/jackson/databind/node/JsonNodeType.class -com/fasterxml/jackson/databind/node/LongNode.class -com/fasterxml/jackson/databind/node/MissingNode.class -com/fasterxml/jackson/databind/node/NodeCursor$ArrayCursor.class -com/fasterxml/jackson/databind/node/NodeCursor$ObjectCursor.class -com/fasterxml/jackson/databind/node/NodeCursor$RootCursor.class -com/fasterxml/jackson/databind/node/NodeCursor.class -com/fasterxml/jackson/databind/node/NullNode.class -com/fasterxml/jackson/databind/node/NumericNode.class -com/fasterxml/jackson/databind/node/ObjectNode.class -com/fasterxml/jackson/databind/node/POJONode.class -com/fasterxml/jackson/databind/node/ShortNode.class -com/fasterxml/jackson/databind/node/TextNode.class -com/fasterxml/jackson/databind/node/TreeTraversingParser$1.class -com/fasterxml/jackson/databind/node/TreeTraversingParser.class -com/fasterxml/jackson/databind/node/ValueNode.class -com/fasterxml/jackson/databind/ser/ -com/fasterxml/jackson/databind/ser/AnyGetterWriter.class -com/fasterxml/jackson/databind/ser/BasicSerializerFactory$1.class -com/fasterxml/jackson/databind/ser/BasicSerializerFactory.class -com/fasterxml/jackson/databind/ser/BeanPropertyFilter.class -com/fasterxml/jackson/databind/ser/BeanPropertyWriter.class -com/fasterxml/jackson/databind/ser/BeanSerializer.class -com/fasterxml/jackson/databind/ser/BeanSerializerBuilder.class -com/fasterxml/jackson/databind/ser/BeanSerializerFactory.class -com/fasterxml/jackson/databind/ser/BeanSerializerModifier.class -com/fasterxml/jackson/databind/ser/ContainerSerializer.class -com/fasterxml/jackson/databind/ser/ContextualSerializer.class -com/fasterxml/jackson/databind/ser/DefaultSerializerProvider$Impl.class -com/fasterxml/jackson/databind/ser/DefaultSerializerProvider.class -com/fasterxml/jackson/databind/ser/FilterProvider.class -com/fasterxml/jackson/databind/ser/PropertyBuilder$1.class -com/fasterxml/jackson/databind/ser/PropertyBuilder.class -com/fasterxml/jackson/databind/ser/PropertyFilter.class -com/fasterxml/jackson/databind/ser/PropertyWriter.class -com/fasterxml/jackson/databind/ser/ResolvableSerializer.class -com/fasterxml/jackson/databind/ser/SerializerCache.class -com/fasterxml/jackson/databind/ser/SerializerFactory.class -com/fasterxml/jackson/databind/ser/Serializers$Base.class -com/fasterxml/jackson/databind/ser/Serializers.class -com/fasterxml/jackson/databind/ser/VirtualBeanPropertyWriter.class -com/fasterxml/jackson/databind/ser/impl/ -com/fasterxml/jackson/databind/ser/impl/AttributePropertyWriter.class -com/fasterxml/jackson/databind/ser/impl/BeanAsArraySerializer.class -com/fasterxml/jackson/databind/ser/impl/FailingSerializer.class -com/fasterxml/jackson/databind/ser/impl/FilteredBeanPropertyWriter$MultiView.class -com/fasterxml/jackson/databind/ser/impl/FilteredBeanPropertyWriter$SingleView.class -com/fasterxml/jackson/databind/ser/impl/FilteredBeanPropertyWriter.class -com/fasterxml/jackson/databind/ser/impl/IndexedListSerializer.class -com/fasterxml/jackson/databind/ser/impl/IndexedStringListSerializer.class -com/fasterxml/jackson/databind/ser/impl/IteratorSerializer.class -com/fasterxml/jackson/databind/ser/impl/MapEntrySerializer$1.class -com/fasterxml/jackson/databind/ser/impl/MapEntrySerializer.class -com/fasterxml/jackson/databind/ser/impl/ObjectIdWriter.class -com/fasterxml/jackson/databind/ser/impl/PropertyBasedObjectIdGenerator.class -com/fasterxml/jackson/databind/ser/impl/PropertySerializerMap$Double.class -com/fasterxml/jackson/databind/ser/impl/PropertySerializerMap$Empty.class -com/fasterxml/jackson/databind/ser/impl/PropertySerializerMap$Multi.class -com/fasterxml/jackson/databind/ser/impl/PropertySerializerMap$SerializerAndMapResult.class -com/fasterxml/jackson/databind/ser/impl/PropertySerializerMap$Single.class -com/fasterxml/jackson/databind/ser/impl/PropertySerializerMap$TypeAndSerializer.class -com/fasterxml/jackson/databind/ser/impl/PropertySerializerMap.class -com/fasterxml/jackson/databind/ser/impl/ReadOnlyClassToSerializerMap$Bucket.class -com/fasterxml/jackson/databind/ser/impl/ReadOnlyClassToSerializerMap.class -com/fasterxml/jackson/databind/ser/impl/SimpleBeanPropertyFilter$1.class -com/fasterxml/jackson/databind/ser/impl/SimpleBeanPropertyFilter$FilterExceptFilter.class -com/fasterxml/jackson/databind/ser/impl/SimpleBeanPropertyFilter$SerializeExceptFilter.class -com/fasterxml/jackson/databind/ser/impl/SimpleBeanPropertyFilter.class -com/fasterxml/jackson/databind/ser/impl/SimpleFilterProvider.class -com/fasterxml/jackson/databind/ser/impl/StringArraySerializer.class -com/fasterxml/jackson/databind/ser/impl/StringCollectionSerializer.class -com/fasterxml/jackson/databind/ser/impl/TypeWrappedSerializer.class -com/fasterxml/jackson/databind/ser/impl/UnknownSerializer.class -com/fasterxml/jackson/databind/ser/impl/UnwrappingBeanPropertyWriter$1.class -com/fasterxml/jackson/databind/ser/impl/UnwrappingBeanPropertyWriter.class -com/fasterxml/jackson/databind/ser/impl/UnwrappingBeanSerializer.class -com/fasterxml/jackson/databind/ser/impl/WritableObjectId.class -com/fasterxml/jackson/databind/ser/std/ -com/fasterxml/jackson/databind/ser/std/ArraySerializerBase.class -com/fasterxml/jackson/databind/ser/std/AsArraySerializerBase.class -com/fasterxml/jackson/databind/ser/std/AtomicReferenceSerializer.class -com/fasterxml/jackson/databind/ser/std/BeanSerializerBase$1.class -com/fasterxml/jackson/databind/ser/std/BeanSerializerBase.class -com/fasterxml/jackson/databind/ser/std/BooleanSerializer$AsNumber.class -com/fasterxml/jackson/databind/ser/std/BooleanSerializer.class -com/fasterxml/jackson/databind/ser/std/ByteArraySerializer.class -com/fasterxml/jackson/databind/ser/std/ByteBufferSerializer.class -com/fasterxml/jackson/databind/ser/std/CalendarSerializer.class -com/fasterxml/jackson/databind/ser/std/ClassSerializer.class -com/fasterxml/jackson/databind/ser/std/CollectionSerializer.class -com/fasterxml/jackson/databind/ser/std/DateSerializer.class -com/fasterxml/jackson/databind/ser/std/DateTimeSerializerBase.class -com/fasterxml/jackson/databind/ser/std/EnumSerializer.class -com/fasterxml/jackson/databind/ser/std/EnumSetSerializer.class -com/fasterxml/jackson/databind/ser/std/FileSerializer.class -com/fasterxml/jackson/databind/ser/std/InetAddressSerializer.class -com/fasterxml/jackson/databind/ser/std/InetSocketAddressSerializer.class -com/fasterxml/jackson/databind/ser/std/IterableSerializer.class -com/fasterxml/jackson/databind/ser/std/JsonValueSerializer$TypeSerializerRerouter.class -com/fasterxml/jackson/databind/ser/std/JsonValueSerializer.class -com/fasterxml/jackson/databind/ser/std/MapProperty.class -com/fasterxml/jackson/databind/ser/std/MapSerializer$1.class -com/fasterxml/jackson/databind/ser/std/MapSerializer.class -com/fasterxml/jackson/databind/ser/std/NonTypedScalarSerializerBase.class -com/fasterxml/jackson/databind/ser/std/NullSerializer.class -com/fasterxml/jackson/databind/ser/std/NumberSerializer$1.class -com/fasterxml/jackson/databind/ser/std/NumberSerializer.class -com/fasterxml/jackson/databind/ser/std/NumberSerializers$1.class -com/fasterxml/jackson/databind/ser/std/NumberSerializers$Base.class -com/fasterxml/jackson/databind/ser/std/NumberSerializers$DoubleSerializer.class -com/fasterxml/jackson/databind/ser/std/NumberSerializers$FloatSerializer.class -com/fasterxml/jackson/databind/ser/std/NumberSerializers$IntLikeSerializer.class -com/fasterxml/jackson/databind/ser/std/NumberSerializers$IntegerSerializer.class -com/fasterxml/jackson/databind/ser/std/NumberSerializers$LongSerializer.class -com/fasterxml/jackson/databind/ser/std/NumberSerializers$ShortSerializer.class -com/fasterxml/jackson/databind/ser/std/NumberSerializers.class -com/fasterxml/jackson/databind/ser/std/ObjectArraySerializer.class -com/fasterxml/jackson/databind/ser/std/RawSerializer.class -com/fasterxml/jackson/databind/ser/std/ReferenceTypeSerializer$1.class -com/fasterxml/jackson/databind/ser/std/ReferenceTypeSerializer.class -com/fasterxml/jackson/databind/ser/std/SerializableSerializer.class -com/fasterxml/jackson/databind/ser/std/SqlDateSerializer.class -com/fasterxml/jackson/databind/ser/std/SqlTimeSerializer.class -com/fasterxml/jackson/databind/ser/std/StaticListSerializerBase.class -com/fasterxml/jackson/databind/ser/std/StdArraySerializers$BooleanArraySerializer.class -com/fasterxml/jackson/databind/ser/std/StdArraySerializers$CharArraySerializer.class -com/fasterxml/jackson/databind/ser/std/StdArraySerializers$DoubleArraySerializer.class -com/fasterxml/jackson/databind/ser/std/StdArraySerializers$FloatArraySerializer.class -com/fasterxml/jackson/databind/ser/std/StdArraySerializers$IntArraySerializer.class -com/fasterxml/jackson/databind/ser/std/StdArraySerializers$LongArraySerializer.class -com/fasterxml/jackson/databind/ser/std/StdArraySerializers$ShortArraySerializer.class -com/fasterxml/jackson/databind/ser/std/StdArraySerializers$TypedPrimitiveArraySerializer.class -com/fasterxml/jackson/databind/ser/std/StdArraySerializers.class -com/fasterxml/jackson/databind/ser/std/StdDelegatingSerializer.class -com/fasterxml/jackson/databind/ser/std/StdJdkSerializers$AtomicBooleanSerializer.class -com/fasterxml/jackson/databind/ser/std/StdJdkSerializers$AtomicIntegerSerializer.class -com/fasterxml/jackson/databind/ser/std/StdJdkSerializers$AtomicLongSerializer.class -com/fasterxml/jackson/databind/ser/std/StdJdkSerializers.class -com/fasterxml/jackson/databind/ser/std/StdKeySerializer.class -com/fasterxml/jackson/databind/ser/std/StdKeySerializers$Default.class -com/fasterxml/jackson/databind/ser/std/StdKeySerializers$Dynamic.class -com/fasterxml/jackson/databind/ser/std/StdKeySerializers$EnumKeySerializer.class -com/fasterxml/jackson/databind/ser/std/StdKeySerializers$StringKeySerializer.class -com/fasterxml/jackson/databind/ser/std/StdKeySerializers.class -com/fasterxml/jackson/databind/ser/std/StdScalarSerializer.class -com/fasterxml/jackson/databind/ser/std/StdSerializer.class -com/fasterxml/jackson/databind/ser/std/StringSerializer.class -com/fasterxml/jackson/databind/ser/std/TimeZoneSerializer.class -com/fasterxml/jackson/databind/ser/std/ToStringSerializer.class -com/fasterxml/jackson/databind/ser/std/TokenBufferSerializer.class -com/fasterxml/jackson/databind/ser/std/UUIDSerializer.class -com/fasterxml/jackson/databind/type/ -com/fasterxml/jackson/databind/type/ArrayType.class -com/fasterxml/jackson/databind/type/ClassKey.class -com/fasterxml/jackson/databind/type/ClassStack.class -com/fasterxml/jackson/databind/type/CollectionLikeType.class -com/fasterxml/jackson/databind/type/CollectionType.class -com/fasterxml/jackson/databind/type/MapLikeType.class -com/fasterxml/jackson/databind/type/MapType.class -com/fasterxml/jackson/databind/type/PlaceholderForType.class -com/fasterxml/jackson/databind/type/ReferenceType.class -com/fasterxml/jackson/databind/type/ResolvedRecursiveType.class -com/fasterxml/jackson/databind/type/SimpleType.class -com/fasterxml/jackson/databind/type/TypeBase.class -com/fasterxml/jackson/databind/type/TypeBindings$AsKey.class -com/fasterxml/jackson/databind/type/TypeBindings$TypeParamStash.class -com/fasterxml/jackson/databind/type/TypeBindings.class -com/fasterxml/jackson/databind/type/TypeFactory.class -com/fasterxml/jackson/databind/type/TypeModifier.class -com/fasterxml/jackson/databind/type/TypeParser$MyTokenizer.class -com/fasterxml/jackson/databind/type/TypeParser.class -com/fasterxml/jackson/databind/util/ -com/fasterxml/jackson/databind/util/AccessPattern.class -com/fasterxml/jackson/databind/util/Annotations.class -com/fasterxml/jackson/databind/util/ArrayBuilders$1.class -com/fasterxml/jackson/databind/util/ArrayBuilders$BooleanBuilder.class -com/fasterxml/jackson/databind/util/ArrayBuilders$ByteBuilder.class -com/fasterxml/jackson/databind/util/ArrayBuilders$DoubleBuilder.class -com/fasterxml/jackson/databind/util/ArrayBuilders$FloatBuilder.class -com/fasterxml/jackson/databind/util/ArrayBuilders$IntBuilder.class -com/fasterxml/jackson/databind/util/ArrayBuilders$LongBuilder.class -com/fasterxml/jackson/databind/util/ArrayBuilders$ShortBuilder.class -com/fasterxml/jackson/databind/util/ArrayBuilders.class -com/fasterxml/jackson/databind/util/ArrayIterator.class -com/fasterxml/jackson/databind/util/BeanUtil.class -com/fasterxml/jackson/databind/util/ByteBufferBackedInputStream.class -com/fasterxml/jackson/databind/util/ByteBufferBackedOutputStream.class -com/fasterxml/jackson/databind/util/ClassUtil$Ctor.class -com/fasterxml/jackson/databind/util/ClassUtil$EnumTypeLocator.class -com/fasterxml/jackson/databind/util/ClassUtil.class -com/fasterxml/jackson/databind/util/CompactStringObjectMap.class -com/fasterxml/jackson/databind/util/ConstantValueInstantiator.class -com/fasterxml/jackson/databind/util/Converter$None.class -com/fasterxml/jackson/databind/util/Converter.class -com/fasterxml/jackson/databind/util/EnumResolver.class -com/fasterxml/jackson/databind/util/EnumValues.class -com/fasterxml/jackson/databind/util/ISO8601DateFormat.class -com/fasterxml/jackson/databind/util/ISO8601Utils.class -com/fasterxml/jackson/databind/util/JSONPObject.class -com/fasterxml/jackson/databind/util/JSONWrappedObject.class -com/fasterxml/jackson/databind/util/LRUMap.class -com/fasterxml/jackson/databind/util/LinkedNode.class -com/fasterxml/jackson/databind/util/NameTransformer$1.class -com/fasterxml/jackson/databind/util/NameTransformer$2.class -com/fasterxml/jackson/databind/util/NameTransformer$3.class -com/fasterxml/jackson/databind/util/NameTransformer$Chained.class -com/fasterxml/jackson/databind/util/NameTransformer$NopTransformer.class -com/fasterxml/jackson/databind/util/NameTransformer.class -com/fasterxml/jackson/databind/util/Named.class -com/fasterxml/jackson/databind/util/ObjectBuffer.class -com/fasterxml/jackson/databind/util/PrimitiveArrayBuilder$Node.class -com/fasterxml/jackson/databind/util/PrimitiveArrayBuilder.class -com/fasterxml/jackson/databind/util/RawValue.class -com/fasterxml/jackson/databind/util/RootNameLookup.class -com/fasterxml/jackson/databind/util/SimpleBeanPropertyDefinition.class -com/fasterxml/jackson/databind/util/StdConverter.class -com/fasterxml/jackson/databind/util/StdDateFormat.class -com/fasterxml/jackson/databind/util/TokenBuffer$1.class -com/fasterxml/jackson/databind/util/TokenBuffer$Parser.class -com/fasterxml/jackson/databind/util/TokenBuffer$Segment.class -com/fasterxml/jackson/databind/util/TokenBuffer.class -com/fasterxml/jackson/databind/util/TokenBufferReadContext.class -com/fasterxml/jackson/databind/util/TypeKey.class -com/fasterxml/jackson/databind/util/ViewMatcher$Multi.class -com/fasterxml/jackson/databind/util/ViewMatcher$Single.class -com/fasterxml/jackson/databind/util/ViewMatcher.class diff --git a/examples/temp2.txt b/examples/temp2.txt deleted file mode 100644 index 83556ad8..00000000 --- a/examples/temp2.txt +++ /dev/null @@ -1,1917 +0,0 @@ -META-INF/ -META-INF/MANIFEST.MF -LICENSE.md -com/ -com/sendgrid/ -com/sendgrid/SendGridAPI.class -com/sendgrid/SendGrid$1.class -com/sendgrid/APICallback.class -com/sendgrid/SendGrid$2.class -com/sendgrid/SendGrid.class -com/sendgrid/SpamCheckSetting.class -com/sendgrid/Attachments$Builder.class -com/sendgrid/OpenTrackingSetting.class -com/sendgrid/Setting.class -com/sendgrid/GoogleAnalyticsSetting.class -com/sendgrid/ASM.class -com/sendgrid/FooterSetting.class -com/sendgrid/Personalization.class -com/sendgrid/Email.class -com/sendgrid/MailSettings.class -com/sendgrid/BccSettings.class -com/sendgrid/Content.class -com/sendgrid/TrackingSettings.class -com/sendgrid/ClickTrackingSetting.class -com/sendgrid/Attachments.class -com/sendgrid/ContentVerifier.class -com/sendgrid/SubscriptionTrackingSetting.class -com/sendgrid/Mail.class -com/sendgrid/RateLimitException.class -META-INF/maven/ -META-INF/maven/com.sendgrid/ -META-INF/maven/com.sendgrid/sendgrid-java/ -META-INF/maven/com.sendgrid/sendgrid-java/pom.xml -META-INF/maven/com.sendgrid/sendgrid-java/pom.properties -com/sendgrid/Client$1.class -com/sendgrid/Client.class -com/sendgrid/HttpDeleteWithBody.class -com/sendgrid/Method.class -com/sendgrid/Request.class -com/sendgrid/Response.class -com/sendgrid/SendGridResponseHandler.class -org/ -org/apache/ -org/apache/http/ -org/apache/http/message/ -org/apache/http/message/BasicHeaderElementIterator.class -org/apache/http/message/LineParser.class -org/apache/http/message/BasicHttpEntityEnclosingRequest.class -org/apache/http/message/HeaderValueFormatter.class -org/apache/http/message/BasicLineFormatter.class -org/apache/http/message/BasicLineParser.class -org/apache/http/message/HeaderGroup.class -org/apache/http/message/BasicNameValuePair.class -org/apache/http/message/BufferedHeader.class -org/apache/http/message/BasicListHeaderIterator.class -org/apache/http/message/BasicHeader.class -org/apache/http/message/LineFormatter.class -org/apache/http/message/BasicHttpResponse.class -org/apache/http/message/BasicTokenIterator.class -org/apache/http/message/BasicRequestLine.class -org/apache/http/message/ParserCursor.class -org/apache/http/message/BasicHeaderValueParser.class -org/apache/http/message/BasicHeaderValueFormatter.class -org/apache/http/message/BasicHttpRequest.class -org/apache/http/message/HeaderValueParser.class -org/apache/http/message/AbstractHttpMessage.class -org/apache/http/message/TokenParser.class -org/apache/http/message/BasicHeaderIterator.class -org/apache/http/message/BasicHeaderElement.class -org/apache/http/message/BasicStatusLine.class -org/apache/http/concurrent/ -org/apache/http/concurrent/BasicFuture.class -org/apache/http/concurrent/Cancellable.class -org/apache/http/concurrent/FutureCallback.class -org/apache/http/HeaderElement.class -org/apache/http/TruncatedChunkException.class -org/apache/http/ExceptionLogger$1.class -org/apache/http/version.properties -org/apache/http/HeaderElementIterator.class -org/apache/http/ProtocolVersion.class -org/apache/http/ExceptionLogger.class -org/apache/http/HttpRequestFactory.class -org/apache/http/HttpConnection.class -org/apache/http/HttpRequestInterceptor.class -org/apache/http/ContentTooLongException.class -org/apache/http/UnsupportedHttpVersionException.class -org/apache/http/HttpResponseInterceptor.class -org/apache/http/HttpInetConnection.class -org/apache/http/HttpEntity.class -org/apache/http/HttpException.class -org/apache/http/annotation/ -org/apache/http/annotation/Obsolete.class -org/apache/http/annotation/Experimental.class -org/apache/http/annotation/NotThreadSafe.class -org/apache/http/annotation/Immutable.class -org/apache/http/annotation/ThreadSafe.class -org/apache/http/annotation/GuardedBy.class -org/apache/http/Consts.class -org/apache/http/HttpConnectionMetrics.class -org/apache/http/HttpMessage.class -org/apache/http/MethodNotSupportedException.class -org/apache/http/ParseException.class -org/apache/http/params/ -org/apache/http/params/CoreProtocolPNames.class -org/apache/http/params/SyncBasicHttpParams.class -org/apache/http/params/DefaultedHttpParams.class -org/apache/http/params/HttpParams.class -org/apache/http/params/AbstractHttpParams.class -org/apache/http/params/HttpAbstractParamBean.class -org/apache/http/params/HttpConnectionParams.class -org/apache/http/params/BasicHttpParams.class -org/apache/http/params/HttpConnectionParamBean.class -org/apache/http/params/CoreConnectionPNames.class -org/apache/http/params/HttpParamConfig.class -org/apache/http/params/HttpProtocolParamBean.class -org/apache/http/params/HttpProtocolParams.class -org/apache/http/params/HttpParamsNames.class -org/apache/http/ReasonPhraseCatalog.class -org/apache/http/MalformedChunkCodingException.class -org/apache/http/FormattedHeader.class -org/apache/http/HttpResponse.class -org/apache/http/HeaderIterator.class -org/apache/http/HttpHeaders.class -org/apache/http/HttpClientConnection.class -org/apache/http/HttpHost.class -org/apache/http/protocol/ -org/apache/http/protocol/ResponseDate.class -org/apache/http/protocol/ChainBuilder.class -org/apache/http/protocol/HttpDateGenerator.class -org/apache/http/protocol/HttpRequestHandlerMapper.class -org/apache/http/protocol/HTTP.class -org/apache/http/protocol/SyncBasicHttpContext.class -org/apache/http/protocol/HttpService$HttpRequestHandlerResolverAdapter.class -org/apache/http/protocol/ImmutableHttpProcessor.class -org/apache/http/protocol/BasicHttpContext.class -org/apache/http/protocol/HttpProcessorBuilder.class -org/apache/http/protocol/RequestTargetHost.class -org/apache/http/protocol/ResponseConnControl.class -org/apache/http/protocol/HttpRequestInterceptorList.class -org/apache/http/protocol/HttpRequestExecutor.class -org/apache/http/protocol/RequestUserAgent.class -org/apache/http/protocol/HttpRequestHandlerResolver.class -org/apache/http/protocol/BasicHttpProcessor.class -org/apache/http/protocol/ResponseServer.class -org/apache/http/protocol/ResponseContent.class -org/apache/http/protocol/RequestDate.class -org/apache/http/protocol/HttpService.class -org/apache/http/protocol/HttpContext.class -org/apache/http/protocol/RequestConnControl.class -org/apache/http/protocol/UriHttpRequestHandlerMapper.class -org/apache/http/protocol/UriPatternMatcher.class -org/apache/http/protocol/HttpCoreContext.class -org/apache/http/protocol/HttpProcessor.class -org/apache/http/protocol/RequestExpectContinue.class -org/apache/http/protocol/HttpExpectationVerifier.class -org/apache/http/protocol/HttpRequestHandlerRegistry.class -org/apache/http/protocol/HttpResponseInterceptorList.class -org/apache/http/protocol/HttpRequestHandler.class -org/apache/http/protocol/ExecutionContext.class -org/apache/http/protocol/RequestContent.class -org/apache/http/protocol/DefaultedHttpContext.class -org/apache/http/HttpStatus.class -org/apache/http/TokenIterator.class -org/apache/http/ssl/ -org/apache/http/ssl/SSLContextBuilder$TrustManagerDelegate.class -org/apache/http/ssl/TrustStrategy.class -org/apache/http/ssl/PrivateKeyStrategy.class -org/apache/http/ssl/SSLContextBuilder$KeyManagerDelegate.class -org/apache/http/ssl/SSLContexts.class -org/apache/http/ssl/SSLContextBuilder.class -org/apache/http/ssl/SSLInitializationException.class -org/apache/http/ssl/PrivateKeyDetails.class -org/apache/http/ConnectionReuseStrategy.class -org/apache/http/pool/ -org/apache/http/pool/AbstractConnPool$4.class -org/apache/http/pool/AbstractConnPool$2.class -org/apache/http/pool/PoolEntry.class -org/apache/http/pool/ConnFactory.class -org/apache/http/pool/RouteSpecificPool.class -org/apache/http/pool/AbstractConnPool$3.class -org/apache/http/pool/PoolEntryCallback.class -org/apache/http/pool/AbstractConnPool.class -org/apache/http/pool/ConnPoolControl.class -org/apache/http/pool/PoolStats.class -org/apache/http/pool/AbstractConnPool$1.class -org/apache/http/pool/ConnPool.class -org/apache/http/pool/PoolEntryFuture.class -org/apache/http/config/ -org/apache/http/config/MessageConstraints$Builder.class -org/apache/http/config/ConnectionConfig.class -org/apache/http/config/SocketConfig.class -org/apache/http/config/Registry.class -org/apache/http/config/ConnectionConfig$Builder.class -org/apache/http/config/RegistryBuilder.class -org/apache/http/config/SocketConfig$Builder.class -org/apache/http/config/MessageConstraints.class -org/apache/http/config/Lookup.class -org/apache/http/HttpResponseFactory.class -org/apache/http/HttpRequest.class -org/apache/http/RequestLine.class -org/apache/http/HttpServerConnection.class -org/apache/http/NameValuePair.class -org/apache/http/util/ -org/apache/http/util/LangUtils.class -org/apache/http/util/NetUtils.class -org/apache/http/util/EntityUtils.class -org/apache/http/util/EncodingUtils.class -org/apache/http/util/TextUtils.class -org/apache/http/util/CharsetUtils.class -org/apache/http/util/CharArrayBuffer.class -org/apache/http/util/ByteArrayBuffer.class -org/apache/http/util/Asserts.class -org/apache/http/util/ExceptionUtils.class -org/apache/http/util/Args.class -org/apache/http/util/VersionInfo.class -org/apache/http/HttpVersion.class -org/apache/http/HttpConnectionFactory.class -org/apache/http/impl/ -org/apache/http/impl/DefaultHttpRequestFactory.class -org/apache/http/impl/SocketHttpClientConnection.class -org/apache/http/impl/bootstrap/ -org/apache/http/impl/bootstrap/SSLServerSetupHandler.class -org/apache/http/impl/bootstrap/HttpServer$Status.class -org/apache/http/impl/bootstrap/ThreadFactoryImpl.class -org/apache/http/impl/bootstrap/Worker.class -org/apache/http/impl/bootstrap/RequestListener.class -org/apache/http/impl/bootstrap/ServerBootstrap.class -org/apache/http/impl/bootstrap/HttpServer.class -org/apache/http/impl/SocketHttpServerConnection.class -org/apache/http/impl/BHttpConnectionBase.class -org/apache/http/impl/DefaultConnectionReuseStrategy.class -org/apache/http/impl/DefaultHttpServerConnection.class -org/apache/http/impl/AbstractHttpClientConnection.class -org/apache/http/impl/EnglishReasonPhraseCatalog.class -org/apache/http/impl/DefaultBHttpServerConnection.class -org/apache/http/impl/DefaultHttpClientConnection.class -org/apache/http/impl/pool/ -org/apache/http/impl/pool/BasicConnPool.class -org/apache/http/impl/pool/BasicConnFactory.class -org/apache/http/impl/pool/BasicPoolEntry.class -org/apache/http/impl/DefaultBHttpClientConnectionFactory.class -org/apache/http/impl/DefaultBHttpClientConnection.class -org/apache/http/impl/AbstractHttpServerConnection.class -org/apache/http/impl/io/ -org/apache/http/impl/io/HttpResponseWriter.class -org/apache/http/impl/io/HttpTransportMetricsImpl.class -org/apache/http/impl/io/AbstractSessionInputBuffer.class -org/apache/http/impl/io/DefaultHttpRequestWriter.class -org/apache/http/impl/io/SessionInputBufferImpl.class -org/apache/http/impl/io/ContentLengthOutputStream.class -org/apache/http/impl/io/SocketInputBuffer.class -org/apache/http/impl/io/DefaultHttpResponseWriterFactory.class -org/apache/http/impl/io/DefaultHttpRequestWriterFactory.class -org/apache/http/impl/io/IdentityOutputStream.class -org/apache/http/impl/io/IdentityInputStream.class -org/apache/http/impl/io/SocketOutputBuffer.class -org/apache/http/impl/io/ChunkedOutputStream.class -org/apache/http/impl/io/DefaultHttpResponseParserFactory.class -org/apache/http/impl/io/ContentLengthInputStream.class -org/apache/http/impl/io/HttpRequestWriter.class -org/apache/http/impl/io/DefaultHttpResponseWriter.class -org/apache/http/impl/io/DefaultHttpRequestParserFactory.class -org/apache/http/impl/io/AbstractMessageParser.class -org/apache/http/impl/io/EmptyInputStream.class -org/apache/http/impl/io/DefaultHttpRequestParser.class -org/apache/http/impl/io/SessionOutputBufferImpl.class -org/apache/http/impl/io/HttpRequestParser.class -org/apache/http/impl/io/AbstractSessionOutputBuffer.class -org/apache/http/impl/io/DefaultHttpResponseParser.class -org/apache/http/impl/io/ChunkedInputStream.class -org/apache/http/impl/io/AbstractMessageWriter.class -org/apache/http/impl/io/HttpResponseParser.class -org/apache/http/impl/entity/ -org/apache/http/impl/entity/DisallowIdentityContentLengthStrategy.class -org/apache/http/impl/entity/LaxContentLengthStrategy.class -org/apache/http/impl/entity/StrictContentLengthStrategy.class -org/apache/http/impl/entity/EntityDeserializer.class -org/apache/http/impl/entity/EntitySerializer.class -org/apache/http/impl/DefaultHttpResponseFactory.class -org/apache/http/impl/DefaultBHttpServerConnectionFactory.class -org/apache/http/impl/HttpConnectionMetricsImpl.class -org/apache/http/impl/ConnSupport.class -org/apache/http/impl/NoConnectionReuseStrategy.class -org/apache/http/ConnectionClosedException.class -org/apache/http/StatusLine.class -org/apache/http/io/ -org/apache/http/io/HttpMessageWriterFactory.class -org/apache/http/io/BufferInfo.class -org/apache/http/io/HttpMessageParserFactory.class -org/apache/http/io/HttpTransportMetrics.class -org/apache/http/io/SessionOutputBuffer.class -org/apache/http/io/HttpMessageParser.class -org/apache/http/io/EofSensor.class -org/apache/http/io/HttpMessageWriter.class -org/apache/http/io/SessionInputBuffer.class -org/apache/http/NoHttpResponseException.class -org/apache/http/HttpEntityEnclosingRequest.class -org/apache/http/entity/ -org/apache/http/entity/ContentLengthStrategy.class -org/apache/http/entity/FileEntity.class -org/apache/http/entity/InputStreamEntity.class -org/apache/http/entity/SerializableEntity.class -org/apache/http/entity/StringEntity.class -org/apache/http/entity/HttpEntityWrapper.class -org/apache/http/entity/ContentProducer.class -org/apache/http/entity/BufferedHttpEntity.class -org/apache/http/entity/ByteArrayEntity.class -org/apache/http/entity/EntityTemplate.class -org/apache/http/entity/BasicHttpEntity.class -org/apache/http/entity/ContentType.class -org/apache/http/entity/AbstractHttpEntity.class -org/apache/http/ProtocolException.class -org/apache/http/MessageConstraintException.class -org/apache/http/ExceptionLogger$2.class -org/apache/http/Header.class -META-INF/DEPENDENCIES -META-INF/NOTICE -META-INF/LICENSE -META-INF/maven/org.apache.httpcomponents/ -META-INF/maven/org.apache.httpcomponents/httpcore/ -META-INF/maven/org.apache.httpcomponents/httpcore/pom.xml -META-INF/maven/org.apache.httpcomponents/httpcore/pom.properties -org/apache/http/auth/ -org/apache/http/auth/KerberosCredentials.class -org/apache/http/auth/AuthSchemeRegistry.class -org/apache/http/auth/ChallengeState.class -org/apache/http/auth/NTUserPrincipal.class -org/apache/http/auth/InvalidCredentialsException.class -org/apache/http/auth/AuthSchemeRegistry$1.class -org/apache/http/auth/NTCredentials.class -org/apache/http/auth/AuthScheme.class -org/apache/http/auth/AuthenticationException.class -org/apache/http/auth/params/ -org/apache/http/auth/params/AuthParams.class -org/apache/http/auth/params/AuthParamBean.class -org/apache/http/auth/params/AuthPNames.class -org/apache/http/auth/BasicUserPrincipal.class -org/apache/http/auth/AuthSchemeProvider.class -org/apache/http/auth/ContextAwareAuthScheme.class -org/apache/http/auth/AuthProtocolState.class -org/apache/http/auth/AuthScope.class -org/apache/http/auth/AuthSchemeFactory.class -org/apache/http/auth/AUTH.class -org/apache/http/auth/Credentials.class -org/apache/http/auth/UsernamePasswordCredentials.class -org/apache/http/auth/AuthOption.class -org/apache/http/auth/MalformedChallengeException.class -org/apache/http/auth/AuthState.class -org/apache/http/cookie/ -org/apache/http/cookie/CookieSpecRegistry.class -org/apache/http/cookie/CookieSpec.class -org/apache/http/cookie/CookieRestrictionViolationException.class -org/apache/http/cookie/CookieIdentityComparator.class -org/apache/http/cookie/SM.class -org/apache/http/cookie/CookieOrigin.class -org/apache/http/cookie/CookieAttributeHandler.class -org/apache/http/cookie/SetCookie2.class -org/apache/http/cookie/params/ -org/apache/http/cookie/params/CookieSpecParamBean.class -org/apache/http/cookie/params/CookieSpecPNames.class -org/apache/http/cookie/MalformedCookieException.class -org/apache/http/cookie/ClientCookie.class -org/apache/http/cookie/CommonCookieAttributeHandler.class -org/apache/http/cookie/CookieSpecRegistry$1.class -org/apache/http/cookie/CookiePathComparator.class -org/apache/http/cookie/SetCookie.class -org/apache/http/cookie/Cookie.class -org/apache/http/cookie/CookieSpecProvider.class -org/apache/http/cookie/CookiePriorityComparator.class -org/apache/http/cookie/CookieSpecFactory.class -org/apache/http/client/ -org/apache/http/client/RedirectStrategy.class -org/apache/http/client/ConnectionBackoffStrategy.class -org/apache/http/client/version.properties -org/apache/http/client/AuthenticationStrategy.class -org/apache/http/client/HttpClient.class -org/apache/http/client/methods/ -org/apache/http/client/methods/HttpOptions.class -org/apache/http/client/methods/AbortableHttpRequest.class -org/apache/http/client/methods/HttpRequestBase.class -org/apache/http/client/methods/AbstractExecutionAwareRequest$2.class -org/apache/http/client/methods/RequestBuilder.class -org/apache/http/client/methods/HttpGet.class -org/apache/http/client/methods/HttpPatch.class -org/apache/http/client/methods/HttpDelete.class -org/apache/http/client/methods/HttpUriRequest.class -org/apache/http/client/methods/CloseableHttpResponse.class -org/apache/http/client/methods/HttpRequestWrapper$1.class -org/apache/http/client/methods/RequestBuilder$InternalEntityEclosingRequest.class -org/apache/http/client/methods/HttpRequestWrapper$HttpEntityEnclosingRequestWrapper.class -org/apache/http/client/methods/RequestBuilder$InternalRequest.class -org/apache/http/client/methods/HttpRequestWrapper.class -org/apache/http/client/methods/HttpHead.class -org/apache/http/client/methods/HttpExecutionAware.class -org/apache/http/client/methods/AbstractExecutionAwareRequest.class -org/apache/http/client/methods/Configurable.class -org/apache/http/client/methods/AbstractExecutionAwareRequest$1.class -org/apache/http/client/methods/HttpPost.class -org/apache/http/client/methods/HttpEntityEnclosingRequestBase.class -org/apache/http/client/methods/HttpTrace.class -org/apache/http/client/methods/HttpPut.class -org/apache/http/client/CredentialsProvider.class -org/apache/http/client/UserTokenHandler.class -org/apache/http/client/CookieStore.class -org/apache/http/client/HttpResponseException.class -org/apache/http/client/ClientProtocolException.class -org/apache/http/client/AuthenticationHandler.class -org/apache/http/client/params/ -org/apache/http/client/params/HttpClientParams.class -org/apache/http/client/params/ClientPNames.class -org/apache/http/client/params/ClientParamBean.class -org/apache/http/client/params/CookiePolicy.class -org/apache/http/client/params/AuthPolicy.class -org/apache/http/client/params/HttpClientParamConfig.class -org/apache/http/client/params/AllClientPNames.class -org/apache/http/client/CircularRedirectException.class -org/apache/http/client/utils/ -org/apache/http/client/utils/Punycode.class -org/apache/http/client/utils/Idn.class -org/apache/http/client/utils/HttpClientUtils.class -org/apache/http/client/utils/URIBuilder.class -org/apache/http/client/utils/URIUtils.class -org/apache/http/client/utils/DateUtils$DateFormatHolder.class -org/apache/http/client/utils/URLEncodedUtils.class -org/apache/http/client/utils/JdkIdn.class -org/apache/http/client/utils/CloneUtils.class -org/apache/http/client/utils/DateUtils.class -org/apache/http/client/utils/Rfc3492Idn.class -org/apache/http/client/protocol/ -org/apache/http/client/protocol/RequestAcceptEncoding.class -org/apache/http/client/protocol/ResponseProcessCookies.class -org/apache/http/client/protocol/RequestDefaultHeaders.class -org/apache/http/client/protocol/ResponseContentEncoding$2.class -org/apache/http/client/protocol/ClientContext.class -org/apache/http/client/protocol/ResponseAuthCache.class -org/apache/http/client/protocol/RequestAuthenticationBase$1.class -org/apache/http/client/protocol/RequestTargetAuthentication.class -org/apache/http/client/protocol/RequestProxyAuthentication.class -org/apache/http/client/protocol/RequestClientConnControl.class -org/apache/http/client/protocol/ResponseAuthCache$1.class -org/apache/http/client/protocol/RequestAddCookies.class -org/apache/http/client/protocol/RequestAuthCache.class -org/apache/http/client/protocol/ClientContextConfigurer.class -org/apache/http/client/protocol/ResponseContentEncoding$1.class -org/apache/http/client/protocol/RequestExpectContinue.class -org/apache/http/client/protocol/ResponseContentEncoding.class -org/apache/http/client/protocol/RequestAuthenticationBase.class -org/apache/http/client/protocol/HttpClientContext.class -org/apache/http/client/BackoffManager.class -org/apache/http/client/config/ -org/apache/http/client/config/RequestConfig$Builder.class -org/apache/http/client/config/RequestConfig.class -org/apache/http/client/config/CookieSpecs.class -org/apache/http/client/config/AuthSchemes.class -org/apache/http/client/AuthCache.class -org/apache/http/client/ResponseHandler.class -org/apache/http/client/RedirectException.class -org/apache/http/client/RedirectHandler.class -org/apache/http/client/NonRepeatableRequestException.class -org/apache/http/client/entity/ -org/apache/http/client/entity/DeflateInputStream.class -org/apache/http/client/entity/InputStreamFactory.class -org/apache/http/client/entity/UrlEncodedFormEntity.class -org/apache/http/client/entity/DeflateInputStream$DeflateStream.class -org/apache/http/client/entity/GzipCompressingEntity.class -org/apache/http/client/entity/EntityBuilder.class -org/apache/http/client/entity/LazyDecompressingInputStream.class -org/apache/http/client/entity/DecompressingEntity.class -org/apache/http/client/entity/GzipDecompressingEntity$1.class -org/apache/http/client/entity/DeflateDecompressingEntity$1.class -org/apache/http/client/entity/GzipDecompressingEntity.class -org/apache/http/client/entity/DeflateDecompressingEntity.class -org/apache/http/client/HttpRequestRetryHandler.class -org/apache/http/client/RequestDirector.class -org/apache/http/client/ServiceUnavailableRetryStrategy.class -org/apache/http/conn/ -org/apache/http/conn/OperatedClientConnection.class -org/apache/http/conn/ManagedClientConnection.class -org/apache/http/conn/ConnectionRequest.class -org/apache/http/conn/EofSensorInputStream.class -org/apache/http/conn/ClientConnectionOperator.class -org/apache/http/conn/HttpClientConnectionOperator.class -org/apache/http/conn/BasicManagedEntity.class -org/apache/http/conn/ConnectionKeepAliveStrategy.class -org/apache/http/conn/ManagedHttpClientConnection.class -org/apache/http/conn/BasicEofSensorWatcher.class -org/apache/http/conn/HttpClientConnectionManager.class -org/apache/http/conn/HttpRoutedConnection.class -org/apache/http/conn/EofSensorWatcher.class -org/apache/http/conn/routing/ -org/apache/http/conn/routing/BasicRouteDirector.class -org/apache/http/conn/routing/RouteInfo$LayerType.class -org/apache/http/conn/routing/RouteInfo.class -org/apache/http/conn/routing/RouteTracker.class -org/apache/http/conn/routing/HttpRouteDirector.class -org/apache/http/conn/routing/HttpRoutePlanner.class -org/apache/http/conn/routing/RouteInfo$TunnelType.class -org/apache/http/conn/routing/HttpRoute.class -org/apache/http/conn/SchemePortResolver.class -org/apache/http/conn/ClientConnectionManager.class -org/apache/http/conn/params/ -org/apache/http/conn/params/ConnManagerParamBean.class -org/apache/http/conn/params/ConnRouteParamBean.class -org/apache/http/conn/params/ConnManagerParams$1.class -org/apache/http/conn/params/ConnManagerPNames.class -org/apache/http/conn/params/ConnConnectionParamBean.class -org/apache/http/conn/params/ConnManagerParams.class -org/apache/http/conn/params/ConnPerRouteBean.class -org/apache/http/conn/params/ConnConnectionPNames.class -org/apache/http/conn/params/ConnPerRoute.class -org/apache/http/conn/params/ConnRoutePNames.class -org/apache/http/conn/params/ConnRouteParams.class -org/apache/http/conn/socket/ -org/apache/http/conn/socket/PlainConnectionSocketFactory.class -org/apache/http/conn/socket/ConnectionSocketFactory.class -org/apache/http/conn/socket/LayeredConnectionSocketFactory.class -org/apache/http/conn/ClientConnectionRequest.class -org/apache/http/conn/ssl/ -org/apache/http/conn/ssl/TrustSelfSignedStrategy.class -org/apache/http/conn/ssl/SSLContextBuilder$TrustManagerDelegate.class -org/apache/http/conn/ssl/DefaultHostnameVerifier$1.class -org/apache/http/conn/ssl/DefaultHostnameVerifier$TYPE.class -org/apache/http/conn/ssl/BrowserCompatHostnameVerifier.class -org/apache/http/conn/ssl/TrustStrategy.class -org/apache/http/conn/ssl/PrivateKeyStrategy.class -org/apache/http/conn/ssl/SSLContextBuilder$KeyManagerDelegate.class -org/apache/http/conn/ssl/X509HostnameVerifier.class -org/apache/http/conn/ssl/AbstractVerifier.class -org/apache/http/conn/ssl/SSLSocketFactory.class -org/apache/http/conn/ssl/SSLConnectionSocketFactory.class -org/apache/http/conn/ssl/SSLContexts.class -org/apache/http/conn/ssl/AllowAllHostnameVerifier.class -org/apache/http/conn/ssl/StrictHostnameVerifier.class -org/apache/http/conn/ssl/SSLContextBuilder.class -org/apache/http/conn/ssl/DefaultHostnameVerifier.class -org/apache/http/conn/ssl/SSLInitializationException.class -org/apache/http/conn/ssl/PrivateKeyDetails.class -org/apache/http/conn/ssl/NoopHostnameVerifier.class -org/apache/http/conn/ConnectionPoolTimeoutException.class -org/apache/http/conn/ConnectionReleaseTrigger.class -org/apache/http/conn/ClientConnectionManagerFactory.class -org/apache/http/conn/scheme/ -org/apache/http/conn/scheme/SchemeSocketFactoryAdaptor.class -org/apache/http/conn/scheme/SchemeLayeredSocketFactory.class -org/apache/http/conn/scheme/PlainSocketFactory.class -org/apache/http/conn/scheme/LayeredSocketFactoryAdaptor.class -org/apache/http/conn/scheme/Scheme.class -org/apache/http/conn/scheme/HostNameResolver.class -org/apache/http/conn/scheme/SchemeRegistry.class -org/apache/http/conn/scheme/SchemeLayeredSocketFactoryAdaptor2.class -org/apache/http/conn/scheme/SchemeLayeredSocketFactoryAdaptor.class -org/apache/http/conn/scheme/SocketFactory.class -org/apache/http/conn/scheme/SchemeSocketFactory.class -org/apache/http/conn/scheme/SocketFactoryAdaptor.class -org/apache/http/conn/scheme/LayeredSchemeSocketFactory.class -org/apache/http/conn/scheme/LayeredSocketFactory.class -org/apache/http/conn/ConnectTimeoutException.class -org/apache/http/conn/util/ -org/apache/http/conn/util/DomainType.class -org/apache/http/conn/util/InetAddressUtils.class -org/apache/http/conn/util/PublicSuffixList.class -org/apache/http/conn/util/PublicSuffixMatcher.class -org/apache/http/conn/util/PublicSuffixListParser.class -org/apache/http/conn/util/PublicSuffixMatcherLoader.class -org/apache/http/conn/HttpInetSocketAddress.class -org/apache/http/conn/HttpConnectionFactory.class -org/apache/http/conn/HttpHostConnectException.class -org/apache/http/conn/DnsResolver.class -org/apache/http/conn/MultihomePlainSocketFactory.class -org/apache/http/conn/UnsupportedSchemeException.class -org/apache/http/impl/auth/ -org/apache/http/impl/auth/NTLMEngineImpl$CipherGen.class -org/apache/http/impl/auth/NTLMScheme$State.class -org/apache/http/impl/auth/GGSSchemeBase$1.class -org/apache/http/impl/auth/NTLMEngineException.class -org/apache/http/impl/auth/KerberosSchemeFactory.class -org/apache/http/impl/auth/RFC2617Scheme.class -org/apache/http/impl/auth/NTLMScheme.class -org/apache/http/impl/auth/KerberosScheme.class -org/apache/http/impl/auth/HttpEntityDigester.class -org/apache/http/impl/auth/SPNegoScheme.class -org/apache/http/impl/auth/BasicSchemeFactory.class -org/apache/http/impl/auth/NegotiateScheme.class -org/apache/http/impl/auth/NTLMSchemeFactory.class -org/apache/http/impl/auth/NTLMEngineImpl$NTLMMessage.class -org/apache/http/impl/auth/GGSSchemeBase.class -org/apache/http/impl/auth/HttpAuthenticator$1.class -org/apache/http/impl/auth/NTLMEngine.class -org/apache/http/impl/auth/DigestScheme.class -org/apache/http/impl/auth/NTLMEngineImpl.class -org/apache/http/impl/auth/AuthSchemeBase.class -org/apache/http/impl/auth/NTLMEngineImpl$Type3Message.class -org/apache/http/impl/auth/NegotiateSchemeFactory.class -org/apache/http/impl/auth/SpnegoTokenGenerator.class -org/apache/http/impl/auth/NTLMEngineImpl$HMACMD5.class -org/apache/http/impl/auth/HttpAuthenticator.class -org/apache/http/impl/auth/GGSSchemeBase$State.class -org/apache/http/impl/auth/NTLMEngineImpl$MD4.class -org/apache/http/impl/auth/NTLMEngineImpl$Type2Message.class -org/apache/http/impl/auth/DigestSchemeFactory.class -org/apache/http/impl/auth/SPNegoSchemeFactory.class -org/apache/http/impl/auth/NTLMEngineImpl$Type1Message.class -org/apache/http/impl/auth/BasicScheme.class -org/apache/http/impl/auth/UnsupportedDigestAlgorithmException.class -org/apache/http/impl/cookie/ -org/apache/http/impl/cookie/BestMatchSpec.class -org/apache/http/impl/cookie/RFC2965DiscardAttributeHandler.class -org/apache/http/impl/cookie/DefaultCookieSpecProvider$CompatibilityLevel.class -org/apache/http/impl/cookie/BasicClientCookie2.class -org/apache/http/impl/cookie/BasicSecureHandler.class -org/apache/http/impl/cookie/RFC2109Spec.class -org/apache/http/impl/cookie/RFC2965Spec.class -org/apache/http/impl/cookie/PublicSuffixFilter.class -org/apache/http/impl/cookie/RFC6265CookieSpecProvider$2.class -org/apache/http/impl/cookie/BasicDomainHandler.class -org/apache/http/impl/cookie/DefaultCookieSpecProvider.class -org/apache/http/impl/cookie/RFC2109VersionHandler.class -org/apache/http/impl/cookie/RFC2109DomainHandler.class -org/apache/http/impl/cookie/BasicMaxAgeHandler.class -org/apache/http/impl/cookie/NetscapeDraftSpec.class -org/apache/http/impl/cookie/LaxExpiresHandler.class -org/apache/http/impl/cookie/BasicExpiresHandler.class -org/apache/http/impl/cookie/BrowserCompatSpec.class -org/apache/http/impl/cookie/RFC2965SpecFactory.class -org/apache/http/impl/cookie/DefaultCookieSpec.class -org/apache/http/impl/cookie/BrowserCompatSpec$1.class -org/apache/http/impl/cookie/BrowserCompatVersionAttributeHandler.class -org/apache/http/impl/cookie/IgnoreSpec.class -org/apache/http/impl/cookie/RFC6265CookieSpecProvider.class -org/apache/http/impl/cookie/BestMatchSpecFactory.class -org/apache/http/impl/cookie/RFC6265CookieSpecProvider$CompatibilityLevel.class -org/apache/http/impl/cookie/RFC6265StrictSpec.class -org/apache/http/impl/cookie/RFC2965PortAttributeHandler.class -org/apache/http/impl/cookie/IgnoreSpecProvider.class -org/apache/http/impl/cookie/BasicClientCookie.class -org/apache/http/impl/cookie/NetscapeDraftHeaderParser.class -org/apache/http/impl/cookie/DefaultCookieSpecProvider$1.class -org/apache/http/impl/cookie/BasicPathHandler.class -org/apache/http/impl/cookie/LaxMaxAgeHandler.class -org/apache/http/impl/cookie/RFC6265CookieSpecBase.class -org/apache/http/impl/cookie/RFC2965SpecProvider.class -org/apache/http/impl/cookie/NetscapeDomainHandler.class -org/apache/http/impl/cookie/RFC2965DomainAttributeHandler.class -org/apache/http/impl/cookie/PublicSuffixDomainFilter.class -org/apache/http/impl/cookie/IgnoreSpecFactory.class -org/apache/http/impl/cookie/RFC6265CookieSpecProvider$1.class -org/apache/http/impl/cookie/RFC2965VersionAttributeHandler.class -org/apache/http/impl/cookie/AbstractCookieAttributeHandler.class -org/apache/http/impl/cookie/BrowserCompatSpecFactory.class -org/apache/http/impl/cookie/RFC2109SpecProvider.class -org/apache/http/impl/cookie/BrowserCompatSpecFactory$SecurityLevel.class -org/apache/http/impl/cookie/NetscapeDraftSpecFactory.class -org/apache/http/impl/cookie/CookieSpecBase.class -org/apache/http/impl/cookie/RFC6265LaxSpec.class -org/apache/http/impl/cookie/DateParseException.class -org/apache/http/impl/cookie/RFC2109SpecFactory.class -org/apache/http/impl/cookie/RFC6265CookieSpec.class -org/apache/http/impl/cookie/PublicSuffixListParser.class -org/apache/http/impl/cookie/AbstractCookieSpec.class -org/apache/http/impl/cookie/BasicCommentHandler.class -org/apache/http/impl/cookie/DateUtils.class -org/apache/http/impl/cookie/RFC2965CommentUrlAttributeHandler.class -org/apache/http/impl/cookie/NetscapeDraftSpecProvider.class -org/apache/http/impl/client/ -org/apache/http/impl/client/TargetAuthenticationStrategy.class -org/apache/http/impl/client/LaxRedirectStrategy.class -org/apache/http/impl/client/NoopUserTokenHandler.class -org/apache/http/impl/client/RoutedRequest.class -org/apache/http/impl/client/AuthenticationStrategyImpl.class -org/apache/http/impl/client/MinimalHttpClient$1.class -org/apache/http/impl/client/CloseableHttpResponseProxy.class -org/apache/http/impl/client/DefaultProxyAuthenticationHandler.class -org/apache/http/impl/client/DefaultRedirectStrategy.class -org/apache/http/impl/client/FutureRequestExecutionService.class -org/apache/http/impl/client/FutureRequestExecutionMetrics$DurationCounter.class -org/apache/http/impl/client/HttpClientBuilder.class -org/apache/http/impl/client/AutoRetryHttpClient.class -org/apache/http/impl/client/BasicCredentialsProvider.class -org/apache/http/impl/client/AbstractResponseHandler.class -org/apache/http/impl/client/IdleConnectionEvictor$DefaultThreadFactory.class -org/apache/http/impl/client/RequestWrapper.class -org/apache/http/impl/client/HttpRequestFutureTask.class -org/apache/http/impl/client/ProxyClient.class -org/apache/http/impl/client/ContentEncodingHttpClient.class -org/apache/http/impl/client/RedirectLocations.class -org/apache/http/impl/client/DefaultHttpRequestRetryHandler.class -org/apache/http/impl/client/HttpRequestTaskCallable.class -org/apache/http/impl/client/StandardHttpRequestRetryHandler.class -org/apache/http/impl/client/AIMDBackoffManager.class -org/apache/http/impl/client/AbstractAuthenticationHandler.class -org/apache/http/impl/client/DecompressingHttpClient.class -org/apache/http/impl/client/SystemClock.class -org/apache/http/impl/client/DefaultRedirectStrategyAdaptor.class -org/apache/http/impl/client/EntityEnclosingRequestWrapper$EntityWrapper.class -org/apache/http/impl/client/AbstractHttpClient.class -org/apache/http/impl/client/Clock.class -org/apache/http/impl/client/DefaultConnectionKeepAliveStrategy.class -org/apache/http/impl/client/InternalHttpClient$1.class -org/apache/http/impl/client/SystemDefaultHttpClient.class -org/apache/http/impl/client/AuthenticationStrategyAdaptor.class -org/apache/http/impl/client/IdleConnectionEvictor.class -org/apache/http/impl/client/SystemDefaultCredentialsProvider.class -org/apache/http/impl/client/FutureRequestExecutionMetrics.class -org/apache/http/impl/client/InternalHttpClient.class -org/apache/http/impl/client/HttpClientBuilder$2.class -org/apache/http/impl/client/NullBackoffStrategy.class -org/apache/http/impl/client/DefaultBackoffStrategy.class -org/apache/http/impl/client/HttpAuthenticator.class -org/apache/http/impl/client/BasicCookieStore.class -org/apache/http/impl/client/EntityEnclosingRequestWrapper.class -org/apache/http/impl/client/CookieSpecRegistries.class -org/apache/http/impl/client/DefaultClientConnectionReuseStrategy.class -org/apache/http/impl/client/DefaultServiceUnavailableRetryStrategy.class -org/apache/http/impl/client/DefaultRedirectHandler.class -org/apache/http/impl/client/HttpClients.class -org/apache/http/impl/client/CloseableHttpClient.class -org/apache/http/impl/client/TunnelRefusedException.class -org/apache/http/impl/client/MinimalHttpClient.class -org/apache/http/impl/client/BasicAuthCache.class -org/apache/http/impl/client/BasicResponseHandler.class -org/apache/http/impl/client/DefaultUserTokenHandler.class -org/apache/http/impl/client/HttpClientBuilder$1.class -org/apache/http/impl/client/ClientParamsStack.class -org/apache/http/impl/client/DefaultRequestDirector.class -org/apache/http/impl/client/DefaultTargetAuthenticationHandler.class -org/apache/http/impl/client/IdleConnectionEvictor$1.class -org/apache/http/impl/client/DefaultHttpClient.class -org/apache/http/impl/client/ProxyAuthenticationStrategy.class -org/apache/http/impl/execchain/ -org/apache/http/impl/execchain/ServiceUnavailableRetryExec.class -org/apache/http/impl/execchain/RequestEntityProxy.class -org/apache/http/impl/execchain/ProtocolExec.class -org/apache/http/impl/execchain/MinimalClientExec.class -org/apache/http/impl/execchain/MainClientExec.class -org/apache/http/impl/execchain/RedirectExec.class -org/apache/http/impl/execchain/ClientExecChain.class -org/apache/http/impl/execchain/ConnectionHolder.class -org/apache/http/impl/execchain/HttpResponseProxy.class -org/apache/http/impl/execchain/RetryExec.class -org/apache/http/impl/execchain/TunnelRefusedException.class -org/apache/http/impl/execchain/RequestAbortedException.class -org/apache/http/impl/execchain/ResponseEntityProxy.class -org/apache/http/impl/execchain/BackoffStrategyExec.class -org/apache/http/impl/conn/ -org/apache/http/impl/conn/HttpPoolEntry.class -org/apache/http/impl/conn/DefaultClientConnection.class -org/apache/http/impl/conn/CPool.class -org/apache/http/impl/conn/PoolingHttpClientConnectionManager.class -org/apache/http/impl/conn/Wire.class -org/apache/http/impl/conn/DefaultHttpClientConnectionOperator.class -org/apache/http/impl/conn/IdleConnectionHandler.class -org/apache/http/impl/conn/ManagedHttpClientConnectionFactory.class -org/apache/http/impl/conn/SystemDefaultRoutePlanner$1.class -org/apache/http/impl/conn/CPoolProxy.class -org/apache/http/impl/conn/DefaultHttpRoutePlanner.class -org/apache/http/impl/conn/PoolingClientConnectionManager.class -org/apache/http/impl/conn/DefaultManagedHttpClientConnection.class -org/apache/http/impl/conn/LoggingSessionInputBuffer.class -org/apache/http/impl/conn/ConnectionShutdownException.class -org/apache/http/impl/conn/LoggingOutputStream.class -org/apache/http/impl/conn/ManagedClientConnectionImpl.class -org/apache/http/impl/conn/PoolingHttpClientConnectionManager$ConfigData.class -org/apache/http/impl/conn/DefaultResponseParser.class -org/apache/http/impl/conn/LoggingInputStream.class -org/apache/http/impl/conn/AbstractClientConnAdapter.class -org/apache/http/impl/conn/SystemDefaultRoutePlanner.class -org/apache/http/impl/conn/tsccm/ -org/apache/http/impl/conn/tsccm/ConnPoolByRoute.class -org/apache/http/impl/conn/tsccm/ThreadSafeClientConnManager$1.class -org/apache/http/impl/conn/tsccm/RouteSpecificPool.class -org/apache/http/impl/conn/tsccm/ConnPoolByRoute$1.class -org/apache/http/impl/conn/tsccm/PoolEntryRequest.class -org/apache/http/impl/conn/tsccm/ThreadSafeClientConnManager.class -org/apache/http/impl/conn/tsccm/WaitingThread.class -org/apache/http/impl/conn/tsccm/WaitingThreadAborter.class -org/apache/http/impl/conn/tsccm/RouteSpecificPool$1.class -org/apache/http/impl/conn/tsccm/AbstractConnPool.class -org/apache/http/impl/conn/tsccm/BasicPoolEntryRef.class -org/apache/http/impl/conn/tsccm/BasicPooledConnAdapter.class -org/apache/http/impl/conn/tsccm/BasicPoolEntry.class -org/apache/http/impl/conn/SingleClientConnManager$ConnAdapter.class -org/apache/http/impl/conn/PoolingHttpClientConnectionManager$InternalConnectionFactory.class -org/apache/http/impl/conn/DefaultHttpResponseParserFactory.class -org/apache/http/impl/conn/AbstractPoolEntry.class -org/apache/http/impl/conn/ProxySelectorRoutePlanner$1.class -org/apache/http/impl/conn/AbstractPooledConnAdapter.class -org/apache/http/impl/conn/SingleClientConnManager$PoolEntry.class -org/apache/http/impl/conn/HttpConnPool$InternalConnFactory.class -org/apache/http/impl/conn/SchemeRegistryFactory.class -org/apache/http/impl/conn/DefaultClientConnectionOperator.class -org/apache/http/impl/conn/LoggingManagedHttpClientConnection.class -org/apache/http/impl/conn/LoggingSessionOutputBuffer.class -org/apache/http/impl/conn/BasicHttpClientConnectionManager$1.class -org/apache/http/impl/conn/DefaultProxyRoutePlanner.class -org/apache/http/impl/conn/BasicClientConnectionManager$1.class -org/apache/http/impl/conn/PoolingHttpClientConnectionManager$1.class -org/apache/http/impl/conn/BasicHttpClientConnectionManager.class -org/apache/http/impl/conn/PoolingClientConnectionManager$1.class -org/apache/http/impl/conn/IdleConnectionHandler$TimeValues.class -org/apache/http/impl/conn/CPoolEntry.class -org/apache/http/impl/conn/DefaultSchemePortResolver.class -org/apache/http/impl/conn/SingleClientConnManager.class -org/apache/http/impl/conn/DefaultRoutePlanner.class -org/apache/http/impl/conn/InMemoryDnsResolver.class -org/apache/http/impl/conn/DefaultHttpResponseParser.class -org/apache/http/impl/conn/HttpConnPool.class -org/apache/http/impl/conn/BasicClientConnectionManager.class -org/apache/http/impl/conn/SingleClientConnManager$1.class -org/apache/http/impl/conn/ProxySelectorRoutePlanner.class -org/apache/http/impl/conn/SystemDefaultDnsResolver.class -mozilla/ -mozilla/public-suffix-list.txt -META-INF/maven/org.apache.httpcomponents/httpclient/ -META-INF/maven/org.apache.httpcomponents/httpclient/pom.xml -META-INF/maven/org.apache.httpcomponents/httpclient/pom.properties -META-INF/NOTICE.txt -META-INF/LICENSE.txt -org/apache/commons/ -org/apache/commons/logging/ -org/apache/commons/logging/impl/ -org/apache/commons/logging/impl/AvalonLogger.class -org/apache/commons/logging/impl/SimpleLog.class -org/apache/commons/logging/impl/Log4JLogger.class -org/apache/commons/logging/impl/WeakHashtable.class -org/apache/commons/logging/impl/WeakHashtable$1.class -org/apache/commons/logging/impl/Jdk14Logger.class -org/apache/commons/logging/impl/ServletContextCleaner.class -org/apache/commons/logging/impl/WeakHashtable$WeakKey.class -org/apache/commons/logging/impl/NoOpLog.class -org/apache/commons/logging/impl/LogKitLogger.class -org/apache/commons/logging/impl/LogFactoryImpl$3.class -org/apache/commons/logging/impl/LogFactoryImpl$1.class -org/apache/commons/logging/impl/WeakHashtable$Referenced.class -org/apache/commons/logging/impl/SimpleLog$1.class -org/apache/commons/logging/impl/Jdk13LumberjackLogger.class -org/apache/commons/logging/impl/LogFactoryImpl.class -org/apache/commons/logging/impl/LogFactoryImpl$2.class -org/apache/commons/logging/impl/WeakHashtable$Entry.class -org/apache/commons/logging/LogSource.class -org/apache/commons/logging/LogFactory$4.class -org/apache/commons/logging/LogFactory$3.class -org/apache/commons/logging/LogFactory$6.class -org/apache/commons/logging/LogConfigurationException.class -org/apache/commons/logging/LogFactory.class -org/apache/commons/logging/LogFactory$5.class -org/apache/commons/logging/LogFactory$1.class -org/apache/commons/logging/LogFactory$2.class -org/apache/commons/logging/Log.class -META-INF/maven/commons-logging/ -META-INF/maven/commons-logging/commons-logging/ -META-INF/maven/commons-logging/commons-logging/pom.xml -META-INF/maven/commons-logging/commons-logging/pom.properties -org/apache/commons/codec/ -org/apache/commons/codec/binary/ -org/apache/commons/codec/binary/Base32.class -org/apache/commons/codec/binary/Base32InputStream.class -org/apache/commons/codec/binary/Base32OutputStream.class -org/apache/commons/codec/binary/Base64.class -org/apache/commons/codec/binary/Base64InputStream.class -org/apache/commons/codec/binary/Base64OutputStream.class -org/apache/commons/codec/binary/BaseNCodec$Context.class -org/apache/commons/codec/binary/BaseNCodec.class -org/apache/commons/codec/binary/BaseNCodecInputStream.class -org/apache/commons/codec/binary/BaseNCodecOutputStream.class -org/apache/commons/codec/binary/BinaryCodec.class -org/apache/commons/codec/binary/Hex.class -org/apache/commons/codec/binary/StringUtils.class -org/apache/commons/codec/BinaryDecoder.class -org/apache/commons/codec/BinaryEncoder.class -org/apache/commons/codec/CharEncoding.class -org/apache/commons/codec/Charsets.class -org/apache/commons/codec/Decoder.class -org/apache/commons/codec/DecoderException.class -org/apache/commons/codec/digest/ -org/apache/commons/codec/digest/B64.class -org/apache/commons/codec/digest/Crypt.class -org/apache/commons/codec/digest/DigestUtils.class -org/apache/commons/codec/digest/Md5Crypt.class -org/apache/commons/codec/digest/MessageDigestAlgorithms.class -org/apache/commons/codec/digest/Sha2Crypt.class -org/apache/commons/codec/digest/UnixCrypt.class -org/apache/commons/codec/Encoder.class -org/apache/commons/codec/EncoderException.class -org/apache/commons/codec/language/ -org/apache/commons/codec/language/AbstractCaverphone.class -org/apache/commons/codec/language/bm/ -org/apache/commons/codec/language/bm/ash_approx_any.txt -org/apache/commons/codec/language/bm/ash_approx_common.txt -org/apache/commons/codec/language/bm/ash_approx_cyrillic.txt -org/apache/commons/codec/language/bm/ash_approx_english.txt -org/apache/commons/codec/language/bm/ash_approx_french.txt -org/apache/commons/codec/language/bm/ash_approx_german.txt -org/apache/commons/codec/language/bm/ash_approx_hebrew.txt -org/apache/commons/codec/language/bm/ash_approx_hungarian.txt -org/apache/commons/codec/language/bm/ash_approx_polish.txt -org/apache/commons/codec/language/bm/ash_approx_romanian.txt -org/apache/commons/codec/language/bm/ash_approx_russian.txt -org/apache/commons/codec/language/bm/ash_approx_spanish.txt -org/apache/commons/codec/language/bm/ash_exact_any.txt -org/apache/commons/codec/language/bm/ash_exact_approx_common.txt -org/apache/commons/codec/language/bm/ash_exact_common.txt -org/apache/commons/codec/language/bm/ash_exact_cyrillic.txt -org/apache/commons/codec/language/bm/ash_exact_english.txt -org/apache/commons/codec/language/bm/ash_exact_french.txt -org/apache/commons/codec/language/bm/ash_exact_german.txt -org/apache/commons/codec/language/bm/ash_exact_hebrew.txt -org/apache/commons/codec/language/bm/ash_exact_hungarian.txt -org/apache/commons/codec/language/bm/ash_exact_polish.txt -org/apache/commons/codec/language/bm/ash_exact_romanian.txt -org/apache/commons/codec/language/bm/ash_exact_russian.txt -org/apache/commons/codec/language/bm/ash_exact_spanish.txt -org/apache/commons/codec/language/bm/ash_hebrew_common.txt -org/apache/commons/codec/language/bm/ash_languages.txt -org/apache/commons/codec/language/bm/ash_rules_any.txt -org/apache/commons/codec/language/bm/ash_rules_cyrillic.txt -org/apache/commons/codec/language/bm/ash_rules_english.txt -org/apache/commons/codec/language/bm/ash_rules_french.txt -org/apache/commons/codec/language/bm/ash_rules_german.txt -org/apache/commons/codec/language/bm/ash_rules_hebrew.txt -org/apache/commons/codec/language/bm/ash_rules_hungarian.txt -org/apache/commons/codec/language/bm/ash_rules_polish.txt -org/apache/commons/codec/language/bm/ash_rules_romanian.txt -org/apache/commons/codec/language/bm/ash_rules_russian.txt -org/apache/commons/codec/language/bm/ash_rules_spanish.txt -org/apache/commons/codec/language/bm/BeiderMorseEncoder.class -org/apache/commons/codec/language/bm/gen_approx_any.txt -org/apache/commons/codec/language/bm/gen_approx_arabic.txt -org/apache/commons/codec/language/bm/gen_approx_common.txt -org/apache/commons/codec/language/bm/gen_approx_cyrillic.txt -org/apache/commons/codec/language/bm/gen_approx_czech.txt -org/apache/commons/codec/language/bm/gen_approx_dutch.txt -org/apache/commons/codec/language/bm/gen_approx_english.txt -org/apache/commons/codec/language/bm/gen_approx_french.txt -org/apache/commons/codec/language/bm/gen_approx_german.txt -org/apache/commons/codec/language/bm/gen_approx_greek.txt -org/apache/commons/codec/language/bm/gen_approx_greeklatin.txt -org/apache/commons/codec/language/bm/gen_approx_hebrew.txt -org/apache/commons/codec/language/bm/gen_approx_hungarian.txt -org/apache/commons/codec/language/bm/gen_approx_italian.txt -org/apache/commons/codec/language/bm/gen_approx_polish.txt -org/apache/commons/codec/language/bm/gen_approx_portuguese.txt -org/apache/commons/codec/language/bm/gen_approx_romanian.txt -org/apache/commons/codec/language/bm/gen_approx_russian.txt -org/apache/commons/codec/language/bm/gen_approx_spanish.txt -org/apache/commons/codec/language/bm/gen_approx_turkish.txt -org/apache/commons/codec/language/bm/gen_exact_any.txt -org/apache/commons/codec/language/bm/gen_exact_approx_common.txt -org/apache/commons/codec/language/bm/gen_exact_arabic.txt -org/apache/commons/codec/language/bm/gen_exact_common.txt -org/apache/commons/codec/language/bm/gen_exact_cyrillic.txt -org/apache/commons/codec/language/bm/gen_exact_czech.txt -org/apache/commons/codec/language/bm/gen_exact_dutch.txt -org/apache/commons/codec/language/bm/gen_exact_english.txt -org/apache/commons/codec/language/bm/gen_exact_french.txt -org/apache/commons/codec/language/bm/gen_exact_german.txt -org/apache/commons/codec/language/bm/gen_exact_greek.txt -org/apache/commons/codec/language/bm/gen_exact_greeklatin.txt -org/apache/commons/codec/language/bm/gen_exact_hebrew.txt -org/apache/commons/codec/language/bm/gen_exact_hungarian.txt -org/apache/commons/codec/language/bm/gen_exact_italian.txt -org/apache/commons/codec/language/bm/gen_exact_polish.txt -org/apache/commons/codec/language/bm/gen_exact_portuguese.txt -org/apache/commons/codec/language/bm/gen_exact_romanian.txt -org/apache/commons/codec/language/bm/gen_exact_russian.txt -org/apache/commons/codec/language/bm/gen_exact_spanish.txt -org/apache/commons/codec/language/bm/gen_exact_turkish.txt -org/apache/commons/codec/language/bm/gen_hebrew_common.txt -org/apache/commons/codec/language/bm/gen_languages.txt -org/apache/commons/codec/language/bm/gen_rules_any.txt -org/apache/commons/codec/language/bm/gen_rules_arabic.txt -org/apache/commons/codec/language/bm/gen_rules_cyrillic.txt -org/apache/commons/codec/language/bm/gen_rules_czech.txt -org/apache/commons/codec/language/bm/gen_rules_dutch.txt -org/apache/commons/codec/language/bm/gen_rules_english.txt -org/apache/commons/codec/language/bm/gen_rules_french.txt -org/apache/commons/codec/language/bm/gen_rules_german.txt -org/apache/commons/codec/language/bm/gen_rules_greek.txt -org/apache/commons/codec/language/bm/gen_rules_greeklatin.txt -org/apache/commons/codec/language/bm/gen_rules_hebrew.txt -org/apache/commons/codec/language/bm/gen_rules_hungarian.txt -org/apache/commons/codec/language/bm/gen_rules_italian.txt -org/apache/commons/codec/language/bm/gen_rules_polish.txt -org/apache/commons/codec/language/bm/gen_rules_portuguese.txt -org/apache/commons/codec/language/bm/gen_rules_romanian.txt -org/apache/commons/codec/language/bm/gen_rules_russian.txt -org/apache/commons/codec/language/bm/gen_rules_spanish.txt -org/apache/commons/codec/language/bm/gen_rules_turkish.txt -org/apache/commons/codec/language/bm/Lang$1.class -org/apache/commons/codec/language/bm/Lang$LangRule.class -org/apache/commons/codec/language/bm/Lang.class -org/apache/commons/codec/language/bm/lang.txt -org/apache/commons/codec/language/bm/Languages$1.class -org/apache/commons/codec/language/bm/Languages$2.class -org/apache/commons/codec/language/bm/Languages$LanguageSet.class -org/apache/commons/codec/language/bm/Languages$SomeLanguages.class -org/apache/commons/codec/language/bm/Languages.class -org/apache/commons/codec/language/bm/NameType.class -org/apache/commons/codec/language/bm/PhoneticEngine$1.class -org/apache/commons/codec/language/bm/PhoneticEngine$PhonemeBuilder.class -org/apache/commons/codec/language/bm/PhoneticEngine$RulesApplication.class -org/apache/commons/codec/language/bm/PhoneticEngine.class -org/apache/commons/codec/language/bm/ResourceConstants.class -org/apache/commons/codec/language/bm/Rule$1.class -org/apache/commons/codec/language/bm/Rule$10.class -org/apache/commons/codec/language/bm/Rule$2.class -org/apache/commons/codec/language/bm/Rule$3.class -org/apache/commons/codec/language/bm/Rule$4.class -org/apache/commons/codec/language/bm/Rule$5.class -org/apache/commons/codec/language/bm/Rule$6.class -org/apache/commons/codec/language/bm/Rule$7.class -org/apache/commons/codec/language/bm/Rule$8.class -org/apache/commons/codec/language/bm/Rule$9.class -org/apache/commons/codec/language/bm/Rule$Phoneme$1.class -org/apache/commons/codec/language/bm/Rule$Phoneme.class -org/apache/commons/codec/language/bm/Rule$PhonemeExpr.class -org/apache/commons/codec/language/bm/Rule$PhonemeList.class -org/apache/commons/codec/language/bm/Rule$RPattern.class -org/apache/commons/codec/language/bm/Rule.class -org/apache/commons/codec/language/bm/RuleType.class -org/apache/commons/codec/language/bm/sep_approx_any.txt -org/apache/commons/codec/language/bm/sep_approx_common.txt -org/apache/commons/codec/language/bm/sep_approx_french.txt -org/apache/commons/codec/language/bm/sep_approx_hebrew.txt -org/apache/commons/codec/language/bm/sep_approx_italian.txt -org/apache/commons/codec/language/bm/sep_approx_portuguese.txt -org/apache/commons/codec/language/bm/sep_approx_spanish.txt -org/apache/commons/codec/language/bm/sep_exact_any.txt -org/apache/commons/codec/language/bm/sep_exact_approx_common.txt -org/apache/commons/codec/language/bm/sep_exact_common.txt -org/apache/commons/codec/language/bm/sep_exact_french.txt -org/apache/commons/codec/language/bm/sep_exact_hebrew.txt -org/apache/commons/codec/language/bm/sep_exact_italian.txt -org/apache/commons/codec/language/bm/sep_exact_portuguese.txt -org/apache/commons/codec/language/bm/sep_exact_spanish.txt -org/apache/commons/codec/language/bm/sep_hebrew_common.txt -org/apache/commons/codec/language/bm/sep_languages.txt -org/apache/commons/codec/language/bm/sep_rules_any.txt -org/apache/commons/codec/language/bm/sep_rules_french.txt -org/apache/commons/codec/language/bm/sep_rules_hebrew.txt -org/apache/commons/codec/language/bm/sep_rules_italian.txt -org/apache/commons/codec/language/bm/sep_rules_portuguese.txt -org/apache/commons/codec/language/bm/sep_rules_spanish.txt -org/apache/commons/codec/language/Caverphone.class -org/apache/commons/codec/language/Caverphone1.class -org/apache/commons/codec/language/Caverphone2.class -org/apache/commons/codec/language/ColognePhonetic$CologneBuffer.class -org/apache/commons/codec/language/ColognePhonetic$CologneInputBuffer.class -org/apache/commons/codec/language/ColognePhonetic$CologneOutputBuffer.class -org/apache/commons/codec/language/ColognePhonetic.class -org/apache/commons/codec/language/DoubleMetaphone$DoubleMetaphoneResult.class -org/apache/commons/codec/language/DoubleMetaphone.class -org/apache/commons/codec/language/MatchRatingApproachEncoder.class -org/apache/commons/codec/language/Metaphone.class -org/apache/commons/codec/language/Nysiis.class -org/apache/commons/codec/language/RefinedSoundex.class -org/apache/commons/codec/language/Soundex.class -org/apache/commons/codec/language/SoundexUtils.class -org/apache/commons/codec/net/ -org/apache/commons/codec/net/BCodec.class -org/apache/commons/codec/net/QCodec.class -org/apache/commons/codec/net/QuotedPrintableCodec.class -org/apache/commons/codec/net/RFC1522Codec.class -org/apache/commons/codec/net/URLCodec.class -org/apache/commons/codec/net/Utils.class -org/apache/commons/codec/StringDecoder.class -org/apache/commons/codec/StringEncoder.class -org/apache/commons/codec/StringEncoderComparator.class -META-INF/maven/commons-codec/ -META-INF/maven/commons-codec/commons-codec/ -META-INF/maven/commons-codec/commons-codec/pom.xml -META-INF/maven/commons-codec/commons-codec/pom.properties -META-INF/maven/com.fasterxml.jackson.core/ -META-INF/maven/com.fasterxml.jackson.core/jackson-core/ -META-INF/maven/com.fasterxml.jackson.core/jackson-core/pom.properties -META-INF/maven/com.fasterxml.jackson.core/jackson-core/pom.xml -META-INF/services/ -META-INF/services/com.fasterxml.jackson.core.JsonFactory -com/fasterxml/ -com/fasterxml/jackson/ -com/fasterxml/jackson/core/ -com/fasterxml/jackson/core/Base64Variant.class -com/fasterxml/jackson/core/Base64Variants.class -com/fasterxml/jackson/core/FormatFeature.class -com/fasterxml/jackson/core/FormatSchema.class -com/fasterxml/jackson/core/JsonEncoding.class -com/fasterxml/jackson/core/JsonFactory$Feature.class -com/fasterxml/jackson/core/JsonFactory.class -com/fasterxml/jackson/core/JsonGenerationException.class -com/fasterxml/jackson/core/JsonGenerator$1.class -com/fasterxml/jackson/core/JsonGenerator$Feature.class -com/fasterxml/jackson/core/JsonGenerator.class -com/fasterxml/jackson/core/JsonLocation.class -com/fasterxml/jackson/core/JsonParseException.class -com/fasterxml/jackson/core/JsonParser$Feature.class -com/fasterxml/jackson/core/JsonParser$NumberType.class -com/fasterxml/jackson/core/JsonParser.class -com/fasterxml/jackson/core/JsonPointer.class -com/fasterxml/jackson/core/JsonProcessingException.class -com/fasterxml/jackson/core/JsonStreamContext.class -com/fasterxml/jackson/core/JsonToken.class -com/fasterxml/jackson/core/JsonTokenId.class -com/fasterxml/jackson/core/JsonpCharacterEscapes.class -com/fasterxml/jackson/core/ObjectCodec.class -com/fasterxml/jackson/core/PrettyPrinter.class -com/fasterxml/jackson/core/SerializableString.class -com/fasterxml/jackson/core/TreeCodec.class -com/fasterxml/jackson/core/TreeNode.class -com/fasterxml/jackson/core/Version.class -com/fasterxml/jackson/core/Versioned.class -com/fasterxml/jackson/core/async/ -com/fasterxml/jackson/core/async/ByteArrayFeeder.class -com/fasterxml/jackson/core/async/ByteBufferFeeder.class -com/fasterxml/jackson/core/async/NonBlockingInputFeeder.class -com/fasterxml/jackson/core/base/ -com/fasterxml/jackson/core/base/GeneratorBase.class -com/fasterxml/jackson/core/base/ParserBase.class -com/fasterxml/jackson/core/base/ParserMinimalBase.class -com/fasterxml/jackson/core/filter/ -com/fasterxml/jackson/core/filter/FilteringGeneratorDelegate.class -com/fasterxml/jackson/core/filter/FilteringParserDelegate.class -com/fasterxml/jackson/core/filter/JsonPointerBasedFilter.class -com/fasterxml/jackson/core/filter/TokenFilter.class -com/fasterxml/jackson/core/filter/TokenFilterContext.class -com/fasterxml/jackson/core/format/ -com/fasterxml/jackson/core/format/DataFormatDetector.class -com/fasterxml/jackson/core/format/DataFormatMatcher.class -com/fasterxml/jackson/core/format/InputAccessor$Std.class -com/fasterxml/jackson/core/format/InputAccessor.class -com/fasterxml/jackson/core/format/MatchStrength.class -com/fasterxml/jackson/core/io/ -com/fasterxml/jackson/core/io/CharTypes.class -com/fasterxml/jackson/core/io/CharacterEscapes.class -com/fasterxml/jackson/core/io/DataOutputAsStream.class -com/fasterxml/jackson/core/io/IOContext.class -com/fasterxml/jackson/core/io/InputDecorator.class -com/fasterxml/jackson/core/io/JsonEOFException.class -com/fasterxml/jackson/core/io/JsonStringEncoder.class -com/fasterxml/jackson/core/io/MergedStream.class -com/fasterxml/jackson/core/io/NumberInput.class -com/fasterxml/jackson/core/io/NumberOutput.class -com/fasterxml/jackson/core/io/OutputDecorator.class -com/fasterxml/jackson/core/io/SegmentedStringWriter.class -com/fasterxml/jackson/core/io/SerializedString.class -com/fasterxml/jackson/core/io/UTF32Reader.class -com/fasterxml/jackson/core/io/UTF8Writer.class -com/fasterxml/jackson/core/json/ -com/fasterxml/jackson/core/json/ByteSourceJsonBootstrapper.class -com/fasterxml/jackson/core/json/DupDetector.class -com/fasterxml/jackson/core/json/JsonGeneratorImpl.class -com/fasterxml/jackson/core/json/JsonReadContext.class -com/fasterxml/jackson/core/json/JsonWriteContext.class -com/fasterxml/jackson/core/json/PackageVersion.class -com/fasterxml/jackson/core/json/ReaderBasedJsonParser.class -com/fasterxml/jackson/core/json/UTF8DataInputJsonParser.class -com/fasterxml/jackson/core/json/UTF8JsonGenerator.class -com/fasterxml/jackson/core/json/UTF8StreamJsonParser.class -com/fasterxml/jackson/core/json/WriterBasedJsonGenerator.class -com/fasterxml/jackson/core/json/async/ -com/fasterxml/jackson/core/json/async/NonBlockingJsonParser.class -com/fasterxml/jackson/core/json/async/NonBlockingJsonParserBase.class -com/fasterxml/jackson/core/sym/ -com/fasterxml/jackson/core/sym/ByteQuadsCanonicalizer$TableInfo.class -com/fasterxml/jackson/core/sym/ByteQuadsCanonicalizer.class -com/fasterxml/jackson/core/sym/CharsToNameCanonicalizer$Bucket.class -com/fasterxml/jackson/core/sym/CharsToNameCanonicalizer$TableInfo.class -com/fasterxml/jackson/core/sym/CharsToNameCanonicalizer.class -com/fasterxml/jackson/core/sym/Name.class -com/fasterxml/jackson/core/sym/Name1.class -com/fasterxml/jackson/core/sym/Name2.class -com/fasterxml/jackson/core/sym/Name3.class -com/fasterxml/jackson/core/sym/NameN.class -com/fasterxml/jackson/core/type/ -com/fasterxml/jackson/core/type/ResolvedType.class -com/fasterxml/jackson/core/type/TypeReference.class -com/fasterxml/jackson/core/type/WritableTypeId$Inclusion.class -com/fasterxml/jackson/core/type/WritableTypeId.class -com/fasterxml/jackson/core/util/ -com/fasterxml/jackson/core/util/BufferRecycler.class -com/fasterxml/jackson/core/util/BufferRecyclers.class -com/fasterxml/jackson/core/util/ByteArrayBuilder.class -com/fasterxml/jackson/core/util/DefaultIndenter.class -com/fasterxml/jackson/core/util/DefaultPrettyPrinter$FixedSpaceIndenter.class -com/fasterxml/jackson/core/util/DefaultPrettyPrinter$Indenter.class -com/fasterxml/jackson/core/util/DefaultPrettyPrinter$NopIndenter.class -com/fasterxml/jackson/core/util/DefaultPrettyPrinter.class -com/fasterxml/jackson/core/util/Instantiatable.class -com/fasterxml/jackson/core/util/InternCache.class -com/fasterxml/jackson/core/util/JsonGeneratorDelegate.class -com/fasterxml/jackson/core/util/JsonParserDelegate.class -com/fasterxml/jackson/core/util/JsonParserSequence.class -com/fasterxml/jackson/core/util/MinimalPrettyPrinter.class -com/fasterxml/jackson/core/util/RequestPayload.class -com/fasterxml/jackson/core/util/Separators.class -com/fasterxml/jackson/core/util/TextBuffer.class -com/fasterxml/jackson/core/util/ThreadLocalBufferManager$ThreadLocalBufferManagerHolder.class -com/fasterxml/jackson/core/util/ThreadLocalBufferManager.class -com/fasterxml/jackson/core/util/VersionUtil.class -META-INF/maven/com.fasterxml.jackson.core/jackson-annotations/ -META-INF/maven/com.fasterxml.jackson.core/jackson-annotations/pom.properties -META-INF/maven/com.fasterxml.jackson.core/jackson-annotations/pom.xml -com/fasterxml/jackson/annotation/ -com/fasterxml/jackson/annotation/JacksonAnnotation.class -com/fasterxml/jackson/annotation/JacksonAnnotationValue.class -com/fasterxml/jackson/annotation/JacksonAnnotationsInside.class -com/fasterxml/jackson/annotation/JacksonInject$Value.class -com/fasterxml/jackson/annotation/JacksonInject.class -com/fasterxml/jackson/annotation/JsonAlias.class -com/fasterxml/jackson/annotation/JsonAnyGetter.class -com/fasterxml/jackson/annotation/JsonAnySetter.class -com/fasterxml/jackson/annotation/JsonAutoDetect$1.class -com/fasterxml/jackson/annotation/JsonAutoDetect$Value.class -com/fasterxml/jackson/annotation/JsonAutoDetect$Visibility.class -com/fasterxml/jackson/annotation/JsonAutoDetect.class -com/fasterxml/jackson/annotation/JsonBackReference.class -com/fasterxml/jackson/annotation/JsonClassDescription.class -com/fasterxml/jackson/annotation/JsonCreator$Mode.class -com/fasterxml/jackson/annotation/JsonCreator.class -com/fasterxml/jackson/annotation/JsonEnumDefaultValue.class -com/fasterxml/jackson/annotation/JsonFilter.class -com/fasterxml/jackson/annotation/JsonFormat$Feature.class -com/fasterxml/jackson/annotation/JsonFormat$Features.class -com/fasterxml/jackson/annotation/JsonFormat$Shape.class -com/fasterxml/jackson/annotation/JsonFormat$Value.class -com/fasterxml/jackson/annotation/JsonFormat.class -com/fasterxml/jackson/annotation/JsonGetter.class -com/fasterxml/jackson/annotation/JsonIdentityInfo.class -com/fasterxml/jackson/annotation/JsonIdentityReference.class -com/fasterxml/jackson/annotation/JsonIgnore.class -com/fasterxml/jackson/annotation/JsonIgnoreProperties$Value.class -com/fasterxml/jackson/annotation/JsonIgnoreProperties.class -com/fasterxml/jackson/annotation/JsonIgnoreType.class -com/fasterxml/jackson/annotation/JsonInclude$Include.class -com/fasterxml/jackson/annotation/JsonInclude$Value.class -com/fasterxml/jackson/annotation/JsonInclude.class -com/fasterxml/jackson/annotation/JsonManagedReference.class -com/fasterxml/jackson/annotation/JsonMerge.class -com/fasterxml/jackson/annotation/JsonProperty$Access.class -com/fasterxml/jackson/annotation/JsonProperty.class -com/fasterxml/jackson/annotation/JsonPropertyDescription.class -com/fasterxml/jackson/annotation/JsonPropertyOrder.class -com/fasterxml/jackson/annotation/JsonRawValue.class -com/fasterxml/jackson/annotation/JsonRootName.class -com/fasterxml/jackson/annotation/JsonSetter$Value.class -com/fasterxml/jackson/annotation/JsonSetter.class -com/fasterxml/jackson/annotation/JsonSubTypes$Type.class -com/fasterxml/jackson/annotation/JsonSubTypes.class -com/fasterxml/jackson/annotation/JsonTypeId.class -com/fasterxml/jackson/annotation/JsonTypeInfo$As.class -com/fasterxml/jackson/annotation/JsonTypeInfo$Id.class -com/fasterxml/jackson/annotation/JsonTypeInfo$None.class -com/fasterxml/jackson/annotation/JsonTypeInfo.class -com/fasterxml/jackson/annotation/JsonTypeName.class -com/fasterxml/jackson/annotation/JsonUnwrapped.class -com/fasterxml/jackson/annotation/JsonValue.class -com/fasterxml/jackson/annotation/JsonView.class -com/fasterxml/jackson/annotation/Nulls.class -com/fasterxml/jackson/annotation/ObjectIdGenerator$IdKey.class -com/fasterxml/jackson/annotation/ObjectIdGenerator.class -com/fasterxml/jackson/annotation/ObjectIdGenerators$Base.class -com/fasterxml/jackson/annotation/ObjectIdGenerators$IntSequenceGenerator.class -com/fasterxml/jackson/annotation/ObjectIdGenerators$None.class -com/fasterxml/jackson/annotation/ObjectIdGenerators$PropertyGenerator.class -com/fasterxml/jackson/annotation/ObjectIdGenerators$StringIdGenerator.class -com/fasterxml/jackson/annotation/ObjectIdGenerators$UUIDGenerator.class -com/fasterxml/jackson/annotation/ObjectIdGenerators.class -com/fasterxml/jackson/annotation/ObjectIdResolver.class -com/fasterxml/jackson/annotation/OptBoolean.class -com/fasterxml/jackson/annotation/PropertyAccessor.class -com/fasterxml/jackson/annotation/SimpleObjectIdResolver.class -META-INF/maven/com.fasterxml.jackson.core/jackson-databind/ -META-INF/maven/com.fasterxml.jackson.core/jackson-databind/pom.properties -META-INF/maven/com.fasterxml.jackson.core/jackson-databind/pom.xml -META-INF/services/com.fasterxml.jackson.core.ObjectCodec -com/fasterxml/jackson/databind/ -com/fasterxml/jackson/databind/AbstractTypeResolver.class -com/fasterxml/jackson/databind/AnnotationIntrospector$ReferenceProperty$Type.class -com/fasterxml/jackson/databind/AnnotationIntrospector$ReferenceProperty.class -com/fasterxml/jackson/databind/AnnotationIntrospector.class -com/fasterxml/jackson/databind/BeanDescription.class -com/fasterxml/jackson/databind/BeanProperty$Bogus.class -com/fasterxml/jackson/databind/BeanProperty$Std.class -com/fasterxml/jackson/databind/BeanProperty.class -com/fasterxml/jackson/databind/DatabindContext.class -com/fasterxml/jackson/databind/DeserializationConfig.class -com/fasterxml/jackson/databind/DeserializationContext.class -com/fasterxml/jackson/databind/DeserializationFeature.class -com/fasterxml/jackson/databind/InjectableValues$Std.class -com/fasterxml/jackson/databind/InjectableValues.class -com/fasterxml/jackson/databind/JavaType.class -com/fasterxml/jackson/databind/JsonDeserializer$None.class -com/fasterxml/jackson/databind/JsonDeserializer.class -com/fasterxml/jackson/databind/JsonMappingException$Reference.class -com/fasterxml/jackson/databind/JsonMappingException.class -com/fasterxml/jackson/databind/JsonNode$1.class -com/fasterxml/jackson/databind/JsonNode.class -com/fasterxml/jackson/databind/JsonSerializable$Base.class -com/fasterxml/jackson/databind/JsonSerializable.class -com/fasterxml/jackson/databind/JsonSerializer$None.class -com/fasterxml/jackson/databind/JsonSerializer.class -com/fasterxml/jackson/databind/KeyDeserializer$None.class -com/fasterxml/jackson/databind/KeyDeserializer.class -com/fasterxml/jackson/databind/MapperFeature.class -com/fasterxml/jackson/databind/MappingIterator.class -com/fasterxml/jackson/databind/MappingJsonFactory.class -com/fasterxml/jackson/databind/Module$SetupContext.class -com/fasterxml/jackson/databind/Module.class -com/fasterxml/jackson/databind/ObjectMapper$1.class -com/fasterxml/jackson/databind/ObjectMapper$2.class -com/fasterxml/jackson/databind/ObjectMapper$3.class -com/fasterxml/jackson/databind/ObjectMapper$DefaultTypeResolverBuilder.class -com/fasterxml/jackson/databind/ObjectMapper$DefaultTyping.class -com/fasterxml/jackson/databind/ObjectMapper.class -com/fasterxml/jackson/databind/ObjectReader.class -com/fasterxml/jackson/databind/ObjectWriter$GeneratorSettings.class -com/fasterxml/jackson/databind/ObjectWriter$Prefetch.class -com/fasterxml/jackson/databind/ObjectWriter.class -com/fasterxml/jackson/databind/PropertyMetadata$MergeInfo.class -com/fasterxml/jackson/databind/PropertyMetadata.class -com/fasterxml/jackson/databind/PropertyName.class -com/fasterxml/jackson/databind/PropertyNamingStrategy$KebabCaseStrategy.class -com/fasterxml/jackson/databind/PropertyNamingStrategy$LowerCaseStrategy.class -com/fasterxml/jackson/databind/PropertyNamingStrategy$LowerCaseWithUnderscoresStrategy.class -com/fasterxml/jackson/databind/PropertyNamingStrategy$PascalCaseStrategy.class -com/fasterxml/jackson/databind/PropertyNamingStrategy$PropertyNamingStrategyBase.class -com/fasterxml/jackson/databind/PropertyNamingStrategy$SnakeCaseStrategy.class -com/fasterxml/jackson/databind/PropertyNamingStrategy$UpperCamelCaseStrategy.class -com/fasterxml/jackson/databind/PropertyNamingStrategy.class -com/fasterxml/jackson/databind/RuntimeJsonMappingException.class -com/fasterxml/jackson/databind/SequenceWriter.class -com/fasterxml/jackson/databind/SerializationConfig.class -com/fasterxml/jackson/databind/SerializationFeature.class -com/fasterxml/jackson/databind/SerializerProvider.class -com/fasterxml/jackson/databind/annotation/ -com/fasterxml/jackson/databind/annotation/JacksonStdImpl.class -com/fasterxml/jackson/databind/annotation/JsonAppend$Attr.class -com/fasterxml/jackson/databind/annotation/JsonAppend$Prop.class -com/fasterxml/jackson/databind/annotation/JsonAppend.class -com/fasterxml/jackson/databind/annotation/JsonDeserialize.class -com/fasterxml/jackson/databind/annotation/JsonNaming.class -com/fasterxml/jackson/databind/annotation/JsonPOJOBuilder$Value.class -com/fasterxml/jackson/databind/annotation/JsonPOJOBuilder.class -com/fasterxml/jackson/databind/annotation/JsonSerialize$Inclusion.class -com/fasterxml/jackson/databind/annotation/JsonSerialize$Typing.class -com/fasterxml/jackson/databind/annotation/JsonSerialize.class -com/fasterxml/jackson/databind/annotation/JsonTypeIdResolver.class -com/fasterxml/jackson/databind/annotation/JsonTypeResolver.class -com/fasterxml/jackson/databind/annotation/JsonValueInstantiator.class -com/fasterxml/jackson/databind/annotation/NoClass.class -com/fasterxml/jackson/databind/cfg/ -com/fasterxml/jackson/databind/cfg/BaseSettings.class -com/fasterxml/jackson/databind/cfg/ConfigFeature.class -com/fasterxml/jackson/databind/cfg/ConfigOverride$Empty.class -com/fasterxml/jackson/databind/cfg/ConfigOverride.class -com/fasterxml/jackson/databind/cfg/ConfigOverrides.class -com/fasterxml/jackson/databind/cfg/ContextAttributes$Impl.class -com/fasterxml/jackson/databind/cfg/ContextAttributes.class -com/fasterxml/jackson/databind/cfg/DeserializerFactoryConfig.class -com/fasterxml/jackson/databind/cfg/HandlerInstantiator.class -com/fasterxml/jackson/databind/cfg/MapperConfig.class -com/fasterxml/jackson/databind/cfg/MapperConfigBase.class -com/fasterxml/jackson/databind/cfg/MutableConfigOverride.class -com/fasterxml/jackson/databind/cfg/PackageVersion.class -com/fasterxml/jackson/databind/cfg/SerializerFactoryConfig.class -com/fasterxml/jackson/databind/deser/ -com/fasterxml/jackson/databind/deser/AbstractDeserializer.class -com/fasterxml/jackson/databind/deser/BasicDeserializerFactory$1.class -com/fasterxml/jackson/databind/deser/BasicDeserializerFactory.class -com/fasterxml/jackson/databind/deser/BeanDeserializer$1.class -com/fasterxml/jackson/databind/deser/BeanDeserializer$BeanReferring.class -com/fasterxml/jackson/databind/deser/BeanDeserializer.class -com/fasterxml/jackson/databind/deser/BeanDeserializerBase.class -com/fasterxml/jackson/databind/deser/BeanDeserializerBuilder.class -com/fasterxml/jackson/databind/deser/BeanDeserializerFactory.class -com/fasterxml/jackson/databind/deser/BeanDeserializerModifier.class -com/fasterxml/jackson/databind/deser/BuilderBasedDeserializer.class -com/fasterxml/jackson/databind/deser/ContextualDeserializer.class -com/fasterxml/jackson/databind/deser/ContextualKeyDeserializer.class -com/fasterxml/jackson/databind/deser/CreatorProperty.class -com/fasterxml/jackson/databind/deser/DataFormatReaders$AccessorForReader.class -com/fasterxml/jackson/databind/deser/DataFormatReaders$Match.class -com/fasterxml/jackson/databind/deser/DataFormatReaders.class -com/fasterxml/jackson/databind/deser/DefaultDeserializationContext$Impl.class -com/fasterxml/jackson/databind/deser/DefaultDeserializationContext.class -com/fasterxml/jackson/databind/deser/DeserializationProblemHandler.class -com/fasterxml/jackson/databind/deser/DeserializerCache.class -com/fasterxml/jackson/databind/deser/DeserializerFactory.class -com/fasterxml/jackson/databind/deser/Deserializers$Base.class -com/fasterxml/jackson/databind/deser/Deserializers.class -com/fasterxml/jackson/databind/deser/KeyDeserializers.class -com/fasterxml/jackson/databind/deser/NullValueProvider.class -com/fasterxml/jackson/databind/deser/ResolvableDeserializer.class -com/fasterxml/jackson/databind/deser/SettableAnyProperty$AnySetterReferring.class -com/fasterxml/jackson/databind/deser/SettableAnyProperty.class -com/fasterxml/jackson/databind/deser/SettableBeanProperty$Delegating.class -com/fasterxml/jackson/databind/deser/SettableBeanProperty.class -com/fasterxml/jackson/databind/deser/UnresolvedForwardReference.class -com/fasterxml/jackson/databind/deser/UnresolvedId.class -com/fasterxml/jackson/databind/deser/ValueInstantiator$Base.class -com/fasterxml/jackson/databind/deser/ValueInstantiator$Gettable.class -com/fasterxml/jackson/databind/deser/ValueInstantiator.class -com/fasterxml/jackson/databind/deser/ValueInstantiators$Base.class -com/fasterxml/jackson/databind/deser/ValueInstantiators.class -com/fasterxml/jackson/databind/deser/impl/ -com/fasterxml/jackson/databind/deser/impl/BeanAsArrayBuilderDeserializer.class -com/fasterxml/jackson/databind/deser/impl/BeanAsArrayDeserializer.class -com/fasterxml/jackson/databind/deser/impl/BeanPropertyMap.class -com/fasterxml/jackson/databind/deser/impl/CreatorCandidate$Param.class -com/fasterxml/jackson/databind/deser/impl/CreatorCandidate.class -com/fasterxml/jackson/databind/deser/impl/CreatorCollector$StdTypeConstructor.class -com/fasterxml/jackson/databind/deser/impl/CreatorCollector.class -com/fasterxml/jackson/databind/deser/impl/ErrorThrowingDeserializer.class -com/fasterxml/jackson/databind/deser/impl/ExternalTypeHandler$Builder.class -com/fasterxml/jackson/databind/deser/impl/ExternalTypeHandler$ExtTypedProperty.class -com/fasterxml/jackson/databind/deser/impl/ExternalTypeHandler.class -com/fasterxml/jackson/databind/deser/impl/FailingDeserializer.class -com/fasterxml/jackson/databind/deser/impl/FieldProperty.class -com/fasterxml/jackson/databind/deser/impl/InnerClassProperty.class -com/fasterxml/jackson/databind/deser/impl/JavaUtilCollectionsDeserializers$1.class -com/fasterxml/jackson/databind/deser/impl/JavaUtilCollectionsDeserializers$JavaUtilCollectionsConverter.class -com/fasterxml/jackson/databind/deser/impl/JavaUtilCollectionsDeserializers.class -com/fasterxml/jackson/databind/deser/impl/ManagedReferenceProperty.class -com/fasterxml/jackson/databind/deser/impl/MergingSettableBeanProperty.class -com/fasterxml/jackson/databind/deser/impl/MethodProperty.class -com/fasterxml/jackson/databind/deser/impl/NullsAsEmptyProvider.class -com/fasterxml/jackson/databind/deser/impl/NullsConstantProvider.class -com/fasterxml/jackson/databind/deser/impl/NullsFailProvider.class -com/fasterxml/jackson/databind/deser/impl/ObjectIdReader.class -com/fasterxml/jackson/databind/deser/impl/ObjectIdReferenceProperty$PropertyReferring.class -com/fasterxml/jackson/databind/deser/impl/ObjectIdReferenceProperty.class -com/fasterxml/jackson/databind/deser/impl/ObjectIdValueProperty.class -com/fasterxml/jackson/databind/deser/impl/PropertyBasedCreator$CaseInsensitiveMap.class -com/fasterxml/jackson/databind/deser/impl/PropertyBasedCreator.class -com/fasterxml/jackson/databind/deser/impl/PropertyBasedObjectIdGenerator.class -com/fasterxml/jackson/databind/deser/impl/PropertyValue$Any.class -com/fasterxml/jackson/databind/deser/impl/PropertyValue$Map.class -com/fasterxml/jackson/databind/deser/impl/PropertyValue$Regular.class -com/fasterxml/jackson/databind/deser/impl/PropertyValue.class -com/fasterxml/jackson/databind/deser/impl/PropertyValueBuffer.class -com/fasterxml/jackson/databind/deser/impl/ReadableObjectId$Referring.class -com/fasterxml/jackson/databind/deser/impl/ReadableObjectId.class -com/fasterxml/jackson/databind/deser/impl/SetterlessProperty.class -com/fasterxml/jackson/databind/deser/impl/TypeWrappedDeserializer.class -com/fasterxml/jackson/databind/deser/impl/UnwrappedPropertyHandler.class -com/fasterxml/jackson/databind/deser/impl/ValueInjector.class -com/fasterxml/jackson/databind/deser/std/ -com/fasterxml/jackson/databind/deser/std/ArrayBlockingQueueDeserializer.class -com/fasterxml/jackson/databind/deser/std/AtomicBooleanDeserializer.class -com/fasterxml/jackson/databind/deser/std/AtomicReferenceDeserializer.class -com/fasterxml/jackson/databind/deser/std/BaseNodeDeserializer.class -com/fasterxml/jackson/databind/deser/std/ByteBufferDeserializer.class -com/fasterxml/jackson/databind/deser/std/CollectionDeserializer$CollectionReferring.class -com/fasterxml/jackson/databind/deser/std/CollectionDeserializer$CollectionReferringAccumulator.class -com/fasterxml/jackson/databind/deser/std/CollectionDeserializer.class -com/fasterxml/jackson/databind/deser/std/ContainerDeserializerBase.class -com/fasterxml/jackson/databind/deser/std/DateDeserializers$CalendarDeserializer.class -com/fasterxml/jackson/databind/deser/std/DateDeserializers$DateBasedDeserializer.class -com/fasterxml/jackson/databind/deser/std/DateDeserializers$DateDeserializer.class -com/fasterxml/jackson/databind/deser/std/DateDeserializers$SqlDateDeserializer.class -com/fasterxml/jackson/databind/deser/std/DateDeserializers$TimestampDeserializer.class -com/fasterxml/jackson/databind/deser/std/DateDeserializers.class -com/fasterxml/jackson/databind/deser/std/DelegatingDeserializer.class -com/fasterxml/jackson/databind/deser/std/EnumDeserializer.class -com/fasterxml/jackson/databind/deser/std/EnumMapDeserializer.class -com/fasterxml/jackson/databind/deser/std/EnumSetDeserializer.class -com/fasterxml/jackson/databind/deser/std/FactoryBasedEnumDeserializer.class -com/fasterxml/jackson/databind/deser/std/FromStringDeserializer$Std.class -com/fasterxml/jackson/databind/deser/std/FromStringDeserializer.class -com/fasterxml/jackson/databind/deser/std/JdkDeserializers.class -com/fasterxml/jackson/databind/deser/std/JsonLocationInstantiator.class -com/fasterxml/jackson/databind/deser/std/JsonNodeDeserializer$ArrayDeserializer.class -com/fasterxml/jackson/databind/deser/std/JsonNodeDeserializer$ObjectDeserializer.class -com/fasterxml/jackson/databind/deser/std/JsonNodeDeserializer.class -com/fasterxml/jackson/databind/deser/std/MapDeserializer$MapReferring.class -com/fasterxml/jackson/databind/deser/std/MapDeserializer$MapReferringAccumulator.class -com/fasterxml/jackson/databind/deser/std/MapDeserializer.class -com/fasterxml/jackson/databind/deser/std/MapEntryDeserializer.class -com/fasterxml/jackson/databind/deser/std/NullifyingDeserializer.class -com/fasterxml/jackson/databind/deser/std/NumberDeserializers$1.class -com/fasterxml/jackson/databind/deser/std/NumberDeserializers$BigDecimalDeserializer.class -com/fasterxml/jackson/databind/deser/std/NumberDeserializers$BigIntegerDeserializer.class -com/fasterxml/jackson/databind/deser/std/NumberDeserializers$BooleanDeserializer.class -com/fasterxml/jackson/databind/deser/std/NumberDeserializers$ByteDeserializer.class -com/fasterxml/jackson/databind/deser/std/NumberDeserializers$CharacterDeserializer.class -com/fasterxml/jackson/databind/deser/std/NumberDeserializers$DoubleDeserializer.class -com/fasterxml/jackson/databind/deser/std/NumberDeserializers$FloatDeserializer.class -com/fasterxml/jackson/databind/deser/std/NumberDeserializers$IntegerDeserializer.class -com/fasterxml/jackson/databind/deser/std/NumberDeserializers$LongDeserializer.class -com/fasterxml/jackson/databind/deser/std/NumberDeserializers$NumberDeserializer.class -com/fasterxml/jackson/databind/deser/std/NumberDeserializers$PrimitiveOrWrapperDeserializer.class -com/fasterxml/jackson/databind/deser/std/NumberDeserializers$ShortDeserializer.class -com/fasterxml/jackson/databind/deser/std/NumberDeserializers.class -com/fasterxml/jackson/databind/deser/std/ObjectArrayDeserializer.class -com/fasterxml/jackson/databind/deser/std/PrimitiveArrayDeserializers$BooleanDeser.class -com/fasterxml/jackson/databind/deser/std/PrimitiveArrayDeserializers$ByteDeser.class -com/fasterxml/jackson/databind/deser/std/PrimitiveArrayDeserializers$CharDeser.class -com/fasterxml/jackson/databind/deser/std/PrimitiveArrayDeserializers$DoubleDeser.class -com/fasterxml/jackson/databind/deser/std/PrimitiveArrayDeserializers$FloatDeser.class -com/fasterxml/jackson/databind/deser/std/PrimitiveArrayDeserializers$IntDeser.class -com/fasterxml/jackson/databind/deser/std/PrimitiveArrayDeserializers$LongDeser.class -com/fasterxml/jackson/databind/deser/std/PrimitiveArrayDeserializers$ShortDeser.class -com/fasterxml/jackson/databind/deser/std/PrimitiveArrayDeserializers.class -com/fasterxml/jackson/databind/deser/std/ReferenceTypeDeserializer.class -com/fasterxml/jackson/databind/deser/std/StackTraceElementDeserializer.class -com/fasterxml/jackson/databind/deser/std/StdDelegatingDeserializer.class -com/fasterxml/jackson/databind/deser/std/StdDeserializer.class -com/fasterxml/jackson/databind/deser/std/StdKeyDeserializer$DelegatingKD.class -com/fasterxml/jackson/databind/deser/std/StdKeyDeserializer$EnumKD.class -com/fasterxml/jackson/databind/deser/std/StdKeyDeserializer$StringCtorKeyDeserializer.class -com/fasterxml/jackson/databind/deser/std/StdKeyDeserializer$StringFactoryKeyDeserializer.class -com/fasterxml/jackson/databind/deser/std/StdKeyDeserializer$StringKD.class -com/fasterxml/jackson/databind/deser/std/StdKeyDeserializer.class -com/fasterxml/jackson/databind/deser/std/StdKeyDeserializers.class -com/fasterxml/jackson/databind/deser/std/StdNodeBasedDeserializer.class -com/fasterxml/jackson/databind/deser/std/StdScalarDeserializer.class -com/fasterxml/jackson/databind/deser/std/StdValueInstantiator.class -com/fasterxml/jackson/databind/deser/std/StringArrayDeserializer.class -com/fasterxml/jackson/databind/deser/std/StringCollectionDeserializer.class -com/fasterxml/jackson/databind/deser/std/StringDeserializer.class -com/fasterxml/jackson/databind/deser/std/ThrowableDeserializer.class -com/fasterxml/jackson/databind/deser/std/TokenBufferDeserializer.class -com/fasterxml/jackson/databind/deser/std/UUIDDeserializer.class -com/fasterxml/jackson/databind/deser/std/UntypedObjectDeserializer$Vanilla.class -com/fasterxml/jackson/databind/deser/std/UntypedObjectDeserializer.class -com/fasterxml/jackson/databind/exc/ -com/fasterxml/jackson/databind/exc/IgnoredPropertyException.class -com/fasterxml/jackson/databind/exc/InvalidDefinitionException.class -com/fasterxml/jackson/databind/exc/InvalidFormatException.class -com/fasterxml/jackson/databind/exc/InvalidNullException.class -com/fasterxml/jackson/databind/exc/InvalidTypeIdException.class -com/fasterxml/jackson/databind/exc/MismatchedInputException.class -com/fasterxml/jackson/databind/exc/PropertyBindingException.class -com/fasterxml/jackson/databind/exc/UnrecognizedPropertyException.class -com/fasterxml/jackson/databind/ext/ -com/fasterxml/jackson/databind/ext/CoreXMLDeserializers$Std.class -com/fasterxml/jackson/databind/ext/CoreXMLDeserializers.class -com/fasterxml/jackson/databind/ext/CoreXMLSerializers$XMLGregorianCalendarSerializer.class -com/fasterxml/jackson/databind/ext/CoreXMLSerializers.class -com/fasterxml/jackson/databind/ext/DOMDeserializer$DocumentDeserializer.class -com/fasterxml/jackson/databind/ext/DOMDeserializer$NodeDeserializer.class -com/fasterxml/jackson/databind/ext/DOMDeserializer.class -com/fasterxml/jackson/databind/ext/DOMSerializer.class -com/fasterxml/jackson/databind/ext/Java7Support.class -com/fasterxml/jackson/databind/ext/Java7SupportImpl.class -com/fasterxml/jackson/databind/ext/NioPathDeserializer.class -com/fasterxml/jackson/databind/ext/NioPathSerializer.class -com/fasterxml/jackson/databind/ext/OptionalHandlerFactory.class -com/fasterxml/jackson/databind/introspect/ -com/fasterxml/jackson/databind/introspect/Annotated.class -com/fasterxml/jackson/databind/introspect/AnnotatedClass$Creators.class -com/fasterxml/jackson/databind/introspect/AnnotatedClass.class -com/fasterxml/jackson/databind/introspect/AnnotatedClassResolver.class -com/fasterxml/jackson/databind/introspect/AnnotatedConstructor$Serialization.class -com/fasterxml/jackson/databind/introspect/AnnotatedConstructor.class -com/fasterxml/jackson/databind/introspect/AnnotatedCreatorCollector.class -com/fasterxml/jackson/databind/introspect/AnnotatedField$Serialization.class -com/fasterxml/jackson/databind/introspect/AnnotatedField.class -com/fasterxml/jackson/databind/introspect/AnnotatedFieldCollector$FieldBuilder.class -com/fasterxml/jackson/databind/introspect/AnnotatedFieldCollector.class -com/fasterxml/jackson/databind/introspect/AnnotatedMember.class -com/fasterxml/jackson/databind/introspect/AnnotatedMethod$Serialization.class -com/fasterxml/jackson/databind/introspect/AnnotatedMethod.class -com/fasterxml/jackson/databind/introspect/AnnotatedMethodCollector$MethodBuilder.class -com/fasterxml/jackson/databind/introspect/AnnotatedMethodCollector.class -com/fasterxml/jackson/databind/introspect/AnnotatedMethodMap.class -com/fasterxml/jackson/databind/introspect/AnnotatedParameter.class -com/fasterxml/jackson/databind/introspect/AnnotatedWithParams.class -com/fasterxml/jackson/databind/introspect/AnnotationCollector$EmptyCollector.class -com/fasterxml/jackson/databind/introspect/AnnotationCollector$NCollector.class -com/fasterxml/jackson/databind/introspect/AnnotationCollector$NoAnnotations.class -com/fasterxml/jackson/databind/introspect/AnnotationCollector$OneAnnotation.class -com/fasterxml/jackson/databind/introspect/AnnotationCollector$OneCollector.class -com/fasterxml/jackson/databind/introspect/AnnotationCollector$TwoAnnotations.class -com/fasterxml/jackson/databind/introspect/AnnotationCollector.class -com/fasterxml/jackson/databind/introspect/AnnotationIntrospectorPair.class -com/fasterxml/jackson/databind/introspect/AnnotationMap.class -com/fasterxml/jackson/databind/introspect/BasicBeanDescription.class -com/fasterxml/jackson/databind/introspect/BasicClassIntrospector.class -com/fasterxml/jackson/databind/introspect/BeanPropertyDefinition.class -com/fasterxml/jackson/databind/introspect/ClassIntrospector$MixInResolver.class -com/fasterxml/jackson/databind/introspect/ClassIntrospector.class -com/fasterxml/jackson/databind/introspect/CollectorBase.class -com/fasterxml/jackson/databind/introspect/ConcreteBeanPropertyBase.class -com/fasterxml/jackson/databind/introspect/JacksonAnnotationIntrospector$1.class -com/fasterxml/jackson/databind/introspect/JacksonAnnotationIntrospector.class -com/fasterxml/jackson/databind/introspect/MemberKey.class -com/fasterxml/jackson/databind/introspect/NopAnnotationIntrospector$1.class -com/fasterxml/jackson/databind/introspect/NopAnnotationIntrospector.class -com/fasterxml/jackson/databind/introspect/ObjectIdInfo.class -com/fasterxml/jackson/databind/introspect/POJOPropertiesCollector.class -com/fasterxml/jackson/databind/introspect/POJOPropertyBuilder$1.class -com/fasterxml/jackson/databind/introspect/POJOPropertyBuilder$10.class -com/fasterxml/jackson/databind/introspect/POJOPropertyBuilder$2.class -com/fasterxml/jackson/databind/introspect/POJOPropertyBuilder$3.class -com/fasterxml/jackson/databind/introspect/POJOPropertyBuilder$4.class -com/fasterxml/jackson/databind/introspect/POJOPropertyBuilder$5.class -com/fasterxml/jackson/databind/introspect/POJOPropertyBuilder$6.class -com/fasterxml/jackson/databind/introspect/POJOPropertyBuilder$7.class -com/fasterxml/jackson/databind/introspect/POJOPropertyBuilder$8.class -com/fasterxml/jackson/databind/introspect/POJOPropertyBuilder$9.class -com/fasterxml/jackson/databind/introspect/POJOPropertyBuilder$Linked.class -com/fasterxml/jackson/databind/introspect/POJOPropertyBuilder$MemberIterator.class -com/fasterxml/jackson/databind/introspect/POJOPropertyBuilder$WithMember.class -com/fasterxml/jackson/databind/introspect/POJOPropertyBuilder.class -com/fasterxml/jackson/databind/introspect/SimpleMixInResolver.class -com/fasterxml/jackson/databind/introspect/TypeResolutionContext$Basic.class -com/fasterxml/jackson/databind/introspect/TypeResolutionContext.class -com/fasterxml/jackson/databind/introspect/VirtualAnnotatedMember.class -com/fasterxml/jackson/databind/introspect/VisibilityChecker$1.class -com/fasterxml/jackson/databind/introspect/VisibilityChecker$Std.class -com/fasterxml/jackson/databind/introspect/VisibilityChecker.class -com/fasterxml/jackson/databind/introspect/WithMember.class -com/fasterxml/jackson/databind/jsonFormatVisitors/ -com/fasterxml/jackson/databind/jsonFormatVisitors/JsonAnyFormatVisitor$Base.class -com/fasterxml/jackson/databind/jsonFormatVisitors/JsonAnyFormatVisitor.class -com/fasterxml/jackson/databind/jsonFormatVisitors/JsonArrayFormatVisitor$Base.class -com/fasterxml/jackson/databind/jsonFormatVisitors/JsonArrayFormatVisitor.class -com/fasterxml/jackson/databind/jsonFormatVisitors/JsonBooleanFormatVisitor$Base.class -com/fasterxml/jackson/databind/jsonFormatVisitors/JsonBooleanFormatVisitor.class -com/fasterxml/jackson/databind/jsonFormatVisitors/JsonFormatTypes.class -com/fasterxml/jackson/databind/jsonFormatVisitors/JsonFormatVisitable.class -com/fasterxml/jackson/databind/jsonFormatVisitors/JsonFormatVisitorWithSerializerProvider.class -com/fasterxml/jackson/databind/jsonFormatVisitors/JsonFormatVisitorWrapper$Base.class -com/fasterxml/jackson/databind/jsonFormatVisitors/JsonFormatVisitorWrapper.class -com/fasterxml/jackson/databind/jsonFormatVisitors/JsonIntegerFormatVisitor$Base.class -com/fasterxml/jackson/databind/jsonFormatVisitors/JsonIntegerFormatVisitor.class -com/fasterxml/jackson/databind/jsonFormatVisitors/JsonMapFormatVisitor$Base.class -com/fasterxml/jackson/databind/jsonFormatVisitors/JsonMapFormatVisitor.class -com/fasterxml/jackson/databind/jsonFormatVisitors/JsonNullFormatVisitor$Base.class -com/fasterxml/jackson/databind/jsonFormatVisitors/JsonNullFormatVisitor.class -com/fasterxml/jackson/databind/jsonFormatVisitors/JsonNumberFormatVisitor$Base.class -com/fasterxml/jackson/databind/jsonFormatVisitors/JsonNumberFormatVisitor.class -com/fasterxml/jackson/databind/jsonFormatVisitors/JsonObjectFormatVisitor$Base.class -com/fasterxml/jackson/databind/jsonFormatVisitors/JsonObjectFormatVisitor.class -com/fasterxml/jackson/databind/jsonFormatVisitors/JsonStringFormatVisitor$Base.class -com/fasterxml/jackson/databind/jsonFormatVisitors/JsonStringFormatVisitor.class -com/fasterxml/jackson/databind/jsonFormatVisitors/JsonValueFormat.class -com/fasterxml/jackson/databind/jsonFormatVisitors/JsonValueFormatVisitor$Base.class -com/fasterxml/jackson/databind/jsonFormatVisitors/JsonValueFormatVisitor.class -com/fasterxml/jackson/databind/jsonschema/ -com/fasterxml/jackson/databind/jsonschema/JsonSchema.class -com/fasterxml/jackson/databind/jsonschema/JsonSerializableSchema.class -com/fasterxml/jackson/databind/jsonschema/SchemaAware.class -com/fasterxml/jackson/databind/jsontype/ -com/fasterxml/jackson/databind/jsontype/NamedType.class -com/fasterxml/jackson/databind/jsontype/SubtypeResolver.class -com/fasterxml/jackson/databind/jsontype/TypeDeserializer$1.class -com/fasterxml/jackson/databind/jsontype/TypeDeserializer.class -com/fasterxml/jackson/databind/jsontype/TypeIdResolver.class -com/fasterxml/jackson/databind/jsontype/TypeResolverBuilder.class -com/fasterxml/jackson/databind/jsontype/TypeSerializer$1.class -com/fasterxml/jackson/databind/jsontype/TypeSerializer.class -com/fasterxml/jackson/databind/jsontype/impl/ -com/fasterxml/jackson/databind/jsontype/impl/AsArrayTypeDeserializer.class -com/fasterxml/jackson/databind/jsontype/impl/AsArrayTypeSerializer.class -com/fasterxml/jackson/databind/jsontype/impl/AsExistingPropertyTypeSerializer.class -com/fasterxml/jackson/databind/jsontype/impl/AsExternalTypeDeserializer.class -com/fasterxml/jackson/databind/jsontype/impl/AsExternalTypeSerializer.class -com/fasterxml/jackson/databind/jsontype/impl/AsPropertyTypeDeserializer.class -com/fasterxml/jackson/databind/jsontype/impl/AsPropertyTypeSerializer.class -com/fasterxml/jackson/databind/jsontype/impl/AsWrapperTypeDeserializer.class -com/fasterxml/jackson/databind/jsontype/impl/AsWrapperTypeSerializer.class -com/fasterxml/jackson/databind/jsontype/impl/ClassNameIdResolver.class -com/fasterxml/jackson/databind/jsontype/impl/MinimalClassNameIdResolver.class -com/fasterxml/jackson/databind/jsontype/impl/StdSubtypeResolver.class -com/fasterxml/jackson/databind/jsontype/impl/StdTypeResolverBuilder$1.class -com/fasterxml/jackson/databind/jsontype/impl/StdTypeResolverBuilder.class -com/fasterxml/jackson/databind/jsontype/impl/SubTypeValidator.class -com/fasterxml/jackson/databind/jsontype/impl/TypeDeserializerBase.class -com/fasterxml/jackson/databind/jsontype/impl/TypeIdResolverBase.class -com/fasterxml/jackson/databind/jsontype/impl/TypeNameIdResolver.class -com/fasterxml/jackson/databind/jsontype/impl/TypeSerializerBase.class -com/fasterxml/jackson/databind/module/ -com/fasterxml/jackson/databind/module/SimpleAbstractTypeResolver.class -com/fasterxml/jackson/databind/module/SimpleDeserializers.class -com/fasterxml/jackson/databind/module/SimpleKeyDeserializers.class -com/fasterxml/jackson/databind/module/SimpleModule.class -com/fasterxml/jackson/databind/module/SimpleSerializers.class -com/fasterxml/jackson/databind/module/SimpleValueInstantiators.class -com/fasterxml/jackson/databind/node/ -com/fasterxml/jackson/databind/node/ArrayNode.class -com/fasterxml/jackson/databind/node/BaseJsonNode.class -com/fasterxml/jackson/databind/node/BigIntegerNode.class -com/fasterxml/jackson/databind/node/BinaryNode.class -com/fasterxml/jackson/databind/node/BooleanNode.class -com/fasterxml/jackson/databind/node/ContainerNode.class -com/fasterxml/jackson/databind/node/DecimalNode.class -com/fasterxml/jackson/databind/node/DoubleNode.class -com/fasterxml/jackson/databind/node/FloatNode.class -com/fasterxml/jackson/databind/node/IntNode.class -com/fasterxml/jackson/databind/node/JsonNodeCreator.class -com/fasterxml/jackson/databind/node/JsonNodeFactory.class -com/fasterxml/jackson/databind/node/JsonNodeType.class -com/fasterxml/jackson/databind/node/LongNode.class -com/fasterxml/jackson/databind/node/MissingNode.class -com/fasterxml/jackson/databind/node/NodeCursor$ArrayCursor.class -com/fasterxml/jackson/databind/node/NodeCursor$ObjectCursor.class -com/fasterxml/jackson/databind/node/NodeCursor$RootCursor.class -com/fasterxml/jackson/databind/node/NodeCursor.class -com/fasterxml/jackson/databind/node/NullNode.class -com/fasterxml/jackson/databind/node/NumericNode.class -com/fasterxml/jackson/databind/node/ObjectNode.class -com/fasterxml/jackson/databind/node/POJONode.class -com/fasterxml/jackson/databind/node/ShortNode.class -com/fasterxml/jackson/databind/node/TextNode.class -com/fasterxml/jackson/databind/node/TreeTraversingParser$1.class -com/fasterxml/jackson/databind/node/TreeTraversingParser.class -com/fasterxml/jackson/databind/node/ValueNode.class -com/fasterxml/jackson/databind/ser/ -com/fasterxml/jackson/databind/ser/AnyGetterWriter.class -com/fasterxml/jackson/databind/ser/BasicSerializerFactory$1.class -com/fasterxml/jackson/databind/ser/BasicSerializerFactory.class -com/fasterxml/jackson/databind/ser/BeanPropertyFilter.class -com/fasterxml/jackson/databind/ser/BeanPropertyWriter.class -com/fasterxml/jackson/databind/ser/BeanSerializer.class -com/fasterxml/jackson/databind/ser/BeanSerializerBuilder.class -com/fasterxml/jackson/databind/ser/BeanSerializerFactory.class -com/fasterxml/jackson/databind/ser/BeanSerializerModifier.class -com/fasterxml/jackson/databind/ser/ContainerSerializer.class -com/fasterxml/jackson/databind/ser/ContextualSerializer.class -com/fasterxml/jackson/databind/ser/DefaultSerializerProvider$Impl.class -com/fasterxml/jackson/databind/ser/DefaultSerializerProvider.class -com/fasterxml/jackson/databind/ser/FilterProvider.class -com/fasterxml/jackson/databind/ser/PropertyBuilder$1.class -com/fasterxml/jackson/databind/ser/PropertyBuilder.class -com/fasterxml/jackson/databind/ser/PropertyFilter.class -com/fasterxml/jackson/databind/ser/PropertyWriter.class -com/fasterxml/jackson/databind/ser/ResolvableSerializer.class -com/fasterxml/jackson/databind/ser/SerializerCache.class -com/fasterxml/jackson/databind/ser/SerializerFactory.class -com/fasterxml/jackson/databind/ser/Serializers$Base.class -com/fasterxml/jackson/databind/ser/Serializers.class -com/fasterxml/jackson/databind/ser/VirtualBeanPropertyWriter.class -com/fasterxml/jackson/databind/ser/impl/ -com/fasterxml/jackson/databind/ser/impl/AttributePropertyWriter.class -com/fasterxml/jackson/databind/ser/impl/BeanAsArraySerializer.class -com/fasterxml/jackson/databind/ser/impl/FailingSerializer.class -com/fasterxml/jackson/databind/ser/impl/FilteredBeanPropertyWriter$MultiView.class -com/fasterxml/jackson/databind/ser/impl/FilteredBeanPropertyWriter$SingleView.class -com/fasterxml/jackson/databind/ser/impl/FilteredBeanPropertyWriter.class -com/fasterxml/jackson/databind/ser/impl/IndexedListSerializer.class -com/fasterxml/jackson/databind/ser/impl/IndexedStringListSerializer.class -com/fasterxml/jackson/databind/ser/impl/IteratorSerializer.class -com/fasterxml/jackson/databind/ser/impl/MapEntrySerializer$1.class -com/fasterxml/jackson/databind/ser/impl/MapEntrySerializer.class -com/fasterxml/jackson/databind/ser/impl/ObjectIdWriter.class -com/fasterxml/jackson/databind/ser/impl/PropertyBasedObjectIdGenerator.class -com/fasterxml/jackson/databind/ser/impl/PropertySerializerMap$Double.class -com/fasterxml/jackson/databind/ser/impl/PropertySerializerMap$Empty.class -com/fasterxml/jackson/databind/ser/impl/PropertySerializerMap$Multi.class -com/fasterxml/jackson/databind/ser/impl/PropertySerializerMap$SerializerAndMapResult.class -com/fasterxml/jackson/databind/ser/impl/PropertySerializerMap$Single.class -com/fasterxml/jackson/databind/ser/impl/PropertySerializerMap$TypeAndSerializer.class -com/fasterxml/jackson/databind/ser/impl/PropertySerializerMap.class -com/fasterxml/jackson/databind/ser/impl/ReadOnlyClassToSerializerMap$Bucket.class -com/fasterxml/jackson/databind/ser/impl/ReadOnlyClassToSerializerMap.class -com/fasterxml/jackson/databind/ser/impl/SimpleBeanPropertyFilter$1.class -com/fasterxml/jackson/databind/ser/impl/SimpleBeanPropertyFilter$FilterExceptFilter.class -com/fasterxml/jackson/databind/ser/impl/SimpleBeanPropertyFilter$SerializeExceptFilter.class -com/fasterxml/jackson/databind/ser/impl/SimpleBeanPropertyFilter.class -com/fasterxml/jackson/databind/ser/impl/SimpleFilterProvider.class -com/fasterxml/jackson/databind/ser/impl/StringArraySerializer.class -com/fasterxml/jackson/databind/ser/impl/StringCollectionSerializer.class -com/fasterxml/jackson/databind/ser/impl/TypeWrappedSerializer.class -com/fasterxml/jackson/databind/ser/impl/UnknownSerializer.class -com/fasterxml/jackson/databind/ser/impl/UnwrappingBeanPropertyWriter$1.class -com/fasterxml/jackson/databind/ser/impl/UnwrappingBeanPropertyWriter.class -com/fasterxml/jackson/databind/ser/impl/UnwrappingBeanSerializer.class -com/fasterxml/jackson/databind/ser/impl/WritableObjectId.class -com/fasterxml/jackson/databind/ser/std/ -com/fasterxml/jackson/databind/ser/std/ArraySerializerBase.class -com/fasterxml/jackson/databind/ser/std/AsArraySerializerBase.class -com/fasterxml/jackson/databind/ser/std/AtomicReferenceSerializer.class -com/fasterxml/jackson/databind/ser/std/BeanSerializerBase$1.class -com/fasterxml/jackson/databind/ser/std/BeanSerializerBase.class -com/fasterxml/jackson/databind/ser/std/BooleanSerializer$AsNumber.class -com/fasterxml/jackson/databind/ser/std/BooleanSerializer.class -com/fasterxml/jackson/databind/ser/std/ByteArraySerializer.class -com/fasterxml/jackson/databind/ser/std/ByteBufferSerializer.class -com/fasterxml/jackson/databind/ser/std/CalendarSerializer.class -com/fasterxml/jackson/databind/ser/std/ClassSerializer.class -com/fasterxml/jackson/databind/ser/std/CollectionSerializer.class -com/fasterxml/jackson/databind/ser/std/DateSerializer.class -com/fasterxml/jackson/databind/ser/std/DateTimeSerializerBase.class -com/fasterxml/jackson/databind/ser/std/EnumSerializer.class -com/fasterxml/jackson/databind/ser/std/EnumSetSerializer.class -com/fasterxml/jackson/databind/ser/std/FileSerializer.class -com/fasterxml/jackson/databind/ser/std/InetAddressSerializer.class -com/fasterxml/jackson/databind/ser/std/InetSocketAddressSerializer.class -com/fasterxml/jackson/databind/ser/std/IterableSerializer.class -com/fasterxml/jackson/databind/ser/std/JsonValueSerializer$TypeSerializerRerouter.class -com/fasterxml/jackson/databind/ser/std/JsonValueSerializer.class -com/fasterxml/jackson/databind/ser/std/MapProperty.class -com/fasterxml/jackson/databind/ser/std/MapSerializer$1.class -com/fasterxml/jackson/databind/ser/std/MapSerializer.class -com/fasterxml/jackson/databind/ser/std/NonTypedScalarSerializerBase.class -com/fasterxml/jackson/databind/ser/std/NullSerializer.class -com/fasterxml/jackson/databind/ser/std/NumberSerializer$1.class -com/fasterxml/jackson/databind/ser/std/NumberSerializer.class -com/fasterxml/jackson/databind/ser/std/NumberSerializers$1.class -com/fasterxml/jackson/databind/ser/std/NumberSerializers$Base.class -com/fasterxml/jackson/databind/ser/std/NumberSerializers$DoubleSerializer.class -com/fasterxml/jackson/databind/ser/std/NumberSerializers$FloatSerializer.class -com/fasterxml/jackson/databind/ser/std/NumberSerializers$IntLikeSerializer.class -com/fasterxml/jackson/databind/ser/std/NumberSerializers$IntegerSerializer.class -com/fasterxml/jackson/databind/ser/std/NumberSerializers$LongSerializer.class -com/fasterxml/jackson/databind/ser/std/NumberSerializers$ShortSerializer.class -com/fasterxml/jackson/databind/ser/std/NumberSerializers.class -com/fasterxml/jackson/databind/ser/std/ObjectArraySerializer.class -com/fasterxml/jackson/databind/ser/std/RawSerializer.class -com/fasterxml/jackson/databind/ser/std/ReferenceTypeSerializer$1.class -com/fasterxml/jackson/databind/ser/std/ReferenceTypeSerializer.class -com/fasterxml/jackson/databind/ser/std/SerializableSerializer.class -com/fasterxml/jackson/databind/ser/std/SqlDateSerializer.class -com/fasterxml/jackson/databind/ser/std/SqlTimeSerializer.class -com/fasterxml/jackson/databind/ser/std/StaticListSerializerBase.class -com/fasterxml/jackson/databind/ser/std/StdArraySerializers$BooleanArraySerializer.class -com/fasterxml/jackson/databind/ser/std/StdArraySerializers$CharArraySerializer.class -com/fasterxml/jackson/databind/ser/std/StdArraySerializers$DoubleArraySerializer.class -com/fasterxml/jackson/databind/ser/std/StdArraySerializers$FloatArraySerializer.class -com/fasterxml/jackson/databind/ser/std/StdArraySerializers$IntArraySerializer.class -com/fasterxml/jackson/databind/ser/std/StdArraySerializers$LongArraySerializer.class -com/fasterxml/jackson/databind/ser/std/StdArraySerializers$ShortArraySerializer.class -com/fasterxml/jackson/databind/ser/std/StdArraySerializers$TypedPrimitiveArraySerializer.class -com/fasterxml/jackson/databind/ser/std/StdArraySerializers.class -com/fasterxml/jackson/databind/ser/std/StdDelegatingSerializer.class -com/fasterxml/jackson/databind/ser/std/StdJdkSerializers$AtomicBooleanSerializer.class -com/fasterxml/jackson/databind/ser/std/StdJdkSerializers$AtomicIntegerSerializer.class -com/fasterxml/jackson/databind/ser/std/StdJdkSerializers$AtomicLongSerializer.class -com/fasterxml/jackson/databind/ser/std/StdJdkSerializers.class -com/fasterxml/jackson/databind/ser/std/StdKeySerializer.class -com/fasterxml/jackson/databind/ser/std/StdKeySerializers$Default.class -com/fasterxml/jackson/databind/ser/std/StdKeySerializers$Dynamic.class -com/fasterxml/jackson/databind/ser/std/StdKeySerializers$EnumKeySerializer.class -com/fasterxml/jackson/databind/ser/std/StdKeySerializers$StringKeySerializer.class -com/fasterxml/jackson/databind/ser/std/StdKeySerializers.class -com/fasterxml/jackson/databind/ser/std/StdScalarSerializer.class -com/fasterxml/jackson/databind/ser/std/StdSerializer.class -com/fasterxml/jackson/databind/ser/std/StringSerializer.class -com/fasterxml/jackson/databind/ser/std/TimeZoneSerializer.class -com/fasterxml/jackson/databind/ser/std/ToStringSerializer.class -com/fasterxml/jackson/databind/ser/std/TokenBufferSerializer.class -com/fasterxml/jackson/databind/ser/std/UUIDSerializer.class -com/fasterxml/jackson/databind/type/ -com/fasterxml/jackson/databind/type/ArrayType.class -com/fasterxml/jackson/databind/type/ClassKey.class -com/fasterxml/jackson/databind/type/ClassStack.class -com/fasterxml/jackson/databind/type/CollectionLikeType.class -com/fasterxml/jackson/databind/type/CollectionType.class -com/fasterxml/jackson/databind/type/MapLikeType.class -com/fasterxml/jackson/databind/type/MapType.class -com/fasterxml/jackson/databind/type/PlaceholderForType.class -com/fasterxml/jackson/databind/type/ReferenceType.class -com/fasterxml/jackson/databind/type/ResolvedRecursiveType.class -com/fasterxml/jackson/databind/type/SimpleType.class -com/fasterxml/jackson/databind/type/TypeBase.class -com/fasterxml/jackson/databind/type/TypeBindings$AsKey.class -com/fasterxml/jackson/databind/type/TypeBindings$TypeParamStash.class -com/fasterxml/jackson/databind/type/TypeBindings.class -com/fasterxml/jackson/databind/type/TypeFactory.class -com/fasterxml/jackson/databind/type/TypeModifier.class -com/fasterxml/jackson/databind/type/TypeParser$MyTokenizer.class -com/fasterxml/jackson/databind/type/TypeParser.class -com/fasterxml/jackson/databind/util/ -com/fasterxml/jackson/databind/util/AccessPattern.class -com/fasterxml/jackson/databind/util/Annotations.class -com/fasterxml/jackson/databind/util/ArrayBuilders$1.class -com/fasterxml/jackson/databind/util/ArrayBuilders$BooleanBuilder.class -com/fasterxml/jackson/databind/util/ArrayBuilders$ByteBuilder.class -com/fasterxml/jackson/databind/util/ArrayBuilders$DoubleBuilder.class -com/fasterxml/jackson/databind/util/ArrayBuilders$FloatBuilder.class -com/fasterxml/jackson/databind/util/ArrayBuilders$IntBuilder.class -com/fasterxml/jackson/databind/util/ArrayBuilders$LongBuilder.class -com/fasterxml/jackson/databind/util/ArrayBuilders$ShortBuilder.class -com/fasterxml/jackson/databind/util/ArrayBuilders.class -com/fasterxml/jackson/databind/util/ArrayIterator.class -com/fasterxml/jackson/databind/util/BeanUtil.class -com/fasterxml/jackson/databind/util/ByteBufferBackedInputStream.class -com/fasterxml/jackson/databind/util/ByteBufferBackedOutputStream.class -com/fasterxml/jackson/databind/util/ClassUtil$Ctor.class -com/fasterxml/jackson/databind/util/ClassUtil$EnumTypeLocator.class -com/fasterxml/jackson/databind/util/ClassUtil.class -com/fasterxml/jackson/databind/util/CompactStringObjectMap.class -com/fasterxml/jackson/databind/util/ConstantValueInstantiator.class -com/fasterxml/jackson/databind/util/Converter$None.class -com/fasterxml/jackson/databind/util/Converter.class -com/fasterxml/jackson/databind/util/EnumResolver.class -com/fasterxml/jackson/databind/util/EnumValues.class -com/fasterxml/jackson/databind/util/ISO8601DateFormat.class -com/fasterxml/jackson/databind/util/ISO8601Utils.class -com/fasterxml/jackson/databind/util/JSONPObject.class -com/fasterxml/jackson/databind/util/JSONWrappedObject.class -com/fasterxml/jackson/databind/util/LRUMap.class -com/fasterxml/jackson/databind/util/LinkedNode.class -com/fasterxml/jackson/databind/util/NameTransformer$1.class -com/fasterxml/jackson/databind/util/NameTransformer$2.class -com/fasterxml/jackson/databind/util/NameTransformer$3.class -com/fasterxml/jackson/databind/util/NameTransformer$Chained.class -com/fasterxml/jackson/databind/util/NameTransformer$NopTransformer.class -com/fasterxml/jackson/databind/util/NameTransformer.class -com/fasterxml/jackson/databind/util/Named.class -com/fasterxml/jackson/databind/util/ObjectBuffer.class -com/fasterxml/jackson/databind/util/PrimitiveArrayBuilder$Node.class -com/fasterxml/jackson/databind/util/PrimitiveArrayBuilder.class -com/fasterxml/jackson/databind/util/RawValue.class -com/fasterxml/jackson/databind/util/RootNameLookup.class -com/fasterxml/jackson/databind/util/SimpleBeanPropertyDefinition.class -com/fasterxml/jackson/databind/util/StdConverter.class -com/fasterxml/jackson/databind/util/StdDateFormat.class -com/fasterxml/jackson/databind/util/TokenBuffer$1.class -com/fasterxml/jackson/databind/util/TokenBuffer$Parser.class -com/fasterxml/jackson/databind/util/TokenBuffer$Segment.class -com/fasterxml/jackson/databind/util/TokenBuffer.class -com/fasterxml/jackson/databind/util/TokenBufferReadContext.class -com/fasterxml/jackson/databind/util/TypeKey.class -com/fasterxml/jackson/databind/util/ViewMatcher$Multi.class -com/fasterxml/jackson/databind/util/ViewMatcher$Single.class -com/fasterxml/jackson/databind/util/ViewMatcher.class From 428ffd5444273760b3394cb1fbc5892a9ec7f09e Mon Sep 17 00:00:00 2001 From: childish-sambino Date: Thu, 16 Jul 2020 15:21:09 -0500 Subject: [PATCH 198/345] docs: add multi-recipient examples (#638) We have similar examples in other languages and they provide a clear distinction between the two use cases. --- USE_CASES.md | 2 + .../MultipleEmailsMultipleRecipients.java | 54 +++++++++++++++++++ .../mail/SingleEmailMultipleRecipients.java | 44 +++++++++++++++ 3 files changed, 100 insertions(+) create mode 100644 examples/helpers/mail/MultipleEmailsMultipleRecipients.java create mode 100644 examples/helpers/mail/SingleEmailMultipleRecipients.java diff --git a/USE_CASES.md b/USE_CASES.md index 4bea0387..c74b1264 100644 --- a/USE_CASES.md +++ b/USE_CASES.md @@ -3,6 +3,8 @@ This documentation provides examples for specific use cases. Please [open an iss # Use Cases * [Send Mail Examples](examples/helpers/mail/Example.java) + * [Send a Single Email to Multiple Recipients](examples/helpers/mail/SingleEmailMultipleRecipients.java) + * [Send Multiple Emails to Multiple Recipients](examples/helpers/mail/MultipleEmailsMultipleRecipients.java) * [Transactional Templates](#transactional-templates) * [Legacy Templates](#legacy-templates) * [How to Setup a Domain Authentication](#domain-authentication) diff --git a/examples/helpers/mail/MultipleEmailsMultipleRecipients.java b/examples/helpers/mail/MultipleEmailsMultipleRecipients.java new file mode 100644 index 00000000..35fe03b8 --- /dev/null +++ b/examples/helpers/mail/MultipleEmailsMultipleRecipients.java @@ -0,0 +1,54 @@ +import com.sendgrid.Method; +import com.sendgrid.Request; +import com.sendgrid.Response; +import com.sendgrid.SendGrid; +import com.sendgrid.helpers.mail.Mail; +import com.sendgrid.helpers.mail.objects.Content; +import com.sendgrid.helpers.mail.objects.Email; +import com.sendgrid.helpers.mail.objects.Personalization; + +import java.io.IOException; + +public class MultipleEmailsMultipleRecipients { + + public static void main(String[] args) throws IOException { + final Mail mail = new Mail(); + + mail.setFrom(new Email("test@example.com", "Example User")); + mail.setSubject("Sending with Twilio SendGrid is Fun"); + + // Details on how to send an email with dynamic transactional templates: + // https://sendgrid.com/docs/ui/sending-email/how-to-send-an-email-with-dynamic-transactional-templates/ + mail.setTemplateId("d-12345678901234567890123456789012"); + + final Personalization personalization1 = new Personalization(); + personalization1.addTo(new Email("test1@example.com", "Example User1")); + personalization1.addDynamicTemplateData("name", "Example User1"); + personalization1.addDynamicTemplateData("city", "Denver"); + mail.addPersonalization(personalization1); + + final Personalization personalization2 = new Personalization(); + personalization2.addTo(new Email("test2@example.com", "Example User2")); + personalization2.addDynamicTemplateData("name", "Example User2"); + personalization2.addDynamicTemplateData("city", "San Francisco"); + mail.addPersonalization(personalization2); + + mail.addContent(new Content("text/plain", "and easy to do anywhere, even with Java")); + mail.addContent(new Content("text/html", "and easy to do anywhere, even with Java")); + + send(mail); + } + + private static void send(final Mail mail) throws IOException { + final SendGrid client = new SendGrid(System.getenv("SENDGRID_API_KEY")); + final Request request = new Request(); + request.setMethod(Method.POST); + request.setEndpoint("mail/send"); + request.setBody(mail.build()); + + final Response response = client.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } +} diff --git a/examples/helpers/mail/SingleEmailMultipleRecipients.java b/examples/helpers/mail/SingleEmailMultipleRecipients.java new file mode 100644 index 00000000..8829124f --- /dev/null +++ b/examples/helpers/mail/SingleEmailMultipleRecipients.java @@ -0,0 +1,44 @@ +import com.sendgrid.Method; +import com.sendgrid.Request; +import com.sendgrid.Response; +import com.sendgrid.SendGrid; +import com.sendgrid.helpers.mail.Mail; +import com.sendgrid.helpers.mail.objects.Content; +import com.sendgrid.helpers.mail.objects.Email; +import com.sendgrid.helpers.mail.objects.Personalization; + +import java.io.IOException; + +public class SingleEmailMultipleRecipients { + + public static void main(String[] args) throws IOException { + final Mail mail = new Mail(); + + mail.setFrom(new Email("test@example.com", "Example User")); + mail.setSubject("Sending with Twilio SendGrid is Fun"); + + final Personalization personalization = new Personalization(); + personalization.addTo(new Email("test1@example.com", "Example User1")); + personalization.addTo(new Email("test2@example.com", "Example User2")); + personalization.addTo(new Email("test3@example.com", "Example User3")); + mail.addPersonalization(personalization); + + mail.addContent(new Content("text/plain", "and easy to do anywhere, even with Java")); + mail.addContent(new Content("text/html", "and easy to do anywhere, even with Java")); + + send(mail); + } + + private static void send(final Mail mail) throws IOException { + final SendGrid client = new SendGrid(System.getenv("SENDGRID_API_KEY")); + final Request request = new Request(); + request.setMethod(Method.POST); + request.setEndpoint("mail/send"); + request.setBody(mail.build()); + + final Response response = client.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } +} From dece530aefb0d1b0ad636101aee199aee1f1c20f Mon Sep 17 00:00:00 2001 From: Elise Shanholtz Date: Mon, 20 Jul 2020 15:32:10 -0700 Subject: [PATCH 199/345] chore: migrate to new default sendgrid-oai branch (#639) --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index a7e6c434..5db8ceab 100644 --- a/Makefile +++ b/Makefile @@ -13,7 +13,7 @@ test-integ: test version ?= latest test-docker: - curl -s https://raw.githubusercontent.com/sendgrid/sendgrid-oai/master/prism/prism.sh -o prism.sh + curl -s https://raw.githubusercontent.com/sendgrid/sendgrid-oai/main/prism/prism.sh -o prism.sh version=$(version) bash ./prism.sh clean: From 6623bd937da3b168fc6799b029479e9bd73523ed Mon Sep 17 00:00:00 2001 From: Twilio Date: Wed, 22 Jul 2020 19:00:01 +0000 Subject: [PATCH 200/345] [Librarian] Version Bump --- CHANGELOG.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3e767f0a..0306fa78 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,16 @@ # Change Log All notable changes to this project will be documented in this file. +[2020-07-22] Version 4.6.2 +-------------------------- +**Library - Chore** +- [PR #639](https://github.com/sendgrid/sendgrid-java/pull/639): migrate to new default sendgrid-oai branch. Thanks to [@eshanholtz](https://github.com/eshanholtz)! + +**Library - Docs** +- [PR #638](https://github.com/sendgrid/sendgrid-java/pull/638): add multi-recipient examples. Thanks to [@childish-sambino](https://github.com/childish-sambino)! +- [PR #637](https://github.com/sendgrid/sendgrid-java/pull/637): fix the kitchen sink example and link to it in the use cases doc. Thanks to [@childish-sambino](https://github.com/childish-sambino)! + + [2020-07-08] Version 4.6.1 -------------------------- **Library - Fix** From 6773207270729d75858fa178f91b98bcdabffd65 Mon Sep 17 00:00:00 2001 From: Twilio Date: Wed, 22 Jul 2020 19:30:05 +0000 Subject: [PATCH 201/345] Release 4.6.2 --- CONTRIBUTING.md | 2 +- README.md | 6 +++--- pom.xml | 8 ++++---- src/main/java/com/sendgrid/BaseInterface.java | 2 +- src/test/java/com/sendgrid/SendGridTest.java | 2 +- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index dbdcf01f..b1fbad85 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -101,7 +101,7 @@ touch Example.java Add the example you want to test to Example.java, including the headers at the top of the file. ``` bash -javac -classpath ../repo/com/sendgrid/4.6.1/sendgrid-4.6.1-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.6.1/sendgrid-4.6.1-jar.jar:. Example +javac -classpath ../repo/com/sendgrid/4.6.2/sendgrid-4.6.2-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.6.2/sendgrid-4.6.2-jar.jar:. Example ``` diff --git a/README.md b/README.md index 955ceadd..2c0df1b6 100644 --- a/README.md +++ b/README.md @@ -39,7 +39,7 @@ We appreciate your continued support, thank you! ## Prerequisites - Java version Oracle JDK 7, 8 or OpenJDK 7 -- The Twilio SendGrid service, starting at the [free level](https://sendgrid.com/free?source=sendgrid-java) to send up to 4.6.1 emails for the first 30 days, then send 100 emails/day free forever or check out [our pricing](https://sendgrid.com/pricing?source=sendgrid-java). +- The Twilio SendGrid service, starting at the [free level](https://sendgrid.com/free?source=sendgrid-java) to send up to 4.6.2 emails for the first 30 days, then send 100 emails/day free forever or check out [our pricing](https://sendgrid.com/pricing?source=sendgrid-java). ## Setup Environment Variables @@ -67,7 +67,7 @@ Add the following to your build.gradle file in the root of your project. ... dependencies { ... - implementation 'com.sendgrid:sendgrid-java:4.6.1' + implementation 'com.sendgrid:sendgrid-java:4.6.2' } repositories { @@ -86,7 +86,7 @@ mvn install You can just drop the jar file in. It's a fat jar - it has all the dependencies built in. -[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.6.1/sendgrid-java.jar) +[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.6.2/sendgrid-java.jar) ## Dependencies diff --git a/pom.xml b/pom.xml index 378bdea1..5c5249a7 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ com.sendgrid sendgrid-java Twilio SendGrid Java helper library - 4.6.1 + 4.6.2 This Java module allows you to quickly and easily send emails through Twilio SendGrid using Java. https://github.com/sendgrid/sendgrid-java @@ -26,7 +26,7 @@ https://github.com/sendgrid/sendgrid-java scm:git:git@github.com:sendgrid/sendgrid-java.git scm:git:git@github.com:sendgrid/sendgrid-java.git - 4.6.1 + 4.6.2 @@ -306,7 +306,7 @@ org.bouncycastle bcprov-jdk15to18 - 1.65 + 1.66 - + \ No newline at end of file diff --git a/src/main/java/com/sendgrid/BaseInterface.java b/src/main/java/com/sendgrid/BaseInterface.java index 776888d2..b5e7de29 100644 --- a/src/main/java/com/sendgrid/BaseInterface.java +++ b/src/main/java/com/sendgrid/BaseInterface.java @@ -11,7 +11,7 @@ */ public abstract class BaseInterface implements SendGridAPI { - private static final String VERSION = "4.6.1"; + private static final String VERSION = "4.6.2"; private static final String USER_AGENT = "sendgrid/" + VERSION + ";java"; private static final int RATE_LIMIT_RESPONSE_CODE = 429; diff --git a/src/test/java/com/sendgrid/SendGridTest.java b/src/test/java/com/sendgrid/SendGridTest.java index 87e2fede..abe8349c 100644 --- a/src/test/java/com/sendgrid/SendGridTest.java +++ b/src/test/java/com/sendgrid/SendGridTest.java @@ -43,7 +43,7 @@ public void testConstructWithClient() throws IOException { @Test public void testLibraryVersion() { SendGrid sg = new SendGrid(SENDGRID_API_KEY); - Assert.assertEquals(sg.getLibraryVersion(), "4.6.1"); + Assert.assertEquals(sg.getLibraryVersion(), "4.6.2"); } @Test From fb76fb4f47d5fc6aee69ce44f2943f3d3509e248 Mon Sep 17 00:00:00 2001 From: Elise Shanholtz Date: Wed, 22 Jul 2020 14:30:37 -0700 Subject: [PATCH 202/345] chore: use HEAD to refer to default branch name --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 5db8ceab..064737ef 100644 --- a/Makefile +++ b/Makefile @@ -13,7 +13,7 @@ test-integ: test version ?= latest test-docker: - curl -s https://raw.githubusercontent.com/sendgrid/sendgrid-oai/main/prism/prism.sh -o prism.sh + curl -s https://raw.githubusercontent.com/sendgrid/sendgrid-oai/HEAD/prism/prism.sh -o prism.sh version=$(version) bash ./prism.sh clean: From 3be0ca5b2f9d5bab9004df7ba74129f197ed83c1 Mon Sep 17 00:00:00 2001 From: childish-sambino Date: Mon, 27 Jul 2020 10:27:07 -0500 Subject: [PATCH 203/345] fix: remove the content verifier (#642) We don't do this in any of the other libraries and it only guards against a specific secret. Multiple customers indicate this check is overly sensitive to legitimate use cases. --- .../helpers/mail/objects/Content.java | 25 +--------- .../com/sendgrid/helpers/ContentTest.java | 48 ------------------- 2 files changed, 1 insertion(+), 72 deletions(-) delete mode 100644 src/test/java/com/sendgrid/helpers/ContentTest.java diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/Content.java b/src/main/java/com/sendgrid/helpers/mail/objects/Content.java index 0a7a6557..1b333bfe 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/Content.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/Content.java @@ -4,16 +4,8 @@ import com.fasterxml.jackson.annotation.JsonInclude.Include; import com.fasterxml.jackson.annotation.JsonProperty; -import java.util.Arrays; -import java.util.Collections; -import java.util.HashSet; -import java.util.List; -import java.util.Set; -import java.util.regex.Pattern; -import java.lang.IllegalArgumentException; - /** - * An object in which you may specify the content of your email. + * An object in which you may specify the content of your email. */ @JsonInclude(Include.NON_DEFAULT) public class Content { @@ -44,7 +36,6 @@ public String getValue() { } public void setValue(String value) { - ContentVerifier.verifyContent(value); this.value = value; } @@ -79,17 +70,3 @@ public boolean equals(Object obj) { return true; } } - -class ContentVerifier { - private static final List FORBIDDEN_PATTERNS = Collections.singletonList( - Pattern.compile(".*SG\\.[a-zA-Z0-9(-|_)]*\\.[a-zA-Z0-9(-|_)]*.*") - ); - - static void verifyContent(String content) { - for (Pattern pattern: FORBIDDEN_PATTERNS) { - if (pattern.matcher(content).matches()) { - throw new IllegalArgumentException("Found a Forbidden Pattern in the content of the email"); - } - } - } -} \ No newline at end of file diff --git a/src/test/java/com/sendgrid/helpers/ContentTest.java b/src/test/java/com/sendgrid/helpers/ContentTest.java deleted file mode 100644 index c83b0d2e..00000000 --- a/src/test/java/com/sendgrid/helpers/ContentTest.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.sendgrid.helpers; - -import org.junit.Assert; -import org.junit.Before; -import org.junit.Rule; -import org.junit.Test; -import com.sendgrid.helpers.mail.objects.Content; -import org.junit.rules.ExpectedException; - -import java.util.ArrayList; -import java.util.Arrays; - -public class ContentTest { - private Content content; - - @Before - public void setUp() { - this.content = new Content(); - } - - @Rule - public final ExpectedException exception = ExpectedException.none(); - - @Test - public void testForbiddenContentIsRejected() { - - ArrayList sampleApiKeys = new ArrayList<>( - Arrays.asList( - "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", - "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" - ) - - ); - - for (String apiKey: sampleApiKeys) { - exception.expect(IllegalArgumentException.class); - this.content.setValue("My api key is: " + apiKey); - } - } - - @Test - public void testNormalContentIsAllowed() { - String message = "I will not send you my api key!"; - this.content.setValue(message); - Assert.assertEquals(message, this.content.getValue()); - } - -} From eb64c2aeb673384261115dd18ee2348d63157ef6 Mon Sep 17 00:00:00 2001 From: Sam Harrison Date: Mon, 27 Jul 2020 17:11:48 -0500 Subject: [PATCH 204/345] chore: update README to reflect default branch rename --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 2c0df1b6..1efc9339 100644 --- a/README.md +++ b/README.md @@ -10,6 +10,8 @@ **NEW:** Subscribe to email [notifications](https://dx.sendgrid.com/newsletter/java) for releases and breaking changes. +**The default branch name for this repository has been changed to `main` as of 07/27/2020.** + **This library allows you to quickly and easily use the Twilio SendGrid Web API v3 via Java.** Version 3.X.X of this library provides full support for all Twilio SendGrid [Web API v3](https://sendgrid.com/docs/API_Reference/Web_API_v3/index.html) endpoints, including the new [v3 /mail/send](https://sendgrid.com/blog/introducing-v3mailsend-sendgrids-new-mail-endpoint). From 7b036211909200a4ade19440a72a1af2ae4d7743 Mon Sep 17 00:00:00 2001 From: Sam Harrison Date: Tue, 28 Jul 2020 09:56:36 -0500 Subject: [PATCH 205/345] chore: update CI config to use new default branch name --- .travis.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 7b7c65a3..ff279202 100644 --- a/.travis.yml +++ b/.travis.yml @@ -15,11 +15,11 @@ deploy: on: tags: true condition: $version = 8 - branch: master + branch: main notifications: slack: - if: branch = master + if: branch = main on_pull_requests: false on_success: never on_failure: change From 7f5545e679e88bb3f2fd88e4be3f7f4549c54a60 Mon Sep 17 00:00:00 2001 From: Stephan Schroevers Date: Tue, 28 Jul 2020 20:57:27 +0200 Subject: [PATCH 206/345] chore: replace `bcprov-jdk15to18` with `bcprov-jdk15on` (#643) By upgrading the `maven-shade-plugin` the `bcprov-jdk15on` artifact (which contains JDK 9+ classes) can also be used when building the project using JDK 8. This change reverts d9f4413707c38cd7c702d04574b207da56343002. Resolves #636. --- pom.xml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pom.xml b/pom.xml index 5c5249a7..501c5915 100644 --- a/pom.xml +++ b/pom.xml @@ -124,7 +124,7 @@ org.apache.maven.plugins maven-shade-plugin - 3.2.1 + 3.2.4 @@ -233,7 +233,7 @@ org.apache.maven.plugins maven-shade-plugin - 3.2.1 + 3.2.4 @@ -305,8 +305,8 @@ org.bouncycastle - bcprov-jdk15to18 + bcprov-jdk15on 1.66 - \ No newline at end of file + From 86f864d61a3faccc357954e4778a7bc00714b3c4 Mon Sep 17 00:00:00 2001 From: Robert Olsthoorn Date: Wed, 29 Jul 2020 10:57:10 -0700 Subject: [PATCH 207/345] docs: Update README link to avoid redirection (#390) --- bin/com/sendgrid/helpers/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/com/sendgrid/helpers/README.md b/bin/com/sendgrid/helpers/README.md index 874cc9fb..9b99f325 100644 --- a/bin/com/sendgrid/helpers/README.md +++ b/bin/com/sendgrid/helpers/README.md @@ -16,4 +16,4 @@ javac -classpath ../../build/libs/sendgrid-4.2.1-jar.jar:. Example.java && java ## Usage - See the [example](https://github.com/sendgrid/sendgrid-java/tree/master/examples/mail) for a complete working example. -- [Documentation](https://sendgrid.com/docs/API_Reference/Web_API_v3/Mail/overview.html) \ No newline at end of file +- [Documentation](https://sendgrid.com/docs/API_Reference/Web_API_v3/Mail/index.html) From 417be238037015c89a7579e8b0cd4cf8130765fd Mon Sep 17 00:00:00 2001 From: Sam Harrison Date: Wed, 29 Jul 2020 12:59:29 -0500 Subject: [PATCH 208/345] docs: Update README link to avoid redirection --- src/main/java/com/sendgrid/helpers/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/sendgrid/helpers/README.md b/src/main/java/com/sendgrid/helpers/README.md index 874cc9fb..9b99f325 100644 --- a/src/main/java/com/sendgrid/helpers/README.md +++ b/src/main/java/com/sendgrid/helpers/README.md @@ -16,4 +16,4 @@ javac -classpath ../../build/libs/sendgrid-4.2.1-jar.jar:. Example.java && java ## Usage - See the [example](https://github.com/sendgrid/sendgrid-java/tree/master/examples/mail) for a complete working example. -- [Documentation](https://sendgrid.com/docs/API_Reference/Web_API_v3/Mail/overview.html) \ No newline at end of file +- [Documentation](https://sendgrid.com/docs/API_Reference/Web_API_v3/Mail/index.html) From 195a658b5a99310b00ddd53b00a82cbf140ae97a Mon Sep 17 00:00:00 2001 From: Adams Au Date: Thu, 30 Jul 2020 03:14:38 +0800 Subject: [PATCH 209/345] docs: breakup examples to their own files in examples/user/user.java (#370) --- examples/user/CreateWebhookParseSettings.java | 22 + examples/user/DeleteScheduleSend.java | 21 + examples/user/DeleteWebhookParseSettings.java | 21 + examples/user/GetCreditBalance.java | 21 + examples/user/GetEmailAddress.java | 21 + examples/user/GetEnforedTLS.java | 21 + examples/user/GetProfile.java | 21 + examples/user/GetScheduleSend.java | 21 + examples/user/GetScheduleSendByBatchId.java | 21 + examples/user/GetUserInfo.java | 21 + examples/user/GetUsername.java | 21 + examples/user/GetWebhookEventSettings.java | 21 + .../GetWebhookParseSettingByHostname.java | 21 + examples/user/GetWebhookParseSettings.java | 21 + examples/user/GetWebhookParseStatistics.java | 26 + examples/user/PauseScheduleSend.java | 22 + examples/user/README.md | 50 ++ examples/user/TestWebhookEvent.java | 22 + examples/user/UpdateEmailAddress.java | 22 + examples/user/UpdateEnforcedTLS.java | 22 + examples/user/UpdatePassword.java | 22 + examples/user/UpdateProfile.java | 22 + examples/user/UpdateScheduleSend.java | 22 + examples/user/UpdateUsername.java | 22 + examples/user/UpdateWebhookEventSettings.java | 22 + examples/user/UpdateWebhookParseSettings.java | 22 + examples/user/user.java | 575 ------------------ 27 files changed, 591 insertions(+), 575 deletions(-) create mode 100644 examples/user/CreateWebhookParseSettings.java create mode 100644 examples/user/DeleteScheduleSend.java create mode 100644 examples/user/DeleteWebhookParseSettings.java create mode 100644 examples/user/GetCreditBalance.java create mode 100644 examples/user/GetEmailAddress.java create mode 100644 examples/user/GetEnforedTLS.java create mode 100644 examples/user/GetProfile.java create mode 100644 examples/user/GetScheduleSend.java create mode 100644 examples/user/GetScheduleSendByBatchId.java create mode 100644 examples/user/GetUserInfo.java create mode 100644 examples/user/GetUsername.java create mode 100644 examples/user/GetWebhookEventSettings.java create mode 100644 examples/user/GetWebhookParseSettingByHostname.java create mode 100644 examples/user/GetWebhookParseSettings.java create mode 100644 examples/user/GetWebhookParseStatistics.java create mode 100644 examples/user/PauseScheduleSend.java create mode 100644 examples/user/README.md create mode 100644 examples/user/TestWebhookEvent.java create mode 100644 examples/user/UpdateEmailAddress.java create mode 100644 examples/user/UpdateEnforcedTLS.java create mode 100644 examples/user/UpdatePassword.java create mode 100644 examples/user/UpdateProfile.java create mode 100644 examples/user/UpdateScheduleSend.java create mode 100644 examples/user/UpdateUsername.java create mode 100644 examples/user/UpdateWebhookEventSettings.java create mode 100644 examples/user/UpdateWebhookParseSettings.java delete mode 100644 examples/user/user.java diff --git a/examples/user/CreateWebhookParseSettings.java b/examples/user/CreateWebhookParseSettings.java new file mode 100644 index 00000000..23992ea7 --- /dev/null +++ b/examples/user/CreateWebhookParseSettings.java @@ -0,0 +1,22 @@ +////////////////////////////////////////////////////////////////// +// Create a parse setting +// POST /user/webhooks/parse/settings + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.POST); + request.setEndpoint("user/webhooks/parse/settings"); + request.setBody("{\"url\":\"http://email.myhosthame.com\",\"send_raw\":false,\"hostname\":\"myhostname.com\",\"spam_check\":true}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/user/DeleteScheduleSend.java b/examples/user/DeleteScheduleSend.java new file mode 100644 index 00000000..23b9857c --- /dev/null +++ b/examples/user/DeleteScheduleSend.java @@ -0,0 +1,21 @@ +////////////////////////////////////////////////////////////////// +// Delete a cancellation or pause of a scheduled send +// DELETE /user/scheduled_sends/{batch_id} + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.DELETE); + request.setEndpoint("user/scheduled_sends/{batch_id}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/user/DeleteWebhookParseSettings.java b/examples/user/DeleteWebhookParseSettings.java new file mode 100644 index 00000000..93b8763c --- /dev/null +++ b/examples/user/DeleteWebhookParseSettings.java @@ -0,0 +1,21 @@ +////////////////////////////////////////////////////////////////// +// Delete a parse setting +// DELETE /user/webhooks/parse/settings/{hostname} + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.DELETE); + request.setEndpoint("user/webhooks/parse/settings/{hostname}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/user/GetCreditBalance.java b/examples/user/GetCreditBalance.java new file mode 100644 index 00000000..c6b9db1e --- /dev/null +++ b/examples/user/GetCreditBalance.java @@ -0,0 +1,21 @@ +////////////////////////////////////////////////////////////////// +// Retrieve your credit balance +// GET /user/credits + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("user/credits"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/user/GetEmailAddress.java b/examples/user/GetEmailAddress.java new file mode 100644 index 00000000..7fbccf11 --- /dev/null +++ b/examples/user/GetEmailAddress.java @@ -0,0 +1,21 @@ +////////////////////////////////////////////////////////////////// +// Retrieve your account email address +// GET /user/email + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("user/email"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/user/GetEnforedTLS.java b/examples/user/GetEnforedTLS.java new file mode 100644 index 00000000..f5a21969 --- /dev/null +++ b/examples/user/GetEnforedTLS.java @@ -0,0 +1,21 @@ +////////////////////////////////////////////////////////////////// +// Retrieve current Enforced TLS settings. +// GET /user/settings/enforced_tls + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("user/settings/enforced_tls"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/user/GetProfile.java b/examples/user/GetProfile.java new file mode 100644 index 00000000..5fd8b541 --- /dev/null +++ b/examples/user/GetProfile.java @@ -0,0 +1,21 @@ +////////////////////////////////////////////////////////////////// +// Get a user's profile +// GET /user/profile + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("user/profile"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/user/GetScheduleSend.java b/examples/user/GetScheduleSend.java new file mode 100644 index 00000000..436dd0d9 --- /dev/null +++ b/examples/user/GetScheduleSend.java @@ -0,0 +1,21 @@ +////////////////////////////////////////////////////////////////// +// Retrieve all scheduled sends +// GET /user/scheduled_sends + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("user/scheduled_sends"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/user/GetScheduleSendByBatchId.java b/examples/user/GetScheduleSendByBatchId.java new file mode 100644 index 00000000..48c4e334 --- /dev/null +++ b/examples/user/GetScheduleSendByBatchId.java @@ -0,0 +1,21 @@ +////////////////////////////////////////////////////////////////// +// Retrieve scheduled send +// GET /user/scheduled_sends/{batch_id} + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("user/scheduled_sends/{batch_id}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/user/GetUserInfo.java b/examples/user/GetUserInfo.java new file mode 100644 index 00000000..880f6c5c --- /dev/null +++ b/examples/user/GetUserInfo.java @@ -0,0 +1,21 @@ +////////////////////////////////////////////////////////////////// +// Get a user's account information. +// GET /user/account + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("user/account"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/user/GetUsername.java b/examples/user/GetUsername.java new file mode 100644 index 00000000..e6756311 --- /dev/null +++ b/examples/user/GetUsername.java @@ -0,0 +1,21 @@ +////////////////////////////////////////////////////////////////// +// Retrieve your username +// GET /user/username + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("user/username"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/user/GetWebhookEventSettings.java b/examples/user/GetWebhookEventSettings.java new file mode 100644 index 00000000..fe1561c5 --- /dev/null +++ b/examples/user/GetWebhookEventSettings.java @@ -0,0 +1,21 @@ +////////////////////////////////////////////////////////////////// +// Retrieve Event Webhook settings +// GET /user/webhooks/event/settings + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("user/webhooks/event/settings"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/user/GetWebhookParseSettingByHostname.java b/examples/user/GetWebhookParseSettingByHostname.java new file mode 100644 index 00000000..8814de72 --- /dev/null +++ b/examples/user/GetWebhookParseSettingByHostname.java @@ -0,0 +1,21 @@ +////////////////////////////////////////////////////////////////// +// Retrieve a specific parse setting +// GET /user/webhooks/parse/settings/{hostname} + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("user/webhooks/parse/settings/{hostname}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/user/GetWebhookParseSettings.java b/examples/user/GetWebhookParseSettings.java new file mode 100644 index 00000000..deb6123c --- /dev/null +++ b/examples/user/GetWebhookParseSettings.java @@ -0,0 +1,21 @@ +////////////////////////////////////////////////////////////////// +// Retrieve all parse settings +// GET /user/webhooks/parse/settings + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("user/webhooks/parse/settings"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/user/GetWebhookParseStatistics.java b/examples/user/GetWebhookParseStatistics.java new file mode 100644 index 00000000..52be567b --- /dev/null +++ b/examples/user/GetWebhookParseStatistics.java @@ -0,0 +1,26 @@ +////////////////////////////////////////////////////////////////// +// Retrieves Inbound Parse Webhook statistics. +// GET /user/webhooks/parse/stats + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("user/webhooks/parse/stats"); + request.addQueryParam("aggregated_by", "day"); + request.addQueryParam("limit", "test_string"); + request.addQueryParam("start_date", "2016-01-01"); + request.addQueryParam("end_date", "2016-04-01"); + request.addQueryParam("offset", "test_string"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/user/PauseScheduleSend.java b/examples/user/PauseScheduleSend.java new file mode 100644 index 00000000..517a8853 --- /dev/null +++ b/examples/user/PauseScheduleSend.java @@ -0,0 +1,22 @@ +////////////////////////////////////////////////////////////////// +// Cancel or pause a scheduled send +// POST /user/scheduled_sends + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.POST); + request.setEndpoint("user/scheduled_sends"); + request.setBody("{\"batch_id\":\"YOUR_BATCH_ID\",\"status\":\"pause\"}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/user/README.md b/examples/user/README.md new file mode 100644 index 00000000..68e8370d --- /dev/null +++ b/examples/user/README.md @@ -0,0 +1,50 @@ +# User examples + +## Parse Settings Examples +- [Create Webhook Parse Settings](CreateWebhookParseSettings.java) +- [Delete Webhook Parse Settings](DeleteWebhookParseSettings.java) + +## Schedule Send Examples +- [Delete Scheduled Send](DeleteScheduleSend.java) +- [Get Scheduled Send](GetScheduleSend.java) +- [Get Scheduled Send](GetScheduleSendByBatchId.java) +- [Pause Scheduled Send](PauseScheduleSend.java) +- [Update Scheduled Send](UpdateScheduleSend.java) + +## Billing Examples +- [Get Credit Balance](GetCreditBalance.java) + +## Profile Examples + +### Email Address +- [Get Email Address](GetEmailAddress.java) +- [Update Email Address](UpdateEmailAddress.java) + +### Password +- [Update Password](UpdatePassword.java) + +### Profile +- [Get Profile](GetProfile.java) +- [Get User Info](GetUserInfo.java) +- [Update Profile](UpdateProfile.java) + +### Username +- [Get Username](GetUsername.java) +- [Update Username](UpdateUsername.java) + +## Security Settings Examples +- [Get Enforced TLS](GetEnforedTLS.java) +- [Update Enforced TLS](UpdateEnforcedTLS.java) + +## Webhook Settings Examples + +### Event Webhook +- [Test Event Webhook](TestWebhookEvent.java) +- [Get Event Webhook Settings](GetWebhookEventSettings.java) +- [Get Event Webhook Settings by Hostname](GetWebhookParseSettingByHostname.java) +- [Update Event Webhook Settings](UpdateWebhookEventSettings.java) + +## Inbound Parse +- [Get Parse Webhook Settings](GetWebhookParseSettings.java) +- [Get Parse Webhook Settings](GetWebhookParseStatistics.java) +- [Update Parse Webhook Settings](UpdateWebhookParseSettings.java) diff --git a/examples/user/TestWebhookEvent.java b/examples/user/TestWebhookEvent.java new file mode 100644 index 00000000..3dddac20 --- /dev/null +++ b/examples/user/TestWebhookEvent.java @@ -0,0 +1,22 @@ +////////////////////////////////////////////////////////////////// +// Test Event Notification Settings +// POST /user/webhooks/event/test + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.POST); + request.setEndpoint("user/webhooks/event/test"); + request.setBody("{\"url\":\"url\"}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/user/UpdateEmailAddress.java b/examples/user/UpdateEmailAddress.java new file mode 100644 index 00000000..dc0fd90e --- /dev/null +++ b/examples/user/UpdateEmailAddress.java @@ -0,0 +1,22 @@ +////////////////////////////////////////////////////////////////// +// Update your account email address +// PUT /user/email + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.PUT); + request.setEndpoint("user/email"); + request.setBody("{\"email\":\"example@example.com\"}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/user/UpdateEnforcedTLS.java b/examples/user/UpdateEnforcedTLS.java new file mode 100644 index 00000000..0de1b829 --- /dev/null +++ b/examples/user/UpdateEnforcedTLS.java @@ -0,0 +1,22 @@ +////////////////////////////////////////////////////////////////// +// Update Enforced TLS settings +// PATCH /user/settings/enforced_tls + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.PATCH); + request.setEndpoint("user/settings/enforced_tls"); + request.setBody("{\"require_tls\":true,\"require_valid_cert\":false}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} diff --git a/examples/user/UpdatePassword.java b/examples/user/UpdatePassword.java new file mode 100644 index 00000000..b61e2228 --- /dev/null +++ b/examples/user/UpdatePassword.java @@ -0,0 +1,22 @@ +////////////////////////////////////////////////////////////////// +// Update your password +// PUT /user/password + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.PUT); + request.setEndpoint("user/password"); + request.setBody("{\"new_password\":\"new_password\",\"old_password\":\"old_password\"}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} diff --git a/examples/user/UpdateProfile.java b/examples/user/UpdateProfile.java new file mode 100644 index 00000000..d86d6523 --- /dev/null +++ b/examples/user/UpdateProfile.java @@ -0,0 +1,22 @@ +////////////////////////////////////////////////////////////////// +// Update a user's profile +// PATCH /user/profile + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.PATCH); + request.setEndpoint("user/profile"); + request.setBody("{\"city\":\"Orange\",\"first_name\":\"Example\",\"last_name\":\"User\"}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/user/UpdateScheduleSend.java b/examples/user/UpdateScheduleSend.java new file mode 100644 index 00000000..5f8c5d09 --- /dev/null +++ b/examples/user/UpdateScheduleSend.java @@ -0,0 +1,22 @@ +////////////////////////////////////////////////////////////////// +// Update user scheduled send information +// PATCH /user/scheduled_sends/{batch_id} + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.PATCH); + request.setEndpoint("user/scheduled_sends/{batch_id}"); + request.setBody("{\"status\":\"pause\"}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/user/UpdateUsername.java b/examples/user/UpdateUsername.java new file mode 100644 index 00000000..470dfb1a --- /dev/null +++ b/examples/user/UpdateUsername.java @@ -0,0 +1,22 @@ +////////////////////////////////////////////////////////////////// +// Update your username +// PUT /user/username + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.PUT); + request.setBody("user/username"); + request.setBody("{\"username\":\"test_username\"}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/user/UpdateWebhookEventSettings.java b/examples/user/UpdateWebhookEventSettings.java new file mode 100644 index 00000000..13b61488 --- /dev/null +++ b/examples/user/UpdateWebhookEventSettings.java @@ -0,0 +1,22 @@ +////////////////////////////////////////////////////////////////// +// Update Event Notification Settings +// PATCH /user/webhooks/event/settings + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.PATCH); + request.setEndpoint("user/webhooks/event/settings"); + request.setBody("{\"group_resubscribe\":true,\"delivered\":true,\"group_unsubscribe\":true,\"spam_report\":true,\"url\":\"url\",\"enabled\":true,\"bounce\":true,\"deferred\":true,\"unsubscribe\":true,\"dropped\":true,\"open\":true,\"click\":true,\"processed\":true}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/user/UpdateWebhookParseSettings.java b/examples/user/UpdateWebhookParseSettings.java new file mode 100644 index 00000000..bbb0b8f4 --- /dev/null +++ b/examples/user/UpdateWebhookParseSettings.java @@ -0,0 +1,22 @@ +////////////////////////////////////////////////////////////////// +// Update a parse setting +// PATCH /user/webhooks/parse/settings/{hostname} + + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.PATCH); + request.setEndpoint("user/webhooks/parse/settings/{hostname}"); + request.setBody("{\"url\":\"http://newdomain.com/parse\",\"send_raw\":true,\"spam_check\":false}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/user/user.java b/examples/user/user.java deleted file mode 100644 index 9c5ff95c..00000000 --- a/examples/user/user.java +++ /dev/null @@ -1,575 +0,0 @@ -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; - -import com.sendgrid.*; - -import java.io.IOException; -import java.util.HashMap; -import java.util.Map; - -////////////////////////////////////////////////////////////////// -// Get a user's account information. -// GET /user/account - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("user/account"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve your credit balance -// GET /user/credits - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("user/credits"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Update your account email address -// PUT /user/email - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.PUT); - request.setEndpoint("user/email"); - request.setBody("{\"email\":\"example@example.com\"}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve your account email address -// GET /user/email - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("user/email"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Update your password -// PUT /user/password - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.PUT); - request.setEndpoint("user/password"); - request.setBody("{\"new_password\":\"new_password\",\"old_password\":\"old_password\"}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Update a user's profile -// PATCH /user/profile - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.PATCH); - request.setEndpoint("user/profile"); - request.setBody("{\"city\":\"Orange\",\"first_name\":\"Example\",\"last_name\":\"User\"}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Get a user's profile -// GET /user/profile - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("user/profile"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Cancel or pause a scheduled send -// POST /user/scheduled_sends - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.POST); - request.setEndpoint("user/scheduled_sends"); - request.setBody("{\"batch_id\":\"YOUR_BATCH_ID\",\"status\":\"pause\"}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve all scheduled sends -// GET /user/scheduled_sends - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("user/scheduled_sends"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Update user scheduled send information -// PATCH /user/scheduled_sends/{batch_id} - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.PATCH); - request.setEndpoint("user/scheduled_sends/{batch_id}"); - request.setBody("{\"status\":\"pause\"}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve scheduled send -// GET /user/scheduled_sends/{batch_id} - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("user/scheduled_sends/{batch_id}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Delete a cancellation or pause of a scheduled send -// DELETE /user/scheduled_sends/{batch_id} - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.DELETE); - request.setEndpoint("user/scheduled_sends/{batch_id}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Update Enforced TLS settings -// PATCH /user/settings/enforced_tls - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.PATCH); - request.setEndpoint("user/settings/enforced_tls"); - request.setBody("{\"require_tls\":true,\"require_valid_cert\":false}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve current Enforced TLS settings. -// GET /user/settings/enforced_tls - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("user/settings/enforced_tls"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Update your username -// PUT /user/username - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.PUT); - request.setBody("user/username"); - request.setBody("{\"username\":\"test_username\"}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve your username -// GET /user/username - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("user/username"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Update Event Notification Settings -// PATCH /user/webhooks/event/settings - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.PATCH); - request.setEndpoint("user/webhooks/event/settings"); - request.setBody("{\"group_resubscribe\":true,\"delivered\":true,\"group_unsubscribe\":true,\"spam_report\":true,\"url\":\"url\",\"enabled\":true,\"bounce\":true,\"deferred\":true,\"unsubscribe\":true,\"dropped\":true,\"open\":true,\"click\":true,\"processed\":true}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve Event Webhook settings -// GET /user/webhooks/event/settings - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("user/webhooks/event/settings"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Test Event Notification Settings -// POST /user/webhooks/event/test - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.POST); - request.setEndpoint("user/webhooks/event/test"); - request.setBody("{\"url\":\"url\"}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Create a parse setting -// POST /user/webhooks/parse/settings - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.POST); - request.setEndpoint("user/webhooks/parse/settings"); - request.setBody("{\"url\":\"http://email.myhosthame.com\",\"send_raw\":false,\"hostname\":\"myhostname.com\",\"spam_check\":true}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve all parse settings -// GET /user/webhooks/parse/settings - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("user/webhooks/parse/settings"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Update a parse setting -// PATCH /user/webhooks/parse/settings/{hostname} - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.PATCH); - request.setEndpoint("user/webhooks/parse/settings/{hostname}"); - request.setBody("{\"url\":\"http://newdomain.com/parse\",\"send_raw\":true,\"spam_check\":false}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve a specific parse setting -// GET /user/webhooks/parse/settings/{hostname} - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("user/webhooks/parse/settings/{hostname}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Delete a parse setting -// DELETE /user/webhooks/parse/settings/{hostname} - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.DELETE); - request.setEndpoint("user/webhooks/parse/settings/{hostname}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieves Inbound Parse Webhook statistics. -// GET /user/webhooks/parse/stats - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("user/webhooks/parse/stats"); - request.addQueryParam("aggregated_by", "day"); - request.addQueryParam("limit", "test_string"); - request.addQueryParam("start_date", "2016-01-01"); - request.addQueryParam("end_date", "2016-04-01"); - request.addQueryParam("offset", "test_string"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - From 527db212b201fe56feaa192fe105d03d3a47fa44 Mon Sep 17 00:00:00 2001 From: Twilio Date: Mon, 3 Aug 2020 22:30:09 +0000 Subject: [PATCH 210/345] docs: Update templated markdown docs to use new default branch name --- ISSUE_TEMPLATE.md | 6 +++++- PULL_REQUEST_TEMPLATE.md | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/ISSUE_TEMPLATE.md b/ISSUE_TEMPLATE.md index 68630383..78ecfbd3 100644 --- a/ISSUE_TEMPLATE.md +++ b/ISSUE_TEMPLATE.md @@ -1,5 +1,9 @@ ### Issue Summary @@ -21,6 +25,6 @@ A summary of the issue and the environment in which it occurs. If suitable, incl ``` ### Technical details: -* sendgrid-java version: +* sendgrid-java version: * java version: diff --git a/PULL_REQUEST_TEMPLATE.md b/PULL_REQUEST_TEMPLATE.md index 215059a9..a8681802 100644 --- a/PULL_REQUEST_TEMPLATE.md +++ b/PULL_REQUEST_TEMPLATE.md @@ -23,7 +23,7 @@ A short description of what this PR does. - [ ] I have made a material change to the repo (functionality, testing, spelling, grammar) - [ ] I have read the [Contribution Guidelines](CONTRIBUTING.md) and my PR follows them - [ ] I have titled the PR appropriately -- [ ] I have updated my branch with the master branch +- [ ] I have updated my branch with the main branch - [ ] I have added tests that prove my fix is effective or that my feature works - [ ] I have added necessary documentation about the functionality in the appropriate .md file - [ ] I have added inline documentation to the code I modified From 915c5ce8ee2aefef13fda586d979faffb0bbd1e6 Mon Sep 17 00:00:00 2001 From: Twilio Date: Wed, 5 Aug 2020 19:24:28 +0000 Subject: [PATCH 211/345] [Librarian] Version Bump --- CHANGELOG.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0306fa78..1d85f90e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,20 @@ # Change Log All notable changes to this project will be documented in this file. +[2020-08-05] Version 4.6.3 +-------------------------- +**Library - Chore** +- [PR #539](https://github.com/sendgrid/sendgrid-java/pull/539): tidied up a little. Thanks to [@RohanTalip](https://github.com/RohanTalip)! + +**Library - Docs** +- [PR #370](https://github.com/sendgrid/sendgrid-java/pull/370): breakup examples to their own files in examples/user/user.java. Thanks to [@rivenhk](https://github.com/rivenhk)! +- [PR #390](https://github.com/sendgrid/sendgrid-java/pull/390): Update README link to avoid redirection. Thanks to [@Rolstenhouse](https://github.com/Rolstenhouse)! + +**Library - Fix** +- [PR #643](https://github.com/sendgrid/sendgrid-java/pull/643): Replace `bcprov-jdk15to18` with `bcprov-jdk15on`. Thanks to [@Stephan202](https://github.com/Stephan202)! +- [PR #642](https://github.com/sendgrid/sendgrid-java/pull/642): remove the content verifier. Thanks to [@childish-sambino](https://github.com/childish-sambino)! + + [2020-07-22] Version 4.6.2 -------------------------- **Library - Chore** From 7e64e544da77ae06c518cf1353d553f54654e9a1 Mon Sep 17 00:00:00 2001 From: Twilio Date: Wed, 5 Aug 2020 19:57:17 +0000 Subject: [PATCH 212/345] Release 4.6.3 --- CONTRIBUTING.md | 2 +- README.md | 8 ++++---- pom.xml | 8 ++++---- src/main/java/com/sendgrid/BaseInterface.java | 2 +- src/test/java/com/sendgrid/SendGridTest.java | 2 +- 5 files changed, 11 insertions(+), 11 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index b1fbad85..ff3ed35e 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -101,7 +101,7 @@ touch Example.java Add the example you want to test to Example.java, including the headers at the top of the file. ``` bash -javac -classpath ../repo/com/sendgrid/4.6.2/sendgrid-4.6.2-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.6.2/sendgrid-4.6.2-jar.jar:. Example +javac -classpath ../repo/com/sendgrid/4.6.3/sendgrid-4.6.3-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.6.3/sendgrid-4.6.3-jar.jar:. Example ``` diff --git a/README.md b/README.md index 1efc9339..58258487 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ **NEW:** Subscribe to email [notifications](https://dx.sendgrid.com/newsletter/java) for releases and breaking changes. -**The default branch name for this repository has been changed to `main` as of 07/27/2020.** +**The default branch name for this repository has been changed to `main` as of 4.6.3.** **This library allows you to quickly and easily use the Twilio SendGrid Web API v3 via Java.** @@ -41,7 +41,7 @@ We appreciate your continued support, thank you! ## Prerequisites - Java version Oracle JDK 7, 8 or OpenJDK 7 -- The Twilio SendGrid service, starting at the [free level](https://sendgrid.com/free?source=sendgrid-java) to send up to 4.6.2 emails for the first 30 days, then send 100 emails/day free forever or check out [our pricing](https://sendgrid.com/pricing?source=sendgrid-java). +- The Twilio SendGrid service, starting at the [free level](https://sendgrid.com/free?source=sendgrid-java) to send up to 4.6.3 emails for the first 30 days, then send 100 emails/day free forever or check out [our pricing](https://sendgrid.com/pricing?source=sendgrid-java). ## Setup Environment Variables @@ -69,7 +69,7 @@ Add the following to your build.gradle file in the root of your project. ... dependencies { ... - implementation 'com.sendgrid:sendgrid-java:4.6.2' + implementation 'com.sendgrid:sendgrid-java:4.6.3' } repositories { @@ -88,7 +88,7 @@ mvn install You can just drop the jar file in. It's a fat jar - it has all the dependencies built in. -[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.6.2/sendgrid-java.jar) +[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.6.3/sendgrid-java.jar) ## Dependencies diff --git a/pom.xml b/pom.xml index 501c5915..5776278b 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ com.sendgrid sendgrid-java Twilio SendGrid Java helper library - 4.6.2 + 4.6.3 This Java module allows you to quickly and easily send emails through Twilio SendGrid using Java. https://github.com/sendgrid/sendgrid-java @@ -26,7 +26,7 @@ https://github.com/sendgrid/sendgrid-java scm:git:git@github.com:sendgrid/sendgrid-java.git scm:git:git@github.com:sendgrid/sendgrid-java.git - 4.6.2 + 4.6.3 @@ -274,7 +274,7 @@ com.sendgrid java-http-client - 4.3.3 + 4.3.4 com.fasterxml.jackson.core @@ -309,4 +309,4 @@ 1.66 - + \ No newline at end of file diff --git a/src/main/java/com/sendgrid/BaseInterface.java b/src/main/java/com/sendgrid/BaseInterface.java index b5e7de29..bf3e1957 100644 --- a/src/main/java/com/sendgrid/BaseInterface.java +++ b/src/main/java/com/sendgrid/BaseInterface.java @@ -11,7 +11,7 @@ */ public abstract class BaseInterface implements SendGridAPI { - private static final String VERSION = "4.6.2"; + private static final String VERSION = "4.6.3"; private static final String USER_AGENT = "sendgrid/" + VERSION + ";java"; private static final int RATE_LIMIT_RESPONSE_CODE = 429; diff --git a/src/test/java/com/sendgrid/SendGridTest.java b/src/test/java/com/sendgrid/SendGridTest.java index abe8349c..b1f88f7a 100644 --- a/src/test/java/com/sendgrid/SendGridTest.java +++ b/src/test/java/com/sendgrid/SendGridTest.java @@ -43,7 +43,7 @@ public void testConstructWithClient() throws IOException { @Test public void testLibraryVersion() { SendGrid sg = new SendGrid(SENDGRID_API_KEY); - Assert.assertEquals(sg.getLibraryVersion(), "4.6.2"); + Assert.assertEquals(sg.getLibraryVersion(), "4.6.3"); } @Test From db5afa25a73f08c7a3a07e52dbed24660f079abe Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Fri, 7 Aug 2020 12:56:27 -0700 Subject: [PATCH 213/345] chore: update GitHub branch references to use HEAD (#644) --- CHANGELOG.md | 6 ++-- CONTRIBUTING.md | 8 ++--- README.md | 32 +++++++++---------- TROUBLESHOOTING.md | 2 +- USAGE.md | 2 +- USE_CASES.md | 4 +-- bin/com/sendgrid/helpers/README.md | 19 ----------- examples/mail/mail.java | 2 +- pom.xml | 2 +- src/main/java/com/sendgrid/helpers/README.md | 4 +-- twilio_sendgrid_logo.png | Bin 0 -> 14596 bytes 11 files changed, 31 insertions(+), 50 deletions(-) delete mode 100644 bin/com/sendgrid/helpers/README.md create mode 100644 twilio_sendgrid_logo.png diff --git a/CHANGELOG.md b/CHANGELOG.md index 1d85f90e..48fafd67 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -114,7 +114,7 @@ All notable changes to this project will be documented in this file. ## [4.4.0] - 2019-05-20 ### Added -- [PR #500](https://github.com/sendgrid/sendgrid-java/pull/500/files): Update CONTRIBUTING.md - using gitflow workflow, development branch instead of master -- BIG thanks to [Alex](https://github.com/pushkyn) +- [PR #500](https://github.com/sendgrid/sendgrid-java/pull/500/files): Update CONTRIBUTING.md - using gitflow workflow, development branch instead of main -- BIG thanks to [Alex](https://github.com/pushkyn) - [PR #521](https://github.com/sendgrid/sendgrid-java/pull/521/files): Updating prerequisites -- BIG thanks to [Rishabh](https://github.com/Rishabh04-02) - [PR #495](https://github.com/sendgrid/sendgrid-java/pull/495/files): Add ability to impersonate subusers -- BIG thanks to [Rohit Tarachandani](https://github.com/Rohit-T) - [PR #569](https://github.com/sendgrid/sendgrid-java/pull/495/files): Twilio Branding + CLA Policy Update @@ -231,7 +231,7 @@ request.addQueryParam("limit", "1"); ## [3.0.9] - 2016-08-24 ### Added - Table of Contents in the README -- Added a [USE_CASES.md](https://github.com/sendgrid/sendgrid-java/blob/master/USE_CASES.md) section, with the first use case example for transactional templates +- Added a [USE_CASES.md](USE_CASES.md) section, with the first use case example for transactional templates ## [3.0.8] - 2016-08-09 ### Fixed @@ -250,7 +250,7 @@ request.addQueryParam("limit", "1"); ## [3.0.6] - 2016-07-26 ### Added -- [Troubleshooting](https://github.com/sendgrid/sendgrid-python/blob/master/TROUBLESHOOTING.md) section +- [Troubleshooting](TROUBLESHOOTING.md) section ## [3.0.5] - 2016-07-20 ### Added diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index ff3ed35e..7218bce9 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -88,7 +88,7 @@ source ./sendgrid.env ##### Execute: ##### -See the [examples folder](https://github.com/sendgrid/sendgrid-java/tree/master/examples) to get started quickly. +See the [examples folder](examples) to get started quickly. Check out the documentation for [Web API v3 endpoints](https://sendgrid.com/docs/API_Reference/Web_API_v3/index.html). @@ -124,9 +124,9 @@ The interface to the Twilio SendGrid API. All PRs require passing tests before the PR will be reviewed. -All test files are in the [`tests`](https://github.com/sendgrid/sendgrid-java/tree/master/src/test/java/com/sendgrid) directory. +All test files are in the [`tests`](src/test/java/com/sendgrid) directory. -For the purposes of contributing to this repo, please update the [`SendGridTest.java`](https://github.com/sendgrid/sendgrid-java/tree/master/src/test/java/com/sendgrid/SendGridTest.java) file with unit tests as you modify the code. +For the purposes of contributing to this repo, please update the [`SendGridTest.java`](src/test/java/com/sendgrid/SendGridTest.java) file with unit tests as you modify the code. The integration tests require a Twilio SendGrid mock API in order to execute. We've simplified setting this up using Docker to run the tests. You will just need [Docker Desktop](https://docs.docker.com/get-docker/) and `make`. @@ -196,7 +196,7 @@ Please run your code through: ``` 7. [Open a Pull Request](https://help.github.com/articles/using-pull-requests/) - with a clear title and description against the `master` branch. All tests must be passing before we will review the PR. + with a clear title and description against the `main` branch. All tests must be passing before we will review the PR. ## Code Reviews If you can, please look at open PRs and review them. Give feedback and help us merge these PRs much faster! If you don't know how, GitHub has some great information on how to review a Pull Request. diff --git a/README.md b/README.md index 58258487..092a8ffb 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ -![SendGrid Logo](https://github.com/sendgrid/sendgrid-python/raw/master/twilio_sendgrid_logo.png) +![SendGrid Logo](twilio_sendgrid_logo.png) -[![Travis Badge](https://travis-ci.org/sendgrid/sendgrid-java.svg?branch=master)](https://travis-ci.org/sendgrid/sendgrid-java) +[![Travis Badge](https://travis-ci.org/sendgrid/sendgrid-java.svg?branch=main)](https://travis-ci.org/sendgrid/sendgrid-java) [![Maven Central](https://img.shields.io/maven-central/v/com.sendgrid/sendgrid-java.svg)](http://mvnrepository.com/artifact/com.sendgrid/sendgrid-java) [![Email Notifications Badge](https://dx.sendgrid.com/badge/java)](https://dx.sendgrid.com/newsletter/java) [![Twitter Follow](https://img.shields.io/twitter/follow/sendgrid.svg?style=social&label=Follow)](https://twitter.com/sendgrid) @@ -16,7 +16,7 @@ Version 3.X.X of this library provides full support for all Twilio SendGrid [Web API v3](https://sendgrid.com/docs/API_Reference/Web_API_v3/index.html) endpoints, including the new [v3 /mail/send](https://sendgrid.com/blog/introducing-v3mailsend-sendgrids-new-mail-endpoint). -This library represents the beginning of a new path for Twilio SendGrid. We want this library to be community driven and Twilio SendGrid led. We need your help to realize this goal. To help make sure we are building the right things in the right order, we ask that you create [issues](https://github.com/sendgrid/sendgrid-java/issues) and [pull requests](https://github.com/sendgrid/sendgrid-java/blob/master/CONTRIBUTING.md) or simply upvote or comment on existing issues or pull requests. +This library represents the beginning of a new path for Twilio SendGrid. We want this library to be community driven and Twilio SendGrid led. We need your help to realize this goal. To help make sure we are building the right things in the right order, we ask that you create [issues](https://github.com/sendgrid/sendgrid-java/issues) and [pull requests](CONTRIBUTING.md) or simply upvote or comment on existing issues or pull requests. Please browse the rest of this README for further details. @@ -99,7 +99,7 @@ You can just drop the jar file in. It's a fat jar - it has all the dependencies ## Hello Email -The following is the minimum needed code to send an email with the [/mail/send Helper](https://github.com/sendgrid/sendgrid-java/tree/master/src/main/java/com/sendgrid/helpers) ([here](https://github.com/sendgrid/sendgrid-java/blob/master/examples/helpers/mail/Example.java#L30) is a full example): +The following is the minimum needed code to send an email with the [/mail/send Helper](src/main/java/com/sendgrid/helpers) ([here](examples/helpers/mail/Example.java#L30) is a full example): ### With Mail Helper Class @@ -132,11 +132,11 @@ public class Example { } ``` -The `Mail` constructor creates a [personalization object](https://sendgrid.com/docs/Classroom/Send/v3_Mail_Send/personalizations.html) for you. [Here](https://github.com/sendgrid/sendgrid-java/blob/master/examples/helpers/mail/Example.java#L221) is an example of how to add to it. +The `Mail` constructor creates a [personalization object](https://sendgrid.com/docs/Classroom/Send/v3_Mail_Send/personalizations.html) for you. [Here](examples/helpers/mail/Example.java#L221) is an example of how to add to it. ### Without Mail Helper Class -The following is the minimum needed code to send an email without the /mail/send Helper ([here](https://github.com/sendgrid/sendgrid-java/blob/master/examples/mail/mail.java#L54) is a full example): +The following is the minimum needed code to send an email without the /mail/send Helper ([here](examples/mail/mail.java#L54) is a full example): ```java import com.sendgrid.*; @@ -189,23 +189,23 @@ public class Example { # Usage - [Twilio SendGrid Docs](https://sendgrid.com/docs/API_Reference/Web_API_v3/index.html) -- [Library Usage Docs](https://github.com/sendgrid/sendgrid-java/tree/master/USAGE.md) -- [Example Code](https://github.com/sendgrid/sendgrid-java/tree/master/examples) +- [Library Usage Docs](USAGE.md) +- [Example Code](examples) - [How-to: Migration from v2 to v3](https://sendgrid.com/docs/Classroom/Send/v3_Mail_Send/how_to_migrate_from_v2_to_v3_mail_send.html) -- [v3 Web API Mail Send Helper](https://github.com/sendgrid/sendgrid-java/tree/master/src/main/java/com/sendgrid/helpers) - build a request object payload for a v3 /mail/send API call. +- [v3 Web API Mail Send Helper](src/main/java/com/sendgrid/helpers) - build a request object payload for a v3 /mail/send API call. # Use Cases -[Examples of common API use cases](https://github.com/sendgrid/sendgrid-java/blob/master/USE_CASES.md), such as how to send an email with a transactional template. +[Examples of common API use cases](USE_CASES.md), such as how to send an email with a transactional template. # Announcements Please see our announcement regarding [breaking changes](https://github.com/sendgrid/sendgrid-java/issues/140). Your support is appreciated! -All updates to this library are documented in our [CHANGELOG](https://github.com/sendgrid/sendgrid-java/blob/master/CHANGELOG.md) and [releases](https://github.com/sendgrid/sendgrid-java/releases). You may also subscribe to email [release notifications](https://dx.sendgrid.com/newsletter/java) for releases and breaking changes. +All updates to this library are documented in our [CHANGELOG](CHANGELOG.md) and [releases](https://github.com/sendgrid/sendgrid-java/releases). You may also subscribe to email [release notifications](https://dx.sendgrid.com/newsletter/java) for releases and breaking changes. # Roadmap @@ -215,18 +215,18 @@ If you are interested in the future direction of this project, please take a loo # How to Contribute -We encourage contribution to our libraries (you might even score some nifty swag), please see our [CONTRIBUTING](https://github.com/sendgrid/sendgrid-java/blob/master/CONTRIBUTING.md) guide for details. +We encourage contribution to our libraries (you might even score some nifty swag), please see our [CONTRIBUTING](CONTRIBUTING.md) guide for details. Quick links: -- [Feature Request](https://github.com/sendgrid/sendgrid-java/blob/master/CONTRIBUTING.md#feature-request) -- [Bug Reports](https://github.com/sendgrid/sendgrid-java/blob/master/CONTRIBUTING.md#submit-a-bug-report) -- [Improvements to the Codebase](https://github.com/sendgrid/sendgrid-java/blob/master/CONTRIBUTING.md#improvements-to-the-codebase) +- [Feature Request](CONTRIBUTING.md#feature-request) +- [Bug Reports](CONTRIBUTING.md#submit-a-bug-report) +- [Improvements to the Codebase](CONTRIBUTING.md#improvements-to-the-codebase) # Troubleshooting -Please see our [troubleshooting guide](https://github.com/sendgrid/sendgrid-java/blob/master/TROUBLESHOOTING.md) for common library issues. +Please see our [troubleshooting guide](TROUBLESHOOTING.md) for common library issues. # About diff --git a/TROUBLESHOOTING.md b/TROUBLESHOOTING.md index ed1090d1..bc3b1361 100644 --- a/TROUBLESHOOTING.md +++ b/TROUBLESHOOTING.md @@ -60,7 +60,7 @@ You can just drop the jar file in. It's a fat jar - it has all the dependencies ## Versions -We follow the MAJOR.MINOR.PATCH versioning scheme as described by [SemVer.org](http://semver.org). Therefore, we recommend that you always pin (or vendor) the particular version you are working with to your code and never auto-update to the latest version. Especially when there is a MAJOR point release, since that is guaranteed to be a breaking change. Changes are documented in the [CHANGELOG](https://github.com/sendgrid/sendgrid-java/blob/master/CHANGELOG.md) and [releases](https://github.com/sendgrid/sendgrid-java/releases) section. +We follow the MAJOR.MINOR.PATCH versioning scheme as described by [SemVer.org](http://semver.org). Therefore, we recommend that you always pin (or vendor) the particular version you are working with to your code and never auto-update to the latest version. Especially when there is a MAJOR point release, since that is guaranteed to be a breaking change. Changes are documented in the [CHANGELOG](CHANGELOG.md) and [releases](https://github.com/sendgrid/sendgrid-java/releases) section. ## Environment Variables and Your Twilio SendGrid API Key diff --git a/USAGE.md b/USAGE.md index 155cc1e6..6b0529dc 100644 --- a/USAGE.md +++ b/USAGE.md @@ -2693,7 +2693,7 @@ For more detailed information about how to use the v3 Mail Send endpoint, please ### POST /mail/send -This endpoint has a helper, check it out [here](https://github.com/sendgrid/sendgrid-java/blob/master/src/main/java/com/sendgrid/helpers/README.md). +This endpoint has a helper, check it out [here](src/main/java/com/sendgrid/helpers/README.md). ```java try { diff --git a/USE_CASES.md b/USE_CASES.md index c74b1264..5af8f674 100644 --- a/USE_CASES.md +++ b/USE_CASES.md @@ -223,13 +223,13 @@ public class Example { # How to Setup a Domain Authentication -You can find documentation for how to setup a domain authentication via the UI [here](https://sendgrid.com/docs/ui/account-and-settings/how-to-set-up-domain-authentication/) and via API [here](https://github.com/sendgrid/sendgrid-nodejs/blob/master/packages/client/USAGE.md#sender-authentication). +You can find documentation for how to setup a domain authentication via the UI [here](https://sendgrid.com/docs/ui/account-and-settings/how-to-set-up-domain-authentication/) and via API [here](USAGE.md#sender-authentication). Find more information about all of Twilio SendGrid's authentication related documentation [here](https://sendgrid.com/docs/ui/account-and-settings/). # How to View Email Statistics -You can find documentation for how to view your email statistics via the UI [here](https://app.sendgrid.com/statistics) and via API [here](https://github.com/sendgrid/sendgrid-java/blob/master/USAGE.md#stats). +You can find documentation for how to view your email statistics via the UI [here](https://app.sendgrid.com/statistics) and via API [here](USAGE.md#stats). Alternatively, we can post events to a URL of your choice via our [Event Webhook](https://sendgrid.com/docs/API_Reference/Webhooks/event.html) about events that occur as Twilio SendGrid processes your email. diff --git a/bin/com/sendgrid/helpers/README.md b/bin/com/sendgrid/helpers/README.md deleted file mode 100644 index 9b99f325..00000000 --- a/bin/com/sendgrid/helpers/README.md +++ /dev/null @@ -1,19 +0,0 @@ -**This helper allows you to quickly and easily build a Mail object for sending email through Twilio SendGrid.** - -## Dependencies - -- [Jackson](https://github.com/FasterXML/jackson) - -# Quick Start - -Run the [example](https://github.com/sendgrid/sendgrid-java/tree/master/examples/mail) (make sure you have set your environment variable to include your SENDGRID_API_KEY). - -```bash -cd examples/mail -javac -classpath ../../build/libs/sendgrid-4.2.1-jar.jar:. Example.java && java -classpath ../examples/jackson-core-2.9.9.jar:../../build/libs/sendgrid-4.1.0-jar.jar:. Example -``` - -## Usage - -- See the [example](https://github.com/sendgrid/sendgrid-java/tree/master/examples/mail) for a complete working example. -- [Documentation](https://sendgrid.com/docs/API_Reference/Web_API_v3/Mail/index.html) diff --git a/examples/mail/mail.java b/examples/mail/mail.java index f35989df..ada390c2 100644 --- a/examples/mail/mail.java +++ b/examples/mail/mail.java @@ -55,7 +55,7 @@ public static void main(String[] args) throws IOException { // v3 Mail Send // POST /mail/send -// This endpoint has a helper, check it out [here](https://github.com/sendgrid/sendgrid-java/blob/master/src/main/java/com/sendgrid/helpers/README.md). +// This endpoint has a helper, check it out [here](https://github.com/sendgrid/sendgrid-java/blob/HEAD/src/main/java/com/sendgrid/helpers/README.md). public class Example { public static void main(String[] args) throws IOException { diff --git a/pom.xml b/pom.xml index 5776278b..cfa43c93 100644 --- a/pom.xml +++ b/pom.xml @@ -15,7 +15,7 @@ The MIT License (MIT) - https://github.com/sendgrid/java-http-client/blob/master/LICENSE + https://github.com/sendgrid/java-http-client/blob/HEAD/LICENSE repo diff --git a/src/main/java/com/sendgrid/helpers/README.md b/src/main/java/com/sendgrid/helpers/README.md index 9b99f325..b9128ff6 100644 --- a/src/main/java/com/sendgrid/helpers/README.md +++ b/src/main/java/com/sendgrid/helpers/README.md @@ -6,7 +6,7 @@ # Quick Start -Run the [example](https://github.com/sendgrid/sendgrid-java/tree/master/examples/mail) (make sure you have set your environment variable to include your SENDGRID_API_KEY). +Run the [example](../../../../../../examples/mail) (make sure you have set your environment variable to include your SENDGRID_API_KEY). ```bash cd examples/mail @@ -15,5 +15,5 @@ javac -classpath ../../build/libs/sendgrid-4.2.1-jar.jar:. Example.java && java ## Usage -- See the [example](https://github.com/sendgrid/sendgrid-java/tree/master/examples/mail) for a complete working example. +- See the [example](../../../../../../examples/mail) for a complete working example. - [Documentation](https://sendgrid.com/docs/API_Reference/Web_API_v3/Mail/index.html) diff --git a/twilio_sendgrid_logo.png b/twilio_sendgrid_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..a4c22239ac0cc70e10a51f828390d713edc8a29b GIT binary patch literal 14596 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 literal 0 HcmV?d00001 From 89be5ee274c21e090be0028dde741bf82ad7352d Mon Sep 17 00:00:00 2001 From: Sam Harrison Date: Tue, 11 Aug 2020 14:46:33 -0500 Subject: [PATCH 214/345] chore: update supported Java versions to match testing strategy --- CONTRIBUTING.md | 2 +- README.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 7218bce9..9ba321ae 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -63,7 +63,7 @@ Please note that we utilize the [Gitflow Workflow](https://www.atlassian.com/git ##### Prerequisites ##### -- Java version Oracle JDK 7, 8 or OpenJDK 7 +- Java 8 or 11 - [java-http-client](https://github.com/sendgrid/java-http-client) ##### Initial setup: ##### diff --git a/README.md b/README.md index 092a8ffb..5a575570 100644 --- a/README.md +++ b/README.md @@ -40,7 +40,7 @@ We appreciate your continued support, thank you! ## Prerequisites -- Java version Oracle JDK 7, 8 or OpenJDK 7 +- Java 8 or 11 - The Twilio SendGrid service, starting at the [free level](https://sendgrid.com/free?source=sendgrid-java) to send up to 4.6.3 emails for the first 30 days, then send 100 emails/day free forever or check out [our pricing](https://sendgrid.com/pricing?source=sendgrid-java). ## Setup Environment Variables From fe30aedaeffb654f47154831726e6bce80079bec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ros=C3=A1rio=20Pereira=20Fernandes?= Date: Wed, 12 Aug 2020 18:33:05 +0200 Subject: [PATCH 215/345] test: Add spotbugs and checkstyle maven plugins for Travis CI (#496) --- Makefile | 2 +- pom.xml | 23 ++++++++++++++++++++++- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 064737ef..82e5c343 100644 --- a/Makefile +++ b/Makefile @@ -7,7 +7,7 @@ install: cp target/sendgrid-java-$(VERSION)-shaded.jar sendgrid-java.jar test: - mvn test + mvn test spotbugs:spotbugs checkstyle:check -Dcheckstyle.config.location=google_checks.xml test-integ: test diff --git a/pom.xml b/pom.xml index cfa43c93..f91a2e6e 100644 --- a/pom.xml +++ b/pom.xml @@ -259,6 +259,18 @@ + + com.github.spotbugs + spotbugs-maven-plugin + 4.0.4 + + + com.github.spotbugs + spotbugs + 4.0.4 + + +
@@ -309,4 +321,13 @@ 1.66 - \ No newline at end of file + + + + org.apache.maven.plugins + maven-checkstyle-plugin + 3.0.0 + + + + From e71c7b09936715c4a9e39eb10c620b5a41385b11 Mon Sep 17 00:00:00 2001 From: Dmitriy Danilov Date: Tue, 18 Aug 2020 17:00:15 +0300 Subject: [PATCH 216/345] docs: add contribution guide for first-timers (#491) --- first-timers.md | 77 ++++++++++++++++++++++++++++++++++ static/img/github-fork.png | Bin 0 -> 15189 bytes static/img/github-sign-up.png | Bin 0 -> 116981 bytes 3 files changed, 77 insertions(+) create mode 100644 first-timers.md create mode 100644 static/img/github-fork.png create mode 100644 static/img/github-sign-up.png diff --git a/first-timers.md b/first-timers.md new file mode 100644 index 00000000..846100d7 --- /dev/null +++ b/first-timers.md @@ -0,0 +1,77 @@ +# How To Contribute to SendGrid Repositories via GitHub + Contributing to the SendGrid is easy! All you need to do is find an open issue (see the bottom of this page for a list of repositories containing open issues), fix it and submit a pull request. Once you have submitted your pull request, the team can easily review it before it is merged into the repository. + To make a pull request, follow these steps: + 1. Log into GitHub. If you do not already have a GitHub account, you will have to create one in order to submit a change. Click the Sign up link in the upper right-hand corner to create an account. Enter your username, password, and email address. If you are an employee of SendGrid, please use your full name with your GitHub account and enter SendGrid as your company so we can easily identify you. + + + + 2. __[Fork](https://help.github.com/fork-a-repo/)__ the [sendgrid-java](https://github.com/sendgrid/sendgrid-java) repository: + + + + 3. __Clone__ your fork via the following commands: + + ``` + # Clone your fork of the repo into the current directory + git clone https://github.com/your_username/sendgrid-java + # Navigate to the newly cloned directory + cd sendgrid-java + # Assign the original repo to a remote called "upstream" + git remote add upstream https://github.com/sendgrid/sendgrid-java + ``` + + > Don't forget to replace *your_username* in the URL by your real GitHub username. + + 4. __Create a new topic branch__ (off the main project development branch) to + contain your feature, change, or fix: + +``` + git checkout -b +``` + + 5. __Commit your changes__ in logical chunks. Please adhere to these [git commit + message guidelines](http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html) + or your code is unlikely be merged into the main project. Use Git's + [interactive rebase](https://help.github.com/articles/interactive-rebase) + feature to tidy up your commits before making them public. Probably you will also have to create tests (if needed) or create or update the example code that demonstrates the functionality of this change to the code. + 6. __Locally merge (or rebase)__ the upstream development branch into your topic branch: + + ``` + git pull [--rebase] upstream master + ``` + + 7. __Push__ your topic branch up to your fork: + ``` + git push origin + ``` + 8. __[Open a Pull Request](https://help.github.com/articles/creating-a-pull-request/#changing-the-branch-range-and-destination-repository/)__ + with a clear title and description against the `master` branch. All tests must be passing before we will review the PR. + + ### Important notice + Before creating a pull request, make sure that you respect the repository's constraints regarding contributions. You can find them in the [CONTRIBUTING.md](./CONTRIBUTING.md) file. + ## Repositories with Open, Easy, Help Wanted, Issue Filters + * [Python SDK](https://github.com/sendgrid/sendgrid-python/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) +* [PHP SDK](https://github.com/sendgrid/sendgrid-php/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) +* [C# SDK](https://github.com/sendgrid/sendgrid-csharp/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) +* [Ruby SDK](https://github.com/sendgrid/sendgrid-ruby/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) +* [Node.js SDK](https://github.com/sendgrid/sendgrid-nodejs/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) +* [Java SDK](https://github.com/sendgrid/sendgrid-java/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) +* [Go SDK](https://github.com/sendgrid/sendgrid-go/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) +* [Python STMPAPI Client](https://github.com/sendgrid/smtpapi-python/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) +* [PHP STMPAPI Client](https://github.com/sendgrid/smtpapi-php/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) +* [C# STMPAPI Client](https://github.com/sendgrid/smtpapi-csharp/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) +* [Ruby STMPAPI Client](https://github.com/sendgrid/smtpapi-ruby/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) +* [Node.js STMPAPI Client](https://github.com/sendgrid/smtpapi-nodejs/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) +* [Java STMPAPI Client](https://github.com/sendgrid/smtpapi-java/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) +* [Go STMPAPI Client](https://github.com/sendgrid/smtpapi-go/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) +* [Python HTTP Client](https://github.com/sendgrid/python-http-client/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) +* [PHP HTTP Client](https://github.com/sendgrid/php-http-client/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) +* [C# HTTP Client](https://github.com/sendgrid/csharp-http-client/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) +* [Java HTTP Client](https://github.com/sendgrid/java-http-client/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) +* [Ruby HTTP Client](https://github.com/sendgrid/ruby-http-client/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) +* [Go HTTP Client](https://github.com/sendgrid/rest/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) +* [Node.js HTTP Client](https://github.com/sendgrid/nodejs-http-client/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) +* [Open Source Data Collector](https://github.com/sendgrid/open-source-library-data-collector/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) +* [Open API Definition](https://github.com/sendgrid/sendgrid-oai/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) +* [DX Automator](https://github.com/sendgrid/dx-automator/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) +* [Documentation](https://github.com/sendgrid/docs/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) \ No newline at end of file diff --git a/static/img/github-fork.png b/static/img/github-fork.png new file mode 100644 index 0000000000000000000000000000000000000000..6503be362193808dc19bce69d8ccdf518d9ef93f GIT binary patch literal 15189 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 Oll& Date: Tue, 18 Aug 2020 10:11:14 -0500 Subject: [PATCH 217/345] docs: clean up and reconcile first timers documentation --- first-timers.md => FIRST_TIMERS.md | 108 +++++++++--------- .../helpers/mail/objects/MailSettings.java | 6 +- 2 files changed, 58 insertions(+), 56 deletions(-) rename first-timers.md => FIRST_TIMERS.md (50%) diff --git a/first-timers.md b/FIRST_TIMERS.md similarity index 50% rename from first-timers.md rename to FIRST_TIMERS.md index 846100d7..47cf5425 100644 --- a/first-timers.md +++ b/FIRST_TIMERS.md @@ -1,56 +1,60 @@ -# How To Contribute to SendGrid Repositories via GitHub - Contributing to the SendGrid is easy! All you need to do is find an open issue (see the bottom of this page for a list of repositories containing open issues), fix it and submit a pull request. Once you have submitted your pull request, the team can easily review it before it is merged into the repository. - To make a pull request, follow these steps: - 1. Log into GitHub. If you do not already have a GitHub account, you will have to create one in order to submit a change. Click the Sign up link in the upper right-hand corner to create an account. Enter your username, password, and email address. If you are an employee of SendGrid, please use your full name with your GitHub account and enter SendGrid as your company so we can easily identify you. +# How To Contribute to Twilio SendGrid Repositories via GitHub +Contributing to the Twilio SendGrid repositories is easy! All you need to do is find an open issue (see the bottom of this page for a list of repositories containing open issues), fix it and submit a pull request. Once you have submitted your pull request, the team can easily review it before it is merged into the repository. + +To make a pull request, follow these steps: + +1. Log into GitHub. If you do not already have a GitHub account, you will have to create one in order to submit a change. Click the Sign up link in the upper right-hand corner to create an account. Enter your username, password, and email address. If you are an employee of Twilio SendGrid, please use your full name with your GitHub account and enter Twilio SendGrid as your company so we can easily identify you. - 2. __[Fork](https://help.github.com/fork-a-repo/)__ the [sendgrid-java](https://github.com/sendgrid/sendgrid-java) repository: - - - - 3. __Clone__ your fork via the following commands: - - ``` - # Clone your fork of the repo into the current directory - git clone https://github.com/your_username/sendgrid-java - # Navigate to the newly cloned directory - cd sendgrid-java - # Assign the original repo to a remote called "upstream" - git remote add upstream https://github.com/sendgrid/sendgrid-java - ``` - - > Don't forget to replace *your_username* in the URL by your real GitHub username. - - 4. __Create a new topic branch__ (off the main project development branch) to - contain your feature, change, or fix: - -``` - git checkout -b -``` - - 5. __Commit your changes__ in logical chunks. Please adhere to these [git commit - message guidelines](http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html) - or your code is unlikely be merged into the main project. Use Git's - [interactive rebase](https://help.github.com/articles/interactive-rebase) - feature to tidy up your commits before making them public. Probably you will also have to create tests (if needed) or create or update the example code that demonstrates the functionality of this change to the code. - 6. __Locally merge (or rebase)__ the upstream development branch into your topic branch: - - ``` - git pull [--rebase] upstream master - ``` - - 7. __Push__ your topic branch up to your fork: - ``` - git push origin - ``` - 8. __[Open a Pull Request](https://help.github.com/articles/creating-a-pull-request/#changing-the-branch-range-and-destination-repository/)__ - with a clear title and description against the `master` branch. All tests must be passing before we will review the PR. - - ### Important notice - Before creating a pull request, make sure that you respect the repository's constraints regarding contributions. You can find them in the [CONTRIBUTING.md](./CONTRIBUTING.md) file. - ## Repositories with Open, Easy, Help Wanted, Issue Filters - * [Python SDK](https://github.com/sendgrid/sendgrid-python/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) +2. __[Fork](https://help.github.com/fork-a-repo/)__ the [sendgrid-java](https://github.com/sendgrid/sendgrid-java) repository: + + + +3. __Clone__ your fork via the following commands: + +```bash +# Clone your fork of the repo into the current directory +git clone https://github.com/your_username/sendgrid-java +# Navigate to the newly cloned directory +cd sendgrid-java +# Assign the original repo to a remote called "upstream" +git remote add upstream https://github.com/sendgrid/sendgrid-java +``` + +> Don't forget to replace *your_username* in the URL by your real GitHub username. + +4. __Create a new topic branch__ (off the main project development branch) to contain your feature, change, or fix: + +```bash +git checkout -b +``` + +5. __Commit your changes__ in logical chunks. + +Please adhere to these [git commit message guidelines](http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html) or your code is unlikely be merged into the main project. Use Git's [interactive rebase](https://help.github.com/articles/interactive-rebase) feature to tidy up your commits before making them public. Probably you will also have to create tests (if needed) or create or update the example code that demonstrates the functionality of this change to the code. + +6. __Locally merge (or rebase)__ the upstream development branch into your topic branch: + +```bash +git pull [--rebase] upstream main +``` + +7. __Push__ your topic branch up to your fork: + +```bash +git push origin +``` + +8. __[Open a Pull Request](https://help.github.com/articles/creating-a-pull-request/#changing-the-branch-range-and-destination-repository/)__ with a clear title and description against the `main` branch. All tests must be passing before we will review the PR. + +## Important notice + +Before creating a pull request, make sure that you respect the repository's constraints regarding contributions. You can find them in the [CONTRIBUTING.md](CONTRIBUTING.md) file. + +## Repositories with Open, Easy, Help Wanted, Issue Filters + +* [Python SDK](https://github.com/sendgrid/sendgrid-python/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) * [PHP SDK](https://github.com/sendgrid/sendgrid-php/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) * [C# SDK](https://github.com/sendgrid/sendgrid-csharp/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) * [Ruby SDK](https://github.com/sendgrid/sendgrid-ruby/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) @@ -70,8 +74,6 @@ * [Java HTTP Client](https://github.com/sendgrid/java-http-client/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) * [Ruby HTTP Client](https://github.com/sendgrid/ruby-http-client/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) * [Go HTTP Client](https://github.com/sendgrid/rest/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) -* [Node.js HTTP Client](https://github.com/sendgrid/nodejs-http-client/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) -* [Open Source Data Collector](https://github.com/sendgrid/open-source-library-data-collector/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) * [Open API Definition](https://github.com/sendgrid/sendgrid-oai/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) * [DX Automator](https://github.com/sendgrid/dx-automator/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) -* [Documentation](https://github.com/sendgrid/docs/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) \ No newline at end of file +* [Documentation](https://github.com/sendgrid/docs/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/MailSettings.java b/src/main/java/com/sendgrid/helpers/mail/objects/MailSettings.java index bd239880..d83a56b6 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/MailSettings.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/MailSettings.java @@ -59,7 +59,7 @@ public void setBypassListManagement(Setting bypassListManagement) { } /** - * Get the the footer settings that you would like included on every email. + * Get the footer settings that you would like included on every email. * * @return the setting. */ @@ -70,7 +70,7 @@ public FooterSetting getFooterSetting() { } /** - * Set the the footer settings that you would like included on every email. + * Set the footer settings that you would like included on every email. * * @param footerSetting the setting. */ @@ -183,4 +183,4 @@ public boolean equals(Object obj) { } return true; } -} \ No newline at end of file +} From cec18b0563b576e3d4602e737b9b3555a2840705 Mon Sep 17 00:00:00 2001 From: Twilio Date: Wed, 19 Aug 2020 18:54:22 +0000 Subject: [PATCH 218/345] [Librarian] Version Bump --- CHANGELOG.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 48fafd67..723ef727 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,18 @@ # Change Log All notable changes to this project will be documented in this file. +[2020-08-19] Version 4.6.4 +-------------------------- +**Library - Docs** +- [PR #491](https://github.com/sendgrid/sendgrid-java/pull/491): add contribution guide for first-timers. Thanks to [@daniloff200](https://github.com/daniloff200)! + +**Library - Test** +- [PR #496](https://github.com/sendgrid/sendgrid-java/pull/496): Add spotbugs and checkstyle maven plugins for Travis CI. Thanks to [@rosariopfernandes](https://github.com/rosariopfernandes)! + +**Library - Chore** +- [PR #644](https://github.com/sendgrid/sendgrid-java/pull/644): update GitHub branch references to use HEAD. Thanks to [@thinkingserious](https://github.com/thinkingserious)! + + [2020-08-05] Version 4.6.3 -------------------------- **Library - Chore** From c46491045d1da79deaca339259233a7a4c08b947 Mon Sep 17 00:00:00 2001 From: Twilio Date: Wed, 19 Aug 2020 19:52:02 +0000 Subject: [PATCH 219/345] Release 4.6.4 --- CONTRIBUTING.md | 2 +- README.md | 8 ++++---- pom.xml | 8 ++++---- src/main/java/com/sendgrid/BaseInterface.java | 2 +- src/test/java/com/sendgrid/SendGridTest.java | 2 +- 5 files changed, 11 insertions(+), 11 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 9ba321ae..b0c84bed 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -101,7 +101,7 @@ touch Example.java Add the example you want to test to Example.java, including the headers at the top of the file. ``` bash -javac -classpath ../repo/com/sendgrid/4.6.3/sendgrid-4.6.3-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.6.3/sendgrid-4.6.3-jar.jar:. Example +javac -classpath ../repo/com/sendgrid/4.6.4/sendgrid-4.6.4-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.6.4/sendgrid-4.6.4-jar.jar:. Example ``` diff --git a/README.md b/README.md index 5a575570..60b09197 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ **NEW:** Subscribe to email [notifications](https://dx.sendgrid.com/newsletter/java) for releases and breaking changes. -**The default branch name for this repository has been changed to `main` as of 4.6.3.** +**The default branch name for this repository has been changed to `main` as of 4.6.4.** **This library allows you to quickly and easily use the Twilio SendGrid Web API v3 via Java.** @@ -41,7 +41,7 @@ We appreciate your continued support, thank you! ## Prerequisites - Java 8 or 11 -- The Twilio SendGrid service, starting at the [free level](https://sendgrid.com/free?source=sendgrid-java) to send up to 4.6.3 emails for the first 30 days, then send 100 emails/day free forever or check out [our pricing](https://sendgrid.com/pricing?source=sendgrid-java). +- The Twilio SendGrid service, starting at the [free level](https://sendgrid.com/free?source=sendgrid-java) to send up to 4.6.4 emails for the first 30 days, then send 100 emails/day free forever or check out [our pricing](https://sendgrid.com/pricing?source=sendgrid-java). ## Setup Environment Variables @@ -69,7 +69,7 @@ Add the following to your build.gradle file in the root of your project. ... dependencies { ... - implementation 'com.sendgrid:sendgrid-java:4.6.3' + implementation 'com.sendgrid:sendgrid-java:4.6.4' } repositories { @@ -88,7 +88,7 @@ mvn install You can just drop the jar file in. It's a fat jar - it has all the dependencies built in. -[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.6.3/sendgrid-java.jar) +[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.6.4/sendgrid-java.jar) ## Dependencies diff --git a/pom.xml b/pom.xml index f91a2e6e..a5498ec4 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ com.sendgrid sendgrid-java Twilio SendGrid Java helper library - 4.6.3 + 4.6.4 This Java module allows you to quickly and easily send emails through Twilio SendGrid using Java. https://github.com/sendgrid/sendgrid-java @@ -26,7 +26,7 @@ https://github.com/sendgrid/sendgrid-java scm:git:git@github.com:sendgrid/sendgrid-java.git scm:git:git@github.com:sendgrid/sendgrid-java.git - 4.6.3 + 4.6.4 @@ -286,7 +286,7 @@ com.sendgrid java-http-client - 4.3.4 + 4.3.5 com.fasterxml.jackson.core @@ -330,4 +330,4 @@ - + \ No newline at end of file diff --git a/src/main/java/com/sendgrid/BaseInterface.java b/src/main/java/com/sendgrid/BaseInterface.java index bf3e1957..9758f5d8 100644 --- a/src/main/java/com/sendgrid/BaseInterface.java +++ b/src/main/java/com/sendgrid/BaseInterface.java @@ -11,7 +11,7 @@ */ public abstract class BaseInterface implements SendGridAPI { - private static final String VERSION = "4.6.3"; + private static final String VERSION = "4.6.4"; private static final String USER_AGENT = "sendgrid/" + VERSION + ";java"; private static final int RATE_LIMIT_RESPONSE_CODE = 429; diff --git a/src/test/java/com/sendgrid/SendGridTest.java b/src/test/java/com/sendgrid/SendGridTest.java index b1f88f7a..1092fd07 100644 --- a/src/test/java/com/sendgrid/SendGridTest.java +++ b/src/test/java/com/sendgrid/SendGridTest.java @@ -43,7 +43,7 @@ public void testConstructWithClient() throws IOException { @Test public void testLibraryVersion() { SendGrid sg = new SendGrid(SENDGRID_API_KEY); - Assert.assertEquals(sg.getLibraryVersion(), "4.6.3"); + Assert.assertEquals(sg.getLibraryVersion(), "4.6.4"); } @Test From 20f389f796dcecb723633551fb0081cea33ad505 Mon Sep 17 00:00:00 2001 From: Sam Harrison Date: Mon, 24 Aug 2020 09:57:48 -0500 Subject: [PATCH 220/345] docs: remove roadmap/milestone sections for CONTRIBUTING and README --- CONTRIBUTING.md | 3 --- README.md | 6 ------ 2 files changed, 9 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index b0c84bed..33c41a89 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -18,9 +18,6 @@ Hello! Thank you for choosing to help contribute to one of the Twilio SendGrid o - [Creating a Pull Request](#creating-a-pull-request) - [Code Reviews](#code-reviews) - -We use [Milestones](https://github.com/sendgrid/sendgrid-java/milestones) to help define current roadmaps, please feel free to grab an issue from the current milestone. Please indicate that you have begun work on it to avoid collisions. Once a PR is made, community review, comments, suggestions and additional PRs are welcomed and encouraged. - There are a few ways to contribute, which we'll enumerate below: diff --git a/README.md b/README.md index 60b09197..e71eb696 100644 --- a/README.md +++ b/README.md @@ -29,7 +29,6 @@ We appreciate your continued support, thank you! * [Usage](#usage) * [Use Cases](#use-cases) * [Announcements](#announcements) -* [Roadmap](#roadmap) * [How to Contribute](#contribute) * [Troubleshooting](#troubleshooting) * [About](#about) @@ -207,11 +206,6 @@ Please see our announcement regarding [breaking changes](https://github.com/send All updates to this library are documented in our [CHANGELOG](CHANGELOG.md) and [releases](https://github.com/sendgrid/sendgrid-java/releases). You may also subscribe to email [release notifications](https://dx.sendgrid.com/newsletter/java) for releases and breaking changes. - -# Roadmap - -If you are interested in the future direction of this project, please take a look at our open [issues](https://github.com/sendgrid/sendgrid-java/issues) and [pull requests](https://github.com/sendgrid/sendgrid-java/pulls). We would love to hear your feedback. - # How to Contribute From 9e3cf6eda6a33529d778291d665a2487cd113607 Mon Sep 17 00:00:00 2001 From: Michael Vinicio Date: Thu, 27 Aug 2020 09:14:43 -0600 Subject: [PATCH 221/345] doc: Run *.md documents through Grammer.ly (#477) --- CHANGELOG.md | 10 +- CONTRIBUTING.md | 2 +- TROUBLESHOOTING.md | 4 +- USAGE.md | 482 ++++++++++++++++++++++----------------------- USE_CASES.md | 4 +- 5 files changed, 251 insertions(+), 251 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 723ef727..0728a93f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -152,7 +152,7 @@ all packages were update to match class location -- BIG thanks to [Bojan Trajkov ## [4.2.1] - 2018-05-08 ### Security Fix -- Update to latest Jackson recommended dependency, based on [this article](https://medium.com/@cowtowncoder/on-jackson-cves-dont-panic-here-is-what-you-need-to-know-54cd0d6e8062). +- Update to the latest Jackson recommended dependency, based on [this article](https://medium.com/@cowtowncoder/on-jackson-cves-dont-panic-here-is-what-you-need-to-know-54cd0d6e8062). ## [4.2.0] - 2018-05-04 ### Added @@ -196,7 +196,7 @@ all packages were update to match class location -- BIG thanks to [Bojan Trajkov ## [4.0.0] - 2017-04-18 ### BREAKING CHANGE -- PR #162 Update java http client dependency to [4.1.0 from 2.3.4](https://github.com/sendgrid/java-http-client/releases) +- PR #162 Update java HTTP client dependency to [4.1.0 from 2.3.4](https://github.com/sendgrid/java-http-client/releases) - BIG thanks to [Diego Camargo](https://github.com/belfazt) for the pull request! - The breaking change is that variables that were public are now private and accessible only via getters and setters - The `Request` object attributes are now only accessible through getters/setters @@ -225,7 +225,7 @@ request.addQueryParam("limit", "1"); ## [3.2.1] - 2017-04-13 ### Added - PR #175 -- Simplified `makeCall()` method. +- Simplified method `makeCall()`. - BIG thanks to [Rafał Wrzeszcz](https://github.com/rafalwrzeszcz) for the pull request! ## [3.2.0] - 2017-03-22 @@ -237,7 +237,7 @@ request.addQueryParam("limit", "1"); ## [3.1.0] - 2016-10-11 ### Added - PR #158, Solves #138 -- [Enhancement] allow using custom Client, http proxy support +- [Enhancement] allow using custom Client, HTTP proxy support - BIG thanks to [David Maicher](https://github.com/dmaicher) for the pull request! ## [3.0.9] - 2016-08-24 @@ -273,7 +273,7 @@ request.addQueryParam("limit", "1"); ## [3.0.4] - 2016-07-19 ### Fixed -- [Fix for issue #120](https://github.com/sendgrid/sendgrid-java/issues/120): Unsupported Media Type if subject has letters with accent (like 'é' ) +- [Fix for issue #120](https://github.com/sendgrid/sendgrid-java/issues/120): Unsupported Media Type if the subject has letters with an accent (like 'é' ) - Updated [java-http-client](https://github.com/sendgrid/java-http-client) dependency to [2.3.2](https://github.com/sendgrid/java-http-client/releases/tag/v2.3.2) ## [3.0.3] - 2016-07-12 diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 33c41a89..dbfb552d 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -40,7 +40,7 @@ A software bug is a demonstrable issue in the code base. In order for us to diag Before you decide to create a new issue, please try the following: 1. Check the GitHub issues tab if the identified issue has already been reported, if so, please add a +1 to the existing post. -2. Update to the latest version of this code and check if issue has already been fixed +2. Update to the latest version of this code and check if the issue has already been fixed 3. Copy and fill in the Bug Report Template we have provided below ### Please use our Bug Report Template diff --git a/TROUBLESHOOTING.md b/TROUBLESHOOTING.md index bc3b1361..02fba251 100644 --- a/TROUBLESHOOTING.md +++ b/TROUBLESHOOTING.md @@ -60,7 +60,7 @@ You can just drop the jar file in. It's a fat jar - it has all the dependencies ## Versions -We follow the MAJOR.MINOR.PATCH versioning scheme as described by [SemVer.org](http://semver.org). Therefore, we recommend that you always pin (or vendor) the particular version you are working with to your code and never auto-update to the latest version. Especially when there is a MAJOR point release, since that is guaranteed to be a breaking change. Changes are documented in the [CHANGELOG](CHANGELOG.md) and [releases](https://github.com/sendgrid/sendgrid-java/releases) section. +We follow the MAJOR.MINOR.PATCH versioning scheme as described by [SemVer.org](http://semver.org). Therefore, we recommend that you always pin (or vendor) the particular version you are working with your code and never auto-update to the latest version. Especially when there is a MAJOR point release since that is guaranteed to be a breaking change. Changes are documented in the [CHANGELOG](CHANGELOG.md) and [releases](https://github.com/sendgrid/sendgrid-java/releases) section. ## Environment Variables and Your Twilio SendGrid API Key @@ -75,7 +75,7 @@ becomes `"SENDGRID_API_KEY"` -In the first case SENDGRID_API_KEY is in reference to the name of the environment variable, while the second case references the actual Twilio SendGrid API Key. +In the first case, SENDGRID_API_KEY is in reference to the name of the environment variable, while the second case references the actual Twilio SendGrid API Key. ## Using the Package Manager diff --git a/USAGE.md b/USAGE.md index 6b0529dc..08487720 100644 --- a/USAGE.md +++ b/USAGE.md @@ -77,7 +77,7 @@ For more information, please see our [User Guide](http://sendgrid.com/docs/User_ } catch (IOException ex) { throw ex; } - ``` +``` ## Add one or more IPs to the whitelist **This endpoint allows you to add one or more IP addresses to your IP whitelist.** @@ -105,7 +105,7 @@ For more information, please see our [User Guide](http://sendgrid.com/docs/User_ } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve a list of currently whitelisted IPs **This endpoint allows you to retrieve a list of IP addresses that are currently whitelisted.** @@ -130,7 +130,7 @@ For more information, please see our [User Guide](http://sendgrid.com/docs/User_ } catch (IOException ex) { throw ex; } - ``` +``` ## Remove one or more IPs from the whitelist **This endpoint allows you to remove one or more IPs from your IP whitelist.** @@ -158,7 +158,7 @@ For more information, please see our [User Guide](http://sendgrid.com/docs/User_ } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve a specific whitelisted IP **This endpoint allows you to retrieve a specific IP address that has been whitelisted.** @@ -185,7 +185,7 @@ For more information, please see our [User Guide](http://sendgrid.com/docs/User_ } catch (IOException ex) { throw ex; } - ``` +``` ## Remove a specific IP from the whitelist **This endpoint allows you to remove a specific IP address from your IP whitelist.** @@ -212,7 +212,7 @@ For more information, please see our [User Guide](http://sendgrid.com/docs/User_ } catch (IOException ex) { throw ex; } - ``` +``` # ALERTS @@ -243,7 +243,7 @@ For more information about alerts, please see our [User Guide](https://sendgrid. } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve all alerts **This endpoint allows you to retrieve all of your alerts.** @@ -270,7 +270,7 @@ For more information about alerts, please see our [User Guide](https://sendgrid. } catch (IOException ex) { throw ex; } - ``` +``` ## Update an alert **This endpoint allows you to update an alert.** @@ -298,7 +298,7 @@ For more information about alerts, please see our [User Guide](https://sendgrid. } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve a specific alert **This endpoint allows you to retrieve a specific alert.** @@ -325,7 +325,7 @@ For more information about alerts, please see our [User Guide](https://sendgrid. } catch (IOException ex) { throw ex; } - ``` +``` ## Delete an alert **This endpoint allows you to delete an alert.** @@ -352,7 +352,7 @@ For more information about alerts, please see our [User Guide](https://sendgrid. } catch (IOException ex) { throw ex; } - ``` +``` # API KEYS @@ -360,7 +360,7 @@ For more information about alerts, please see our [User Guide](https://sendgrid. **This endpoint allows you to create a new random API Key for the user.** -A JSON request body containing a "name" property is required. If number of maximum keys is reached, HTTP 403 will be returned. +A JSON request body containing a "name" property is required. If the number of maximum keys is reached, HTTP 403 will be returned. There is a limit of 100 API Keys on your account. @@ -385,7 +385,7 @@ See the [API Key Permissions List](https://sendgrid.com/docs/API_Reference/Web_A } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve all API Keys belonging to the authenticated user **This endpoint allows you to retrieve all API Keys that belong to the authenticated user.** @@ -409,13 +409,13 @@ The API Keys feature allows customers to be able to generate an API Key credenti } catch (IOException ex) { throw ex; } - ``` +``` ## Update the name & scopes of an API Key **This endpoint allows you to update the name and scopes of a given API key.** A JSON request body with a "name" property is required. -Most provide the list of all the scopes an api key should have. +Most provide the list of all the scopes an API key should have. The API Keys feature allows customers to be able to generate an API Key credential which can be used for authentication with the SendGrid v3 Web API or the [Mail API Endpoint](https://sendgrid.com/docs/API_Reference/Web_API/mail.html). @@ -437,7 +437,7 @@ The API Keys feature allows customers to be able to generate an API Key credenti } catch (IOException ex) { throw ex; } - ``` +``` ## Update API keys **This endpoint allows you to update the name of an existing API Key.** @@ -469,10 +469,10 @@ The API Keys feature allows customers to be able to generate an API Key credenti } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve an existing API Key -**This endpoint allows you to retrieve a single api key.** +**This endpoint allows you to retrieve a single API key.** If the API Key ID does not exist an HTTP 404 will be returned. @@ -492,12 +492,12 @@ If the API Key ID does not exist an HTTP 404 will be returned. } catch (IOException ex) { throw ex; } - ``` +``` ## Delete API keys **This endpoint allows you to revoke an existing API Key.** -Authentications using this API Key will fail after this request is made, with some small propagation delay.If the API Key ID does not exist an HTTP 404 will be returned. +Authentications using this API Key will fail after this request is made, with some small propagation delay. If the API Key ID does not exist an HTTP 404 will be returned. The API Keys feature allows customers to be able to generate an API Key credential which can be used for authentication with the Twilio SendGrid v3 Web API or the [Mail API Endpoint](https://sendgrid.com/docs/API_Reference/Web_API/mail.html). @@ -523,7 +523,7 @@ The API Keys feature allows customers to be able to generate an API Key credenti } catch (IOException ex) { throw ex; } - ``` +``` # ASM @@ -554,7 +554,7 @@ Each user can create up to 25 different suppression groups. } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve information about multiple suppression groups **This endpoint allows you to retrieve information about multiple suppression groups.** @@ -582,7 +582,7 @@ Suppression groups, or [unsubscribe groups](https://sendgrid.com/docs/API_Refere } catch (IOException ex) { throw ex; } - ``` +``` ## Update a suppression group. **This endpoint allows you to update or change a suppression group.** @@ -610,7 +610,7 @@ Each user can create up to 25 different suppression groups. } catch (IOException ex) { throw ex; } - ``` +``` ## Get information on a single suppression group. **This endpoint allows you to retrieve a single suppression group.** @@ -637,7 +637,7 @@ Each user can create up to 25 different suppression groups. } catch (IOException ex) { throw ex; } - ``` +``` ## Delete a suppression group. **This endpoint allows you to delete a suppression group.** @@ -666,7 +666,7 @@ Each user can create up to 25 different suppression groups. } catch (IOException ex) { throw ex; } - ``` +``` ## Add suppressions to a suppression group **This endpoint allows you to add email addresses to an unsubscribe group.** @@ -692,7 +692,7 @@ Suppressions are recipient email addresses that are added to [unsubscribe groups } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve all suppressions for a suppression group **This endpoint allows you to retrieve all suppressed email addresses belonging to the given group.** @@ -715,7 +715,7 @@ Suppressions are recipient email addresses that are added to [unsubscribe groups } catch (IOException ex) { throw ex; } - ``` +``` ## Search for suppressions within a group **This endpoint allows you to search a suppression group for multiple suppressions.** @@ -741,7 +741,7 @@ Suppressions are a list of email addresses that will not receive content sent un } catch (IOException ex) { throw ex; } - ``` +``` ## Delete a suppression from a suppression group **This endpoint allows you to remove a suppressed email address from the given suppression group.** @@ -764,7 +764,7 @@ Suppressions are recipient email addresses that are added to [unsubscribe groups } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve all suppressions **This endpoint allows you to retrieve a list of all suppressions.** @@ -787,7 +787,7 @@ Suppressions are a list of email addresses that will not receive content sent un } catch (IOException ex) { throw ex; } - ``` +``` ## Add recipient addresses to the global suppression group. **This endpoint allows you to add one or more email addresses to the global suppressions group.** @@ -811,7 +811,7 @@ A global suppression (or global unsubscribe) is an email address of a recipient } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve a Global Suppression **This endpoint allows you to retrieve a global suppression. You can also use this endpoint to confirm if an email address is already globally suppressed.** @@ -836,7 +836,7 @@ A global suppression (or global unsubscribe) is an email address of a recipient } catch (IOException ex) { throw ex; } - ``` +``` ## Delete a Global Suppression **This endpoint allows you to remove an email address from the global suppressions group.** @@ -859,7 +859,7 @@ A global suppression (or global unsubscribe) is an email address of a recipient } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve all suppression groups for an email address **This endpoint returns the list of all groups that the given email address has been unsubscribed from.** @@ -882,7 +882,7 @@ Suppressions are a list of email addresses that will not receive content sent un } catch (IOException ex) { throw ex; } - ``` +``` # BROWSERS @@ -916,7 +916,7 @@ Advanced Stats provide a more in-depth view of your email statistics and the act } catch (IOException ex) { throw ex; } - ``` +``` # CAMPAIGNS @@ -926,7 +926,7 @@ Advanced Stats provide a more in-depth view of your email statistics and the act Our Marketing Campaigns API lets you create, manage, send, and schedule campaigns. -Note: In order to send or schedule the campaign, you will be required to provide a subject, sender ID, content (we suggest both html and plain text), and at least one list or segment ID. This information is not required when you create a campaign. +Note: In order to send or schedule the campaign, you will be required to provide a subject, sender ID, content (we suggest both HTML and plain text), and at least one list or segment ID. This information is not required when you create a campaign. For more information: @@ -949,7 +949,7 @@ For more information: } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve all Campaigns **This endpoint allows you to retrieve a list of all of your campaigns.** @@ -980,7 +980,7 @@ For more information: } catch (IOException ex) { throw ex; } - ``` +``` ## Update a Campaign Update a campaign. This is especially useful if you only set up the campaign using POST /campaigns, but didn't set many of the parameters. @@ -1006,7 +1006,7 @@ For more information: } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve a single campaign **This endpoint allows you to retrieve a specific campaign.** @@ -1033,7 +1033,7 @@ For more information: } catch (IOException ex) { throw ex; } - ``` +``` ## Delete a Campaign **This endpoint allows you to delete a specific campaign.** @@ -1060,7 +1060,7 @@ For more information: } catch (IOException ex) { throw ex; } - ``` +``` ## Update a Scheduled Campaign **This endpoint allows to you change the scheduled time and date for a campaign to be sent.** @@ -1086,7 +1086,7 @@ For more information: } catch (IOException ex) { throw ex; } - ``` +``` ## Schedule a Campaign **This endpoint allows you to schedule a specific date and time for your campaign to be sent.** @@ -1112,7 +1112,7 @@ For more information: } catch (IOException ex) { throw ex; } - ``` +``` ## View Scheduled Time of a Campaign **This endpoint allows you to retrieve the date and time that the given campaign has been scheduled to be sent.** @@ -1137,7 +1137,7 @@ For more information: } catch (IOException ex) { throw ex; } - ``` +``` ## Unschedule a Scheduled Campaign **This endpoint allows you to unschedule a campaign that has already been scheduled to be sent.** @@ -1165,7 +1165,7 @@ For more information: } catch (IOException ex) { throw ex; } - ``` +``` ## Send a Campaign **This endpoint allows you to immediately send a campaign at the time you make the API call.** @@ -1192,7 +1192,7 @@ For more information: } catch (IOException ex) { throw ex; } - ``` +``` ## Send a Test Campaign **This endpoint allows you to send a test campaign.** @@ -1220,7 +1220,7 @@ For more information: } catch (IOException ex) { throw ex; } - ``` +``` # CATEGORIES @@ -1249,7 +1249,7 @@ Categories can help organize your email analytics by enabling you to tag emails } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve Email Statistics for Categories **This endpoint allows you to retrieve all of your email statistics for each of your categories.** @@ -1280,7 +1280,7 @@ Categories allow you to group your emails together according to broad topics tha } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve sums of email stats for each category [Needs: Stats object defined, has category ID?] **This endpoint allows you to retrieve the total sum of each email statistic for every category over the given date range.** @@ -1312,7 +1312,7 @@ Categories allow you to group your emails together according to broad topics tha } catch (IOException ex) { throw ex; } - ``` +``` # CLIENTS @@ -1343,7 +1343,7 @@ Advanced Stats provide a more in-depth view of your email statistics and the act } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve stats by a specific client type. **This endpoint allows you to retrieve your email statistics segmented by a specific client type.** @@ -1377,7 +1377,7 @@ Advanced Stats provide a more in-depth view of your email statistics and the act } catch (IOException ex) { throw ex; } - ``` +``` # CONTACTDB @@ -1404,7 +1404,7 @@ The contactdb is a database of your contacts for [Twilio SendGrid Marketing Camp } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve all custom fields **This endpoint allows you to retrieve all custom fields.** @@ -1427,7 +1427,7 @@ The contactdb is a database of your contacts for [Twilio SendGrid Marketing Camp } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve a Custom Field **This endpoint allows you to retrieve a custom field by ID.** @@ -1450,7 +1450,7 @@ The contactdb is a database of your contacts for [Twilio SendGrid Marketing Camp } catch (IOException ex) { throw ex; } - ``` +``` ## Delete a Custom Field **This endpoint allows you to delete a custom field by ID.** @@ -1473,7 +1473,7 @@ The contactdb is a database of your contacts for [Twilio SendGrid Marketing Camp } catch (IOException ex) { throw ex; } - ``` +``` ## Create a List **This endpoint allows you to create a list for your recipients.** @@ -1497,7 +1497,7 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve all lists **This endpoint allows you to retrieve all of your recipient lists. If you don't have any lists, an empty array will be returned.** @@ -1520,7 +1520,7 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co } catch (IOException ex) { throw ex; } - ``` +``` ## Delete Multiple lists **This endpoint allows you to delete multiple recipient lists.** @@ -1544,7 +1544,7 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co } catch (IOException ex) { throw ex; } - ``` +``` ## Update a List **This endpoint allows you to update the name of one of your recipient lists.** @@ -1569,7 +1569,7 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve a single list This endpoint allows you to retrieve a single recipient list. @@ -1592,7 +1592,7 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co } catch (IOException ex) { throw ex; } - ``` +``` ## Delete a List **This endpoint allows you to delete a specific recipient list with the given ID.** @@ -1616,7 +1616,7 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co } catch (IOException ex) { throw ex; } - ``` +``` ## Add Multiple Recipients to a List **This endpoint allows you to add multiple recipients to a list.** @@ -1642,7 +1642,7 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve all recipients on a List **This endpoint allows you to retrieve all recipients on the list with the given ID.** @@ -1667,7 +1667,7 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co } catch (IOException ex) { throw ex; } - ``` +``` ## Add a Single Recipient to a List **This endpoint allows you to add a single recipient to a list.** @@ -1690,7 +1690,7 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co } catch (IOException ex) { throw ex; } - ``` +``` ## Delete a Single Recipient from a Single List **This endpoint allows you to delete a single recipient from a list.** @@ -1714,7 +1714,7 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co } catch (IOException ex) { throw ex; } - ``` +``` ## Update Recipient **This endpoint allows you to update one or more recipients.** @@ -1742,7 +1742,7 @@ The contactdb is a database of your contacts for [Twilio SendGrid Marketing Camp } catch (IOException ex) { throw ex; } - ``` +``` ## Add recipients **This endpoint allows you to add a Marketing Campaigns recipient.** @@ -1768,7 +1768,7 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve recipients **This endpoint allows you to retrieve all of your Marketing Campaigns recipients.** @@ -1796,10 +1796,10 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co } catch (IOException ex) { throw ex; } - ``` +``` ## Delete Recipient -**This endpoint allows you to deletes one or more recipients.** +**This endpoint allows you to delete one or more recipients.** The body of an API call to this endpoint must include an array of recipient IDs of the recipients you want to delete. @@ -1822,7 +1822,7 @@ The contactdb is a database of your contacts for [Twilio SendGrid Marketing Camp } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve the count of billable recipients **This endpoint allows you to retrieve the number of Marketing Campaigns recipients that you will be billed for.** @@ -1847,7 +1847,7 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve a Count of Recipients **This endpoint allows you to retrieve the total number of Marketing Campaigns recipients.** @@ -1870,7 +1870,7 @@ The contactdb is a database of your contacts for [Twilio SendGrid Marketing Camp } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve recipients matching search criteria **This endpoint allows you to perform a search on all of your Marketing Campaigns recipients.** @@ -1878,11 +1878,11 @@ The contactdb is a database of your contacts for [Twilio SendGrid Marketing Camp field_name: * is a variable that is substituted for your actual custom field name from your recipient. -* Text fields must be url-encoded. Date fields are searchable only by unix timestamp (e.g. 2/2/2015 becomes 1422835200) +* Text fields must be URL-encoded. Date fields are searchable only by Unix timestamp (e.g. 2/2/2015 becomes 1422835200) * If field_name is a 'reserved' date field, such as created_at or updated_at, the system will internally convert -your epoch time to a date range encompassing the entire day. For example, an epoch time of 1422835600 converts to -Mon, 02 Feb 2015 00:06:40 GMT, but internally the system will search from Mon, 02 Feb 2015 00:00:00 GMT through -Mon, 02 Feb 2015 23:59:59 GMT. + your epoch time to a date range encompassing the entire day. For example, an epoch time of 1422835600 converts to + Mon, 02 Feb 2015 00:06:40 GMT, but internally the system will search from Mon, 02 Feb 2015 00:00:00 GMT through + Mon, 02 Feb 2015 23:59:59 GMT. The contactdb is a database of your contacts for [Twilio SendGrid Marketing Campaigns](https://sendgrid.com/docs/User_Guide/Marketing_Campaigns/index.html). @@ -1903,7 +1903,7 @@ The contactdb is a database of your contacts for [Twilio SendGrid Marketing Camp } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve a single recipient **This endpoint allows you to retrieve a single recipient by ID from your contact database.** @@ -1926,7 +1926,7 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co } catch (IOException ex) { throw ex; } - ``` +``` ## Delete a Recipient **This endpoint allows you to delete a single recipient with the given ID from your contact database.** @@ -1949,7 +1949,7 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve the lists that a recipient is on **This endpoint allows you to retrieve the lists that a given recipient belongs to.** @@ -1974,7 +1974,7 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve reserved fields **This endpoint allows you to list all fields that are reserved and can't be used for custom field names.** @@ -1997,7 +1997,7 @@ The contactdb is a database of your contacts for [Twilio SendGrid Marketing Camp } catch (IOException ex) { throw ex; } - ``` +``` ## Create a Segment **This endpoint allows you to create a segment.** @@ -2041,7 +2041,7 @@ For more information about segments in Marketing Campaigns, please see our [User } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve all segments **This endpoint allows you to retrieve all of your segments.** @@ -2066,7 +2066,7 @@ For more information about segments in Marketing Campaigns, please see our [User } catch (IOException ex) { throw ex; } - ``` +``` ## Update a segment **This endpoint allows you to update a segment.** @@ -2093,7 +2093,7 @@ For more information about segments in Marketing Campaigns, please see our [User } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve a segment **This endpoint allows you to retrieve a single segment with the given ID.** @@ -2119,10 +2119,10 @@ For more information about segments in Marketing Campaigns, please see our [User } catch (IOException ex) { throw ex; } - ``` +``` ## Delete a segment -**This endpoint allows you to delete a segment from your recipients database.** +**This endpoint allows you to delete a segment from your recipient's database.** You also have the option to delete all the contacts from your Marketing Campaigns recipient database who were in this segment. @@ -2147,7 +2147,7 @@ For more information about segments in Marketing Campaigns, please see our [User } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve recipients on a segment **This endpoint allows you to retrieve all of the recipients in a segment with the given ID.** @@ -2174,7 +2174,7 @@ For more information about segments in Marketing Campaigns, please see our [User } catch (IOException ex) { throw ex; } - ``` +``` # DEVICES @@ -2189,8 +2189,8 @@ For more information about segments in Marketing Campaigns, please see our [User |---|---|---| | Desktop | Email software on desktop computer. | I.E., Outlook, Sparrow, or Apple Mail. | | Webmail | A web-based email client. | I.E., Yahoo, Google, AOL, or Outlook.com. | -| Phone | A smart phone. | iPhone, Android, Blackberry, etc. -| Tablet | A tablet computer. | iPad, android based tablet, etc. | +| Phone | A smartphone. | iPhone, Android, Blackberry, etc. +| Tablet | A tablet computer. | iPad, Android based tablet, etc. | | Other | An unrecognized device. | Advanced Stats provide a more in-depth view of your email statistics and the actions taken by your recipients. You can segment these statistics by geographic location, device type, client type, browser, and mailbox provider. For more information about statistics, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Statistics/index.html). @@ -2216,7 +2216,7 @@ Advanced Stats provide a more in-depth view of your email statistics and the act } catch (IOException ex) { throw ex; } - ``` +``` # GEO @@ -2250,7 +2250,7 @@ Advanced Stats provide a more in-depth view of your email statistics and the act } catch (IOException ex) { throw ex; } - ``` +``` # IPS @@ -2258,7 +2258,7 @@ Advanced Stats provide a more in-depth view of your email statistics and the act **This endpoint allows you to retrieve a list of all assigned and unassigned IPs.** -Response includes warm up status, pools, assigned subusers, and authorization info. The start_date field corresponds to when warmup started for that IP. +The response includes warm-up status, pools, assigned subusers, and authorization info. The start_date field corresponds to when warmup started for that IP. A single IP address or a range of IP addresses may be dedicated to an account in order to send email for multiple domains. The reputation of this IP is based on the aggregate performance of all the senders who use it. @@ -2283,7 +2283,7 @@ A single IP address or a range of IP addresses may be dedicated to an account in } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve all assigned IPs **This endpoint allows you to retrieve only assigned IP addresses.** @@ -2306,7 +2306,7 @@ A single IP address or a range of IP addresses may be dedicated to an account in } catch (IOException ex) { throw ex; } - ``` +``` ## Create an IP pool. **This endpoint allows you to create an IP pool.** @@ -2336,7 +2336,7 @@ If an IP pool is NOT specified for an email, it will use any IP available, inclu } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve all IP pools. **This endpoint allows you to retrieve all of your IP pools.** @@ -2363,7 +2363,7 @@ If an IP pool is NOT specified for an email, it will use any IP available, inclu } catch (IOException ex) { throw ex; } - ``` +``` ## Update an IP pools name. **This endpoint allows you to update the name of an IP pool.** @@ -2391,7 +2391,7 @@ If an IP pool is NOT specified for an email, it will use any IP available, inclu } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve all IPs in a specified pool. **This endpoint allows you to list all of the IP addresses that are in a specific IP pool.** @@ -2418,7 +2418,7 @@ If an IP pool is NOT specified for an email, it will use any IP available, inclu } catch (IOException ex) { throw ex; } - ``` +``` ## Delete an IP pool. **This endpoint allows you to delete an IP pool.** @@ -2445,7 +2445,7 @@ If an IP pool is NOT specified for an email, it will use any IP available, inclu } catch (IOException ex) { throw ex; } - ``` +``` ## Add an IP address to a pool **This endpoint allows you to add an IP address to an IP pool.** @@ -2471,7 +2471,7 @@ A single IP address or a range of IP addresses may be dedicated to an account in } catch (IOException ex) { throw ex; } - ``` +``` ## Remove an IP address from a pool. **This endpoint allows you to remove an IP address from an IP pool.** @@ -2496,8 +2496,8 @@ A single IP address or a range of IP addresses may be dedicated to an account in } catch (IOException ex) { throw ex; } - ``` -## Add an IP to warmup +``` +## Add an IP to warm up **This endpoint allows you to enter an IP address into warmup mode.** @@ -2522,7 +2522,7 @@ For more general information about warming up IPs, please see our [Classroom](ht } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve all IPs currently in warmup **This endpoint allows you to retrieve all of your IP addresses that are currently warming up.** @@ -2547,7 +2547,7 @@ For more general information about warming up IPs, please see our [Classroom](ht } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve warmup status for a specific IP address **This endpoint allows you to retrieve the warmup status for a specific IP address.** @@ -2572,7 +2572,7 @@ For more general information about warming up IPs, please see our [Classroom](ht } catch (IOException ex) { throw ex; } - ``` +``` ## Remove an IP from warmup **This endpoint allows you to remove an IP address from warmup mode.** @@ -2597,7 +2597,7 @@ For more general information about warming up IPs, please see our [Classroom](ht } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve all IP pools an IP address belongs to **This endpoint allows you to see which IP pools a particular IP address has been added to.** @@ -2622,7 +2622,7 @@ A single IP address or a range of IP addresses may be dedicated to an account in } catch (IOException ex) { throw ex; } - ``` +``` # MAIL @@ -2630,7 +2630,7 @@ A single IP address or a range of IP addresses may be dedicated to an account in **This endpoint allows you to generate a new batch ID. This batch ID can be associated with scheduled sends via the mail/send endpoint.** -If you set the SMTPAPI header `batch_id`, it allows you to then associate multiple scheduled mail/send requests together with the same ID. Then at anytime up to 10 minutes before the schedule date, you can cancel all of the mail/send requests that have this batch ID by calling the Cancel Scheduled Send endpoint. +If you set the SMTPAPI header, `batch_id`, it allows you to then associate multiple scheduled mail/send requests together with the same ID. Then at any time up to 10 minutes before the scheduled date, you can cancel all of the mail/send requests that have this batch ID by calling the Cancel Scheduled Send endpoint. More Information: @@ -2652,12 +2652,12 @@ More Information: } catch (IOException ex) { throw ex; } - ``` +``` ## Validate batch ID **This endpoint allows you to validate a batch ID.** -If you set the SMTPAPI header `batch_id`, it allows you to then associate multiple scheduled mail/send requests together with the same ID. Then at anytime up to 10 minutes before the schedule date, you can cancel all of the mail/send requests that have this batch ID by calling the Cancel Scheduled Send endpoint. +If you set the SMTPAPI header, `batch_id`, it allows you to then associate multiple scheduled mail/send requests together with the same ID. Then at any time up to 10 minutes before the scheduled date, you can cancel all of the mail/send requests that have this batch ID by calling the Cancel Scheduled Send endpoint. More Information: @@ -2679,10 +2679,10 @@ More Information: } catch (IOException ex) { throw ex; } - ``` +``` ## v3 Mail Send -This endpoint allows you to send email over Twilio SendGrid's v3 Web API, the most recent version of our API. If you are looking for documentation about the v2 Mail Send endpoint, please see our [v2 API Reference](https://sendgrid.com/docs/API_Reference/Web_API/mail.html). +This endpoint allows you to send an email over Twilio SendGrid's v3 Web API, the most recent version of our API. If you are looking for documentation about the v2 Mail Send endpoint, please see our [v2 API Reference](https://sendgrid.com/docs/API_Reference/Web_API/mail.html). * Top level parameters are referred to as "global". * Individual fields within the personalizations array will override any other global, or message level, parameters that are defined outside of personalizations. @@ -2709,7 +2709,7 @@ This endpoint has a helper, check it out [here](src/main/java/com/sendgrid/helpe } catch (IOException ex) { throw ex; } - ``` +``` # MAIL SETTINGS @@ -2737,7 +2737,7 @@ Mail settings allow you to tell Twilio SendGrid specific things to do to every e } catch (IOException ex) { throw ex; } - ``` +``` ## Update address whitelist mail settings **This endpoint allows you to update your current email address whitelist settings.** @@ -2763,7 +2763,7 @@ Mail settings allow you to tell Twilio SendGrid specific things to do to every e } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve address whitelist mail settings **This endpoint allows you to retrieve your current email address whitelist settings.** @@ -2788,12 +2788,12 @@ Mail settings allow you to tell Twilio SendGrid specific things to do to every e } catch (IOException ex) { throw ex; } - ``` +``` ## Update BCC mail settings **This endpoint allows you to update your current BCC mail settings.** -When the BCC mail setting is enabled, Twilio SendGrid will automatically send a blind carbon copy (BCC) to an address for every email sent without adding that address to the header. Please note that only one email address may be entered in this field, if you wish to distribute BCCs to multiple addresses you will need to create a distribution group or use forwarding rules. +When the BCC mail setting is enabled, Twilio SendGrid will automatically send a blind carbon copy (BCC) to an address for every email sent without adding that address to the header. Please note that only one email address may be entered in this field if you wish to distribute BCCs to multiple addresses you will need to create a distribution group or use forwarding rules. Mail settings allow you to tell Twilio SendGrid specific things to do to every email that you send to your recipients over Twilio SendGrid's [Web API](https://sendgrid.com/docs/API_Reference/Web_API/mail.html) or [SMTP Relay](https://sendgrid.com/docs/API_Reference/SMTP_API/index.html). @@ -2814,12 +2814,12 @@ Mail settings allow you to tell Twilio SendGrid specific things to do to every e } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve all BCC mail settings **This endpoint allows you to retrieve your current BCC mail settings.** -When the BCC mail setting is enabled, Twilio SendGrid will automatically send a blind carbon copy (BCC) to an address for every email sent without adding that address to the header. Please note that only one email address may be entered in this field, if you wish to distribute BCCs to multiple addresses you will need to create a distribution group or use forwarding rules. +When the BCC mail setting is enabled, Twilio SendGrid will automatically send a blind carbon copy (BCC) to an address for every email sent without adding that address to the header. Please note that only one email address may be entered in this field if you wish to distribute BCCs to multiple addresses you will need to create a distribution group or use forwarding rules. Mail settings allow you to tell Twilio SendGrid specific things to do to every email that you send to your recipients over Twilio SendGrid's [Web API](https://sendgrid.com/docs/API_Reference/Web_API/mail.html) or [SMTP Relay](https://sendgrid.com/docs/API_Reference/SMTP_API/index.html). @@ -2839,7 +2839,7 @@ Mail settings allow you to tell Twilio SendGrid specific things to do to every e } catch (IOException ex) { throw ex; } - ``` +``` ## Update bounce purge mail settings **This endpoint allows you to update your current bounce purge settings.** @@ -2865,7 +2865,7 @@ Mail settings allow you to tell Twilio SendGrid specific things to do to every e } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve bounce purge mail settings **This endpoint allows you to retrieve your current bounce purge settings.** @@ -2890,7 +2890,7 @@ Mail settings allow you to tell Twilio SendGrid specific things to do to every e } catch (IOException ex) { throw ex; } - ``` +``` ## Update footer mail settings **This endpoint allows you to update your current Footer mail settings.** @@ -2916,7 +2916,7 @@ Mail settings allow you to tell Twilio SendGrid specific things to do to every e } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve footer mail settings **This endpoint allows you to retrieve your current Footer mail settings.** @@ -2941,7 +2941,7 @@ Mail settings allow you to tell Twilio SendGrid specific things to do to every e } catch (IOException ex) { throw ex; } - ``` +``` ## Update forward bounce mail settings **This endpoint allows you to update your current bounce forwarding mail settings.** @@ -2967,7 +2967,7 @@ Mail settings allow you to tell Twilio SendGrid specific things to do to every e } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve forward bounce mail settings **This endpoint allows you to retrieve your current bounce forwarding mail settings.** @@ -2992,7 +2992,7 @@ Mail settings allow you to tell Twilio SendGrid specific things to do to every e } catch (IOException ex) { throw ex; } - ``` +``` ## Update forward spam mail settings **This endpoint allows you to update your current Forward Spam mail settings.** @@ -3018,7 +3018,7 @@ Mail settings allow you to tell Twilio SendGrid specific things to do to every e } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve forward spam mail settings **This endpoint allows you to retrieve your current Forward Spam mail settings.** @@ -3043,7 +3043,7 @@ Mail settings allow you to tell Twilio SendGrid specific things to do to every e } catch (IOException ex) { throw ex; } - ``` +``` ## Update plain content mail settings **This endpoint allows you to update your current Plain Content mail settings.** @@ -3069,7 +3069,7 @@ Mail settings allow you to tell Twilio SendGrid specific things to do to every e } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve plain content mail settings **This endpoint allows you to retrieve your current Plain Content mail settings.** @@ -3094,7 +3094,7 @@ Mail settings allow you to tell Twilio SendGrid specific things to do to every e } catch (IOException ex) { throw ex; } - ``` +``` ## Update spam check mail settings **This endpoint allows you to update your current spam checker mail settings.** @@ -3120,7 +3120,7 @@ Mail settings allow you to tell Twilio SendGrid specific things to do to every e } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve spam check mail settings **This endpoint allows you to retrieve your current Spam Checker mail settings.** @@ -3145,7 +3145,7 @@ Mail settings allow you to tell Twilio SendGrid specific things to do to every e } catch (IOException ex) { throw ex; } - ``` +``` ## Update template mail settings **This endpoint allows you to update your current legacy email template settings.** @@ -3173,7 +3173,7 @@ Mail settings allow you to tell Twilio SendGrid specific things to do to every e } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve legacy template mail settings **This endpoint allows you to retrieve your current legacy email template settings.** @@ -3200,7 +3200,7 @@ Mail settings allow you to tell Twilio SendGrid specific things to do to every e } catch (IOException ex) { throw ex; } - ``` +``` # MAILBOX PROVIDERS @@ -3234,7 +3234,7 @@ Advanced Stats provide a more in-depth view of your email statistics and the act } catch (IOException ex) { throw ex; } - ``` +``` # PARTNER SETTINGS @@ -3262,7 +3262,7 @@ Our partner settings allow you to integrate your Twilio SendGrid account with ou } catch (IOException ex) { throw ex; } - ``` +``` ## Updates New Relic partner settings. **This endpoint allows you to update or change your New Relic partner settings.** @@ -3288,7 +3288,7 @@ By integrating with New Relic, you can send your Twilio SendGrid email statistic } catch (IOException ex) { throw ex; } - ``` +``` ## Returns all New Relic partner settings. **This endpoint allows you to retrieve your current New Relic partner settings.** @@ -3313,7 +3313,7 @@ By integrating with New Relic, you can send your Twilio SendGrid email statistic } catch (IOException ex) { throw ex; } - ``` +``` # SCOPES @@ -3339,7 +3339,7 @@ API Keys can be used to authenticate the use of [Twilio SendGrid's v3 Web API](h } catch (IOException ex) { throw ex; } - ``` +``` # SENDERS @@ -3349,7 +3349,7 @@ API Keys can be used to authenticate the use of [Twilio SendGrid's v3 Web API](h *You may create up to 100 unique sender identities.* -Sender Identities are required to be verified before use. If your domain has been authorized, it will auto verify on creation. Otherwise an email will be sent to the `from.email`. +Sender Identities are required to be verified before use. If your domain has been authorized, it will auto verify on creation. Otherwise, an email will be sent to the `from.email`. ### POST /senders @@ -3368,12 +3368,12 @@ Sender Identities are required to be verified before use. If your domain has bee } catch (IOException ex) { throw ex; } - ``` +``` ## Get all Sender Identities **This endpoint allows you to retrieve a list of all sender identities that have been created for your account.** -Sender Identities are required to be verified before use. If your domain has been authorized, it will auto verify on creation. Otherwise an email will be sent to the `from.email`. +Sender Identities are required to be verified before use. If your domain has been authorized, it will auto verify on creation. Otherwise, an email will be sent to the `from.email`. ### GET /senders @@ -3391,12 +3391,12 @@ Sender Identities are required to be verified before use. If your domain has bee } catch (IOException ex) { throw ex; } - ``` +``` ## Update a Sender Identity **This endpoint allows you to update a sender identity.** -Updates to `from.email` require re-verification. If your domain has been authorized, it will auto verify on creation. Otherwise an email will be sent to the `from.email`. +Updates to `from.email` require re-verification. If your domain has been authorized, it will auto verify on creation. Otherwise, an email will be sent to the `from.email`. Partial updates are allowed, but fields that are marked as "required" in the POST (create) endpoint must not be nil if that field is included in the PATCH request. @@ -3417,12 +3417,12 @@ Partial updates are allowed, but fields that are marked as "required" in the POS } catch (IOException ex) { throw ex; } - ``` +``` ## View a Sender Identity **This endpoint allows you to retrieve a specific sender identity.** -Sender Identities are required to be verified before use. If your domain has been authorized, it will auto verify on creation. Otherwise an email will be sent to the `from.email`. +Sender Identities are required to be verified before use. If your domain has been authorized, it will auto verify on creation. Otherwise, an email will be sent to the `from.email`. ### GET /senders/{sender_id} @@ -3440,12 +3440,12 @@ Sender Identities are required to be verified before use. If your domain has bee } catch (IOException ex) { throw ex; } - ``` +``` ## Delete a Sender Identity **This endpoint allows you to delete one of your sender identities.** -Sender Identities are required to be verified before use. If your domain has been authorized, it will auto verify on creation. Otherwise an email will be sent to the `from.email`. +Sender Identities are required to be verified before use. If your domain has been authorized, it will auto verify on creation. Otherwise, an email will be sent to the `from.email`. ### DELETE /senders/{sender_id} @@ -3463,12 +3463,12 @@ Sender Identities are required to be verified before use. If your domain has bee } catch (IOException ex) { throw ex; } - ``` +``` ## Resend Sender Identity Verification **This endpoint allows you to resend a sender identity verification email.** -Sender Identities are required to be verified before use. If your domain has been authorized, it will auto verify on creation. Otherwise an email will be sent to the `from.email`. +Sender Identities are required to be verified before use. If your domain has been authorized, it will auto verify on creation. Otherwise, an email will be sent to the `from.email`. ### POST /senders/{sender_id}/resend_verification @@ -3486,7 +3486,7 @@ Sender Identities are required to be verified before use. If your domain has bee } catch (IOException ex) { throw ex; } - ``` +``` # SENDER AUTHENTICATION @@ -4288,7 +4288,7 @@ Parent accounts will see aggregated stats for their account and all subuser acco } catch (IOException ex) { throw ex; } - ``` +``` # SUBUSERS @@ -4318,7 +4318,7 @@ For more information about Subusers: } catch (IOException ex) { throw ex; } - ``` +``` ## List all Subusers This endpoint allows you to retrieve a list of all of your subusers. You can choose to retrieve specific subusers as well as limit the results that come back from the API. @@ -4347,10 +4347,10 @@ For more information about Subusers: } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve Subuser Reputations -Subuser sender reputations give a good idea how well a sender is doing with regards to how recipients and recipient servers react to the mail that is being received. When a bounce, spam report, or other negative action happens on a sent email, it will effect your sender rating. +Subuser sender reputations give a good idea how well a sender is doing with regards to how recipients and recipient servers react to the mail that is being received. When a bounce, spam report, or other negative action happens on a sent email, it will affect your sender rating. This endpoint allows you to request the reputations for your subusers. @@ -4371,7 +4371,7 @@ This endpoint allows you to request the reputations for your subusers. } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve email statistics for your subusers. **This endpoint allows you to retrieve the email statistics for the given subusers.** @@ -4404,7 +4404,7 @@ For more information, see our [User Guide](https://sendgrid.com/docs/User_Guide/ } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve monthly stats for all subusers **This endpoint allows you to retrieve the monthly email statistics for all subusers over the given date range.** @@ -4438,7 +4438,7 @@ For more information, see our [User Guide](https://sendgrid.com/docs/User_Guide/ } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve the totals for each email statistic metric for all subusers. **This endpoint allows you to retrieve the total sums of each email statistic metric for all subusers over the given date range.** @@ -4471,7 +4471,7 @@ For more information, see our [User Guide](https://sendgrid.com/docs/User_Guide/ } catch (IOException ex) { throw ex; } - ``` +``` ## Enable/disable a subuser This endpoint allows you to enable or disable a subuser. @@ -4498,7 +4498,7 @@ For more information about Subusers: } catch (IOException ex) { throw ex; } - ``` +``` ## Delete a subuser This endpoint allows you to delete a subuser. This is a permanent action, once deleted a subuser cannot be retrieved. @@ -4524,7 +4524,7 @@ For more information about Subusers: } catch (IOException ex) { throw ex; } - ``` +``` ## Update IPs assigned to a subuser Each subuser should be assigned to an IP address, from which all of this subuser's mail will be sent. Often, this is the same IP as the parent account, but each subuser can have their own, or multiple, IP addresses as well. @@ -4551,7 +4551,7 @@ More information: } catch (IOException ex) { throw ex; } - ``` +``` ## Update Monitor Settings for a subuser Subuser monitor settings allow you to receive a sample of an outgoing message by a specific customer at a specific frequency of emails. @@ -4573,7 +4573,7 @@ Subuser monitor settings allow you to receive a sample of an outgoing message by } catch (IOException ex) { throw ex; } - ``` +``` ## Create monitor settings Subuser monitor settings allow you to receive a sample of an outgoing message by a specific customer at a specific frequency of emails. @@ -4595,7 +4595,7 @@ Subuser monitor settings allow you to receive a sample of an outgoing message by } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve monitor settings for a subuser Subuser monitor settings allow you to receive a sample of an outgoing message by a specific customer at a specific frequency of emails. @@ -4616,7 +4616,7 @@ Subuser monitor settings allow you to receive a sample of an outgoing message by } catch (IOException ex) { throw ex; } - ``` +``` ## Delete monitor settings Subuser monitor settings allow you to receive a sample of an outgoing message by a specific customer at a specific frequency of emails. @@ -4637,7 +4637,7 @@ Subuser monitor settings allow you to receive a sample of an outgoing message by } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve the monthly email statistics for a single subuser **This endpoint allows you to retrieve the monthly email statistics for a specific subuser.** @@ -4670,7 +4670,7 @@ For more information, see our [User Guide](https://sendgrid.com/docs/User_Guide/ } catch (IOException ex) { throw ex; } - ``` +``` # SUPPRESSION @@ -4702,7 +4702,7 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/User } catch (IOException ex) { throw ex; } - ``` +``` ## Delete blocks **This endpoint allows you to delete all email addresses on your blocks list.** @@ -4733,7 +4733,7 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/User } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve a specific block **This endpoint allows you to retrieve a specific email address from your blocks list.** @@ -4758,7 +4758,7 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/User } catch (IOException ex) { throw ex; } - ``` +``` ## Delete a specific block **This endpoint allows you to delete a specific email address from your blocks list.** @@ -4783,7 +4783,7 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/User } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve all bounces **This endpoint allows you to retrieve all of your bounces.** @@ -4813,7 +4813,7 @@ For more information see: } catch (IOException ex) { throw ex; } - ``` +``` ## Delete bounces **This endpoint allows you to delete all of your bounces. You can also use this endpoint to remove a specific email address from your bounce list.** @@ -4845,7 +4845,7 @@ Note: the `delete_all` and `emails` parameters should be used independently of e } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve a Bounce **This endpoint allows you to retrieve a specific bounce for a given email address.** @@ -4874,12 +4874,12 @@ For more information see: } catch (IOException ex) { throw ex; } - ``` +``` ## Delete a bounce **This endpoint allows you to remove an email address from your bounce list.** -Bounces are messages that are returned to the server that sent it. This endpoint allows you to delete a single email addresses from your bounce list. +Bounces are messages that are returned to the server that sent it. This endpoint allows you to delete a single email address from your bounce list. For more information see: @@ -4904,12 +4904,12 @@ For more information see: } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve all invalid emails **This endpoint allows you to retrieve a list of all invalid email addresses.** -An invalid email occurs when you attempt to send email to an address that is formatted in a manner that does not meet internet email format standards or the email does not exist at the recipients mail server. +An invalid email occurs when you attempt to send email to an address that is formatted in a manner that does not meet internet email format standards or the email does not exist at the recipient's mail server. Examples include addresses without the @ sign or addresses that include certain special characters and/or spaces. This response can come from our own server or the recipient mail server. @@ -4935,7 +4935,7 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/User } catch (IOException ex) { throw ex; } - ``` +``` ## Delete invalid emails **This endpoint allows you to remove email addresses from your invalid email address list.** @@ -4945,7 +4945,7 @@ There are two options for deleting invalid email addresses: 1) You can delete all invalid email addresses by setting `delete_all` to true in the request body. 2) You can delete some invalid email addresses by specifying certain addresses in an array in the request body. -An invalid email occurs when you attempt to send email to an address that is formatted in a manner that does not meet internet email format standards or the email does not exist at the recipients mail server. +An invalid email occurs when you attempt to send email to an address that is formatted in a manner that does not meet internet email format standards or the email does not exist at the recipient's mail server. Examples include addresses without the @ sign or addresses that include certain special characters and/or spaces. This response can come from our own server or the recipient mail server. @@ -4968,12 +4968,12 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/User } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve a specific invalid email **This endpoint allows you to retrieve a specific invalid email addresses.** -An invalid email occurs when you attempt to send email to an address that is formatted in a manner that does not meet internet email format standards or the email does not exist at the recipients mail server. +An invalid email occurs when you attempt to send email to an address that is formatted in a manner that does not meet internet email format standards or the email does not exist at the recipient's mail server. Examples include addresses without the @ sign or addresses that include certain special characters and/or spaces. This response can come from our own server or the recipient mail server. @@ -4995,12 +4995,12 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/User } catch (IOException ex) { throw ex; } - ``` +``` ## Delete a specific invalid email **This endpoint allows you to remove a specific email address from the invalid email address list.** -An invalid email occurs when you attempt to send email to an address that is formatted in a manner that does not meet internet email format standards or the email does not exist at the recipients mail server. +An invalid email occurs when you attempt to send email to an address that is formatted in a manner that does not meet internet email format standards or the email does not exist at the recipient's mail server. Examples include addresses without the @ sign or addresses that include certain special characters and/or spaces. This response can come from our own server or the recipient mail server. @@ -5022,7 +5022,7 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/User } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve a specific spam report **This endpoint allows you to retrieve a specific spam report.** @@ -5047,7 +5047,7 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/User } catch (IOException ex) { throw ex; } - ``` +``` ## Delete a specific spam report **This endpoint allows you to delete a specific spam report.** @@ -5072,7 +5072,7 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/User } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve all spam reports **This endpoint allows you to retrieve all spam reports.** @@ -5101,7 +5101,7 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/User } catch (IOException ex) { throw ex; } - ``` +``` ## Delete spam reports **This endpoint allows you to delete your spam reports.** @@ -5132,10 +5132,10 @@ For more information, please see our [User Guide](https://sendgrid.com/docs/User } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve all global suppressions -**This endpoint allows you to retrieve a list of all email address that are globally suppressed.** +**This endpoint allows you to retrieve a list of all email addresses that are globally suppressed.** A global suppression (or global unsubscribe) is an email address of a recipient who does not want to receive any of your messages. A globally suppressed recipient will be removed from any email you send. For more information, please see our [User Guide](https://sendgrid.com/docs/User_Guide/Suppressions/global_unsubscribes.html). @@ -5159,7 +5159,7 @@ A global suppression (or global unsubscribe) is an email address of a recipient } catch (IOException ex) { throw ex; } - ``` +``` # TEMPLATES @@ -5188,7 +5188,7 @@ Transactional templates are templates created specifically for transactional ema } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve all transactional templates. **This endpoint allows you to retrieve all transactional templates.** @@ -5213,7 +5213,7 @@ Transactional templates are templates created specifically for transactional ema } catch (IOException ex) { throw ex; } - ``` +``` ## Edit a transactional template. **This endpoint allows you to edit a transactional template.** @@ -5240,7 +5240,7 @@ Transactional templates are templates created specifically for transactional ema } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve a single transactional template. **This endpoint allows you to retrieve a single transactional template.** @@ -5266,7 +5266,7 @@ Transactional templates are templates created specifically for transactional ema } catch (IOException ex) { throw ex; } - ``` +``` ## Delete a template. **This endpoint allows you to delete a transactional template.** @@ -5292,7 +5292,7 @@ Transactional templates are templates created specifically for transactional ema } catch (IOException ex) { throw ex; } - ``` +``` ## Create a new transactional template version. **This endpoint allows you to create a new version of a template.** @@ -5319,7 +5319,7 @@ For more information about transactional templates, please see our [User Guide]( } catch (IOException ex) { throw ex; } - ``` +``` ## Edit a transactional template version. **This endpoint allows you to edit a version of one of your transactional templates.** @@ -5351,7 +5351,7 @@ For more information about transactional templates, please see our [User Guide]( } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve a specific transactional template version. **This endpoint allows you to retrieve a specific version of a template.** @@ -5382,7 +5382,7 @@ For more information about transactional templates, please see our [User Guide]( } catch (IOException ex) { throw ex; } - ``` +``` ## Delete a transactional template version. **This endpoint allows you to delete one of your transactional template versions.** @@ -5413,7 +5413,7 @@ For more information about transactional templates, please see our [User Guide]( } catch (IOException ex) { throw ex; } - ``` +``` ## Activate a transactional template version. **This endpoint allows you to activate a version of one of your templates.** @@ -5445,7 +5445,7 @@ For more information about transactional templates, please see our [User Guide]( } catch (IOException ex) { throw ex; } - ``` +``` # TRACKING SETTINGS @@ -5475,7 +5475,7 @@ For more information about tracking, please see our [User Guide](https://sendgri } catch (IOException ex) { throw ex; } - ``` +``` ## Update Click Tracking Settings **This endpoint allows you to change your current click tracking setting. You can enable, or disable, click tracking using this endpoint.** @@ -5501,7 +5501,7 @@ For more information about tracking, please see our [User Guide](https://sendgri } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve Click Track Settings **This endpoint allows you to retrieve your current click tracking setting.** @@ -5526,7 +5526,7 @@ For more information about tracking, please see our [User Guide](https://sendgri } catch (IOException ex) { throw ex; } - ``` +``` ## Update Google Analytics Settings **This endpoint allows you to update your current setting for Google Analytics.** @@ -5556,7 +5556,7 @@ For more information about tracking, please see our [User Guide](https://sendgri } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve Google Analytics Settings **This endpoint allows you to retrieve your current setting for Google Analytics.** @@ -5585,7 +5585,7 @@ For more information about tracking, please see our [User Guide](https://sendgri } catch (IOException ex) { throw ex; } - ``` +``` ## Update Open Tracking Settings **This endpoint allows you to update your current settings for open tracking.** @@ -5613,7 +5613,7 @@ For more information about tracking, please see our [User Guide](https://sendgri } catch (IOException ex) { throw ex; } - ``` +``` ## Get Open Tracking Settings **This endpoint allows you to retrieve your current settings for open tracking.** @@ -5640,7 +5640,7 @@ For more information about tracking, please see our [User Guide](https://sendgri } catch (IOException ex) { throw ex; } - ``` +``` ## Update Subscription Tracking Settings **This endpoint allows you to update your current settings for subscription tracking.** @@ -5668,7 +5668,7 @@ For more information about tracking, please see our [User Guide](https://sendgri } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve Subscription Tracking Settings **This endpoint allows you to retrieve your current settings for subscription tracking.** @@ -5695,7 +5695,7 @@ For more information about tracking, please see our [User Guide](https://sendgri } catch (IOException ex) { throw ex; } - ``` +``` # USER @@ -5727,7 +5727,7 @@ For more information about your user profile: } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve your credit balance **This endpoint allows you to retrieve the current credit balance for your account.** @@ -5750,7 +5750,7 @@ Your monthly credit allotment limits the number of emails you may send before in } catch (IOException ex) { throw ex; } - ``` +``` ## Update your account email address **This endpoint allows you to update the email address currently on file for your account.** @@ -5778,7 +5778,7 @@ For more information about your user profile: } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve your account email address **This endpoint allows you to retrieve the email address currently on file for your account.** @@ -5805,7 +5805,7 @@ For more information about your user profile: } catch (IOException ex) { throw ex; } - ``` +``` ## Update your password **This endpoint allows you to update your password.** @@ -5833,7 +5833,7 @@ For more information about your user profile: } catch (IOException ex) { throw ex; } - ``` +``` ## Update a user's profile **This endpoint allows you to update your current profile details.** @@ -5863,7 +5863,7 @@ It should be noted that any one or more of the parameters can be updated via the } catch (IOException ex) { throw ex; } - ``` +``` ## Get a user's profile Keeping your user profile up to date is important. This will help Twilio SendGrid to verify who you are as well as contact you should we need to. @@ -5888,7 +5888,7 @@ For more information about your user profile: } catch (IOException ex) { throw ex; } - ``` +``` ## Cancel or pause a scheduled send **This endpoint allows you to cancel or pause an email that has been scheduled to be sent.** @@ -5896,7 +5896,7 @@ For more information about your user profile: If the maximum number of cancellations/pauses are added, HTTP 400 will be returned. -The Cancel Scheduled Sends feature allows the customer to cancel a scheduled send based on a Batch ID included in the SMTPAPI header.Scheduled sends cancelled less than 10 minutes before the scheduled time are not guaranteed to be cancelled. +The Cancel Scheduled Sends feature allows the customer to cancel a scheduled send based on a Batch ID included in the SMTPAPI header.Scheduled sends canceled less than 10 minutes before the scheduled time are not guaranteed to be canceled. ### POST /user/scheduled_sends @@ -5915,12 +5915,12 @@ The Cancel Scheduled Sends feature allows the customer to cancel a scheduled sen } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve all scheduled sends **This endpoint allows you to retrieve all cancel/paused scheduled send information.** -The Cancel Scheduled Sends feature allows the customer to cancel a scheduled send based on a Batch ID included in the SMTPAPI header.Scheduled sends cancelled less than 10 minutes before the scheduled time are not guaranteed to be cancelled. +The Cancel Scheduled Sends feature allows the customer to cancel a scheduled send based on a Batch ID included in the SMTPAPI header.Scheduled sends canceled less than 10 minutes before the scheduled time are not guaranteed to be canceled. ### GET /user/scheduled_sends @@ -5938,12 +5938,12 @@ The Cancel Scheduled Sends feature allows the customer to cancel a scheduled sen } catch (IOException ex) { throw ex; } - ``` +``` ## Update user scheduled send information **This endpoint allows you to update the status of a scheduled send for the given `batch_id`.** -The Cancel Scheduled Sends feature allows the customer to cancel a scheduled send based on a Batch ID included in the SMTPAPI header.Scheduled sends cancelled less than 10 minutes before the scheduled time are not guaranteed to be cancelled. +The Cancel Scheduled Sends feature allows the customer to cancel a scheduled send based on a Batch ID included in the SMTPAPI header.Scheduled sends canceled less than 10 minutes before the scheduled time are not guaranteed to be canceled. ### PATCH /user/scheduled_sends/{batch_id} @@ -5962,12 +5962,12 @@ The Cancel Scheduled Sends feature allows the customer to cancel a scheduled sen } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve scheduled send **This endpoint allows you to retrieve the cancel/paused scheduled send information for a specific `batch_id`.** -The Cancel Scheduled Sends feature allows the customer to cancel a scheduled send based on a Batch ID included in the SMTPAPI header.Scheduled sends cancelled less than 10 minutes before the scheduled time are not guaranteed to be cancelled. +The Cancel Scheduled Sends feature allows the customer to cancel a scheduled send based on a Batch ID included in the SMTPAPI header.Scheduled sends canceled less than 10 minutes before the scheduled time are not guaranteed to be canceled. ### GET /user/scheduled_sends/{batch_id} @@ -5985,7 +5985,7 @@ The Cancel Scheduled Sends feature allows the customer to cancel a scheduled sen } catch (IOException ex) { throw ex; } - ``` +``` ## Delete a cancellation or pause of a scheduled send **This endpoint allows you to delete the cancellation/pause of a scheduled send.** @@ -6008,7 +6008,7 @@ The Cancel Scheduled Sends feature allows the customer to cancel a scheduled sen } catch (IOException ex) { throw ex; } - ``` +``` ## Update Enforced TLS settings **This endpoint allows you to update your current Enforced TLS settings.** @@ -6034,7 +6034,7 @@ The Enforced TLS settings specify whether or not the recipient is required to su } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve current Enforced TLS settings. **This endpoint allows you to retrieve your current Enforced TLS settings.** @@ -6059,7 +6059,7 @@ The Enforced TLS settings specify whether or not the recipient is required to su } catch (IOException ex) { throw ex; } - ``` +``` ## Update your username **This endpoint allows you to update the username for your account.** @@ -6087,7 +6087,7 @@ For more information about your user profile: } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve your username **This endpoint allows you to retrieve your current account username.** @@ -6114,7 +6114,7 @@ For more information about your user profile: } catch (IOException ex) { throw ex; } - ``` +``` ## Update Event Notification Settings **This endpoint allows you to update your current event webhook settings.** @@ -6142,7 +6142,7 @@ Common uses of this data are to remove unsubscribes, react to spam reports, dete } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve Event Webhook settings **This endpoint allows you to retrieve your current event webhook settings.** @@ -6169,7 +6169,7 @@ Common uses of this data are to remove unsubscribes, react to spam reports, dete } catch (IOException ex) { throw ex; } - ``` +``` ## Test Event Notification Settings **This endpoint allows you to test your event webhook by sending a fake event notification post to the provided URL.** @@ -6195,7 +6195,7 @@ Common uses of this data are to remove unsubscribes, react to spam reports, dete } catch (IOException ex) { throw ex; } - ``` +``` ## Create a parse setting **This endpoint allows you to create a new inbound parse setting.** @@ -6219,7 +6219,7 @@ The inbound parse webhook allows you to have incoming emails parsed, extracting } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve all parse settings **This endpoint allows you to retrieve all of your current inbound parse settings.** @@ -6242,7 +6242,7 @@ The inbound parse webhook allows you to have incoming emails parsed, extracting } catch (IOException ex) { throw ex; } - ``` +``` ## Update a parse setting **This endpoint allows you to update a specific inbound parse setting.** @@ -6266,7 +6266,7 @@ The inbound parse webhook allows you to have incoming emails parsed, extracting } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieve a specific parse setting **This endpoint allows you to retrieve a specific inbound parse setting.** @@ -6289,7 +6289,7 @@ The inbound parse webhook allows you to have incoming emails parsed, extracting } catch (IOException ex) { throw ex; } - ``` +``` ## Delete a parse setting **This endpoint allows you to delete a specific inbound parse setting.** @@ -6312,7 +6312,7 @@ The inbound parse webhook allows you to have incoming emails parsed, extracting } catch (IOException ex) { throw ex; } - ``` +``` ## Retrieves Inbound Parse Webhook statistics. **This endpoint allows you to retrieve the statistics for your Parse Webhook usage.** @@ -6342,4 +6342,4 @@ There are a number of pre-made integrations for the Twilio SendGrid Parse Webhoo } catch (IOException ex) { throw ex; } - ``` +``` diff --git a/USE_CASES.md b/USE_CASES.md index 5af8f674..e2afdb41 100644 --- a/USE_CASES.md +++ b/USE_CASES.md @@ -1,4 +1,4 @@ -This documentation provides examples for specific use cases. Please [open an issue](https://github.com/sendgrid/sendgrid-java/issues) or make a pull request for any use cases you would like us to document here. Thank you! +This document provides examples for specific use cases. Please [open an issue](https://github.com/sendgrid/sendgrid-java/issues) or make a pull request for any use cases you would like us to document here. Thank you! # Use Cases @@ -223,7 +223,7 @@ public class Example { # How to Setup a Domain Authentication -You can find documentation for how to setup a domain authentication via the UI [here](https://sendgrid.com/docs/ui/account-and-settings/how-to-set-up-domain-authentication/) and via API [here](USAGE.md#sender-authentication). +You can find documentation for how to set up a domain authentication via the UI [here](https://sendgrid.com/docs/ui/account-and-settings/how-to-set-up-domain-authentication/) and via API [here](USAGE.md#sender-authentication). Find more information about all of Twilio SendGrid's authentication related documentation [here](https://sendgrid.com/docs/ui/account-and-settings/). From 36707b71f6ef9c9f9b6a08f86862f40d4ddae028 Mon Sep 17 00:00:00 2001 From: Elise Shanholtz Date: Fri, 28 Aug 2020 14:45:36 -0700 Subject: [PATCH 222/345] chore: move encrypted tokens to environment variables --- .travis.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index ff279202..54e0417b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -23,5 +23,4 @@ notifications: on_pull_requests: false on_success: never on_failure: change - rooms: - - secure: q2SEemDXFLu/2G2I7oD02+YsM5Q0G27j+b4P1BcReWqVHhRz9L+iyuYWhIXJ6hW0omL5V2XrZ65uqb4f/SD7b89oXRGToVxfykrBzcas1tqIIp9lldd1u2eMc59zALX4nkTlE0T4UFLwEvoeY8aXoD/dNytSy6M2F5c2nYcmoN0= + rooms: $SLACK_TOKEN From ae6ee304cfe197b3002fef1e14ef1241734dfc16 Mon Sep 17 00:00:00 2001 From: Elise Shanholtz Date: Tue, 1 Sep 2020 13:23:02 -0700 Subject: [PATCH 223/345] Revert "chore: move encrypted tokens to environment variables" This reverts commit 36707b71 --- .travis.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 54e0417b..ff279202 100644 --- a/.travis.yml +++ b/.travis.yml @@ -23,4 +23,5 @@ notifications: on_pull_requests: false on_success: never on_failure: change - rooms: $SLACK_TOKEN + rooms: + - secure: q2SEemDXFLu/2G2I7oD02+YsM5Q0G27j+b4P1BcReWqVHhRz9L+iyuYWhIXJ6hW0omL5V2XrZ65uqb4f/SD7b89oXRGToVxfykrBzcas1tqIIp9lldd1u2eMc59zALX4nkTlE0T4UFLwEvoeY8aXoD/dNytSy6M2F5c2nYcmoN0= From 47783ddd1ec52004ce45697a00163b2ac37cf1a1 Mon Sep 17 00:00:00 2001 From: Twilio Date: Wed, 16 Sep 2020 19:52:57 +0000 Subject: [PATCH 224/345] [Librarian] Version Bump --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0728a93f..cc4e2420 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,12 @@ # Change Log All notable changes to this project will be documented in this file. +[2020-09-16] Version 4.6.5 +-------------------------- +**Library - Docs** +- [PR #477](https://github.com/sendgrid/sendgrid-java/pull/477): Run *.md documents through Grammer.ly. Thanks to [@vinird](https://github.com/vinird)! + + [2020-08-19] Version 4.6.4 -------------------------- **Library - Docs** From ad48e143c827e981402a3d14ac4449eb84575402 Mon Sep 17 00:00:00 2001 From: Twilio Date: Wed, 16 Sep 2020 20:09:04 +0000 Subject: [PATCH 225/345] Release 4.6.5 --- CONTRIBUTING.md | 2 +- README.md | 8 ++++---- pom.xml | 6 +++--- src/main/java/com/sendgrid/BaseInterface.java | 2 +- src/test/java/com/sendgrid/SendGridTest.java | 2 +- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index dbfb552d..12132145 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -98,7 +98,7 @@ touch Example.java Add the example you want to test to Example.java, including the headers at the top of the file. ``` bash -javac -classpath ../repo/com/sendgrid/4.6.4/sendgrid-4.6.4-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.6.4/sendgrid-4.6.4-jar.jar:. Example +javac -classpath ../repo/com/sendgrid/4.6.5/sendgrid-4.6.5-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.6.5/sendgrid-4.6.5-jar.jar:. Example ``` diff --git a/README.md b/README.md index e71eb696..c0189b90 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ **NEW:** Subscribe to email [notifications](https://dx.sendgrid.com/newsletter/java) for releases and breaking changes. -**The default branch name for this repository has been changed to `main` as of 4.6.4.** +**The default branch name for this repository has been changed to `main` as of 4.6.5.** **This library allows you to quickly and easily use the Twilio SendGrid Web API v3 via Java.** @@ -40,7 +40,7 @@ We appreciate your continued support, thank you! ## Prerequisites - Java 8 or 11 -- The Twilio SendGrid service, starting at the [free level](https://sendgrid.com/free?source=sendgrid-java) to send up to 4.6.4 emails for the first 30 days, then send 100 emails/day free forever or check out [our pricing](https://sendgrid.com/pricing?source=sendgrid-java). +- The Twilio SendGrid service, starting at the [free level](https://sendgrid.com/free?source=sendgrid-java) to send up to 4.6.5 emails for the first 30 days, then send 100 emails/day free forever or check out [our pricing](https://sendgrid.com/pricing?source=sendgrid-java). ## Setup Environment Variables @@ -68,7 +68,7 @@ Add the following to your build.gradle file in the root of your project. ... dependencies { ... - implementation 'com.sendgrid:sendgrid-java:4.6.4' + implementation 'com.sendgrid:sendgrid-java:4.6.5' } repositories { @@ -87,7 +87,7 @@ mvn install You can just drop the jar file in. It's a fat jar - it has all the dependencies built in. -[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.6.4/sendgrid-java.jar) +[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.6.5/sendgrid-java.jar) ## Dependencies diff --git a/pom.xml b/pom.xml index a5498ec4..5b750743 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ com.sendgrid sendgrid-java Twilio SendGrid Java helper library - 4.6.4 + 4.6.5 This Java module allows you to quickly and easily send emails through Twilio SendGrid using Java. https://github.com/sendgrid/sendgrid-java @@ -26,7 +26,7 @@ https://github.com/sendgrid/sendgrid-java scm:git:git@github.com:sendgrid/sendgrid-java.git scm:git:git@github.com:sendgrid/sendgrid-java.git - 4.6.4 + 4.6.5 @@ -286,7 +286,7 @@ com.sendgrid java-http-client - 4.3.5 + 4.3.6 com.fasterxml.jackson.core diff --git a/src/main/java/com/sendgrid/BaseInterface.java b/src/main/java/com/sendgrid/BaseInterface.java index 9758f5d8..f122f3e3 100644 --- a/src/main/java/com/sendgrid/BaseInterface.java +++ b/src/main/java/com/sendgrid/BaseInterface.java @@ -11,7 +11,7 @@ */ public abstract class BaseInterface implements SendGridAPI { - private static final String VERSION = "4.6.4"; + private static final String VERSION = "4.6.5"; private static final String USER_AGENT = "sendgrid/" + VERSION + ";java"; private static final int RATE_LIMIT_RESPONSE_CODE = 429; diff --git a/src/test/java/com/sendgrid/SendGridTest.java b/src/test/java/com/sendgrid/SendGridTest.java index 1092fd07..d19796fd 100644 --- a/src/test/java/com/sendgrid/SendGridTest.java +++ b/src/test/java/com/sendgrid/SendGridTest.java @@ -43,7 +43,7 @@ public void testConstructWithClient() throws IOException { @Test public void testLibraryVersion() { SendGrid sg = new SendGrid(SENDGRID_API_KEY); - Assert.assertEquals(sg.getLibraryVersion(), "4.6.4"); + Assert.assertEquals(sg.getLibraryVersion(), "4.6.5"); } @Test From 099373157b22525065fe6c7301f297ca90d24f5f Mon Sep 17 00:00:00 2001 From: childish-sambino Date: Thu, 17 Sep 2020 16:51:43 -0500 Subject: [PATCH 226/345] fix: update the eventwebhook sample data, example, tests, and byte handling (#649) --- examples/helpers/eventwebhook/Example.java | 56 +++++--- .../helpers/eventwebhook/EventWebhook.java | 52 +++++--- .../eventwebhook/EventWebhookTest.java | 121 ++++++++++++++++-- 3 files changed, 185 insertions(+), 44 deletions(-) diff --git a/examples/helpers/eventwebhook/Example.java b/examples/helpers/eventwebhook/Example.java index 786d5902..6077736a 100644 --- a/examples/helpers/eventwebhook/Example.java +++ b/examples/helpers/eventwebhook/Example.java @@ -1,27 +1,49 @@ import com.sendgrid.helpers.eventwebhook.EventWebhook; -import java.security.PublicKey; +import com.sendgrid.helpers.eventwebhook.EventWebhookHeader; +import com.twilio.security.RequestValidator; +import com.twilio.twiml.MessagingResponse; +import com.twilio.twiml.messaging.Body; +import com.twilio.twiml.messaging.Message; +import org.bouncycastle.jce.provider.BouncyCastleProvider; +import spark.Route; + import java.security.Security; import java.security.interfaces.ECPublicKey; -import java.util.logging.Level; -import java.util.logging.Logger; -import org.bouncycastle.jce.provider.BouncyCastleProvider; +import java.util.HashMap; +import java.util.Map; -public class Example { +import static spark.Spark.post; +public class Example { public static void main(String[] args) { Security.addProvider(new BouncyCastleProvider()); - try { - String publicKey = "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEEDr2LjtURuePQzplybdC+u4CwrqDqBaWjcMMsTbhdbcwHBcepxo7yAQGhHPTnlvFYPAZFceEu/1FwCM/QmGUhA=="; - String payload = "{\"category\":\"example_payload\",\"event\":\"test_event\",\"message_id\":\"message_id\"}"; - String signature = "MEUCIQCtIHJeH93Y+qpYeWrySphQgpNGNr/U+UyUlBkU6n7RAwIgJTz2C+8a8xonZGi6BpSzoQsbVRamr2nlxFDWYNH2j/0="; - String timestamp = "1588788367"; - EventWebhook ew = new EventWebhook(); - ECPublicKey ellipticCurvePublicKey = ew.ConvertPublicKeyToECDSA(publicKey); - boolean valid = ew.VerifySignature(ellipticCurvePublicKey, payload, signature, timestamp); - System.out.println("Valid Signature: " + valid); - } catch (Exception exception) { - Logger.getLogger(Example.class.getName()).log(Level.SEVERE, "something went wrong", exception); - } + final Route webhookHandler = (req, res) -> { + try { + final String publicKey = "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE83T4O/n84iotIvIW4mdBgQ/7dAfSmpqIM8kF9mN1flpVKS3GRqe62gw+2fNNRaINXvVpiglSI8eNEc6wEA3F+g=="; + + final String signature = req.headers(EventWebhookHeader.SIGNATURE.toString()); + final String timestamp = req.headers(EventWebhookHeader.TIMESTAMP.toString()); + final byte[] requestBody = req.bodyAsBytes(); + + final EventWebhook ew = new EventWebhook(); + final ECPublicKey ellipticCurvePublicKey = ew.ConvertPublicKeyToECDSA(publicKey); + final boolean valid = ew.VerifySignature(ellipticCurvePublicKey, requestBody, signature, timestamp); + System.out.println("Valid Signature: " + valid); + + if (valid) { + res.status(204); + } else { + res.status(403); + } + + return null; + } catch (final Exception exception) { + res.status(500); + return exception.toString(); + } + }; + + post("/sendgrid/webhook", webhookHandler); } } diff --git a/src/main/java/com/sendgrid/helpers/eventwebhook/EventWebhook.java b/src/main/java/com/sendgrid/helpers/eventwebhook/EventWebhook.java index 6e52bd38..0898133b 100644 --- a/src/main/java/com/sendgrid/helpers/eventwebhook/EventWebhook.java +++ b/src/main/java/com/sendgrid/helpers/eventwebhook/EventWebhook.java @@ -1,11 +1,8 @@ package com.sendgrid.helpers.eventwebhook; -import java.security.InvalidKeyException; -import java.security.KeyFactory; -import java.security.NoSuchAlgorithmException; -import java.security.NoSuchProviderException; -import java.security.Signature; -import java.security.SignatureException; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.security.*; import java.security.interfaces.ECPublicKey; import java.security.spec.InvalidKeySpecException; import java.security.spec.X509EncodedKeySpec; @@ -19,7 +16,7 @@ public class EventWebhook { /** * Convert the public key string to a ECPublicKey. - * + * * @param publicKey: verification key under Mail Settings * @return a public key using the ECDSA algorithm * @throws NoSuchAlgorithmException @@ -27,17 +24,18 @@ public class EventWebhook { * @throws InvalidKeySpecException */ public java.security.interfaces.ECPublicKey ConvertPublicKeyToECDSA(String publicKey) - throws NoSuchAlgorithmException, NoSuchProviderException, InvalidKeySpecException { + throws NoSuchAlgorithmException, NoSuchProviderException, InvalidKeySpecException { byte[] publicKeyInBytes = Base64.getDecoder().decode(publicKey); KeyFactory factory = KeyFactory.getInstance("ECDSA", "BC"); return (ECPublicKey) factory.generatePublic(new X509EncodedKeySpec(publicKeyInBytes)); } + /** * Verify signed event webhook requests. - * + * * @param publicKey: elliptic curve public key - * @param payload: event payload in the request body + * @param payload: event payload string in the request body * @param signature: value obtained from the * 'X-Twilio-Email-Event-Webhook-Signature' header * @param timestamp: value obtained from the @@ -47,20 +45,44 @@ public java.security.interfaces.ECPublicKey ConvertPublicKeyToECDSA(String publi * @throws NoSuchProviderException * @throws InvalidKeyException * @throws SignatureException + * @throws IOException */ public boolean VerifySignature(ECPublicKey publicKey, String payload, String signature, String timestamp) - throws NoSuchAlgorithmException, NoSuchProviderException, InvalidKeyException, SignatureException { + throws NoSuchAlgorithmException, NoSuchProviderException, InvalidKeyException, SignatureException, IOException { + return VerifySignature(publicKey, payload.getBytes(), signature, timestamp); + } + + /** + * Verify signed event webhook requests. + * + * @param publicKey: elliptic curve public key + * @param payload: event payload bytes in the request body + * @param signature: value obtained from the + * 'X-Twilio-Email-Event-Webhook-Signature' header + * @param timestamp: value obtained from the + * 'X-Twilio-Email-Event-Webhook-Timestamp' header + * @return true or false if signature is valid + * @throws NoSuchAlgorithmException + * @throws NoSuchProviderException + * @throws InvalidKeyException + * @throws SignatureException + * @throws IOException + */ + public boolean VerifySignature(ECPublicKey publicKey, byte[] payload, String signature, String timestamp) + throws NoSuchAlgorithmException, NoSuchProviderException, InvalidKeyException, SignatureException, IOException { // prepend the payload with the timestamp - String payloadWithTimestamp = timestamp + payload; + final ByteArrayOutputStream payloadWithTimestamp = new ByteArrayOutputStream(); + payloadWithTimestamp.write(timestamp.getBytes()); + payloadWithTimestamp.write(payload); // create the signature object - Signature signatureObject = Signature.getInstance("SHA256withECDSA", "BC"); + final Signature signatureObject = Signature.getInstance("SHA256withECDSA", "BC"); signatureObject.initVerify(publicKey); - signatureObject.update(payloadWithTimestamp.getBytes()); + signatureObject.update(payloadWithTimestamp.toByteArray()); // decode the signature - byte[] signatureInBytes = Base64.getDecoder().decode(signature); + final byte[] signatureInBytes = Base64.getDecoder().decode(signature); // verify the signature return signatureObject.verify(signatureInBytes); diff --git a/src/test/java/com/sendgrid/helpers/eventwebhook/EventWebhookTest.java b/src/test/java/com/sendgrid/helpers/eventwebhook/EventWebhookTest.java index 434201bb..d73cedbc 100644 --- a/src/test/java/com/sendgrid/helpers/eventwebhook/EventWebhookTest.java +++ b/src/test/java/com/sendgrid/helpers/eventwebhook/EventWebhookTest.java @@ -1,27 +1,124 @@ package com.sendgrid.helpers.eventwebhook; -import java.security.Security; -import java.security.interfaces.ECPublicKey; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; import org.bouncycastle.jce.provider.BouncyCastleProvider; import org.junit.Assert; +import org.junit.BeforeClass; import org.junit.Test; +import java.security.Security; +import java.security.interfaces.ECPublicKey; +import java.util.Collections; +import java.util.List; + public class EventWebhookTest { + private static class Event { + public Event(final String email, + final String event, + final String reason, + final String sgEventId, + final String sgMessageId, + final String smtpId, + final long timestamp) { + this.email = email; + this.event = event; + this.reason = reason; + this.sgEventId = sgEventId; + this.sgMessageId = sgMessageId; + this.smtpId = smtpId; + this.timestamp = timestamp; + } + + public String email; + public String event; + public String reason; + @JsonProperty("sg_event_id") + public String sgEventId; + @JsonProperty("sg_message_id") + public String sgMessageId; + @JsonProperty("smtp-id") + public String smtpId; + @JsonProperty("timestamp") + public long timestamp; + } + + private static final String PUBLIC_KEY = "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE83T4O/n84iotIvIW4mdBgQ/7dAfSmpqIM8kF9mN1flpVKS3GRqe62gw+2fNNRaINXvVpiglSI8eNEc6wEA3F+g=="; + private static final String SIGNATURE = "MEUCIGHQVtGj+Y3LkG9fLcxf3qfI10QysgDWmMOVmxG0u6ZUAiEAyBiXDWzM+uOe5W0JuG+luQAbPIqHh89M15TluLtEZtM="; + private static final String TIMESTAMP = "1600112502"; + private static final List EVENTS = Collections.singletonList(new Event( + "hello@world.com", + "dropped", + "Bounced Address", + "ZHJvcC0xMDk5NDkxOS1MUnpYbF9OSFN0T0doUTRrb2ZTbV9BLTA", + "LRzXl_NHStOGhQ4kofSm_A.filterdrecv-p3mdw1-756b745b58-kmzbl-18-5F5FC76C-9.0", + "", + 1600112492)); + + private static String PAYLOAD; + + @BeforeClass + public static void setUp() throws JsonProcessingException { + Security.addProvider(new BouncyCastleProvider()); + + // Be sure to include the trailing carriage return and newline! + PAYLOAD = new ObjectMapper().writeValueAsString(EVENTS) + "\r\n"; + } + @Test public void testVerifySignature() throws Exception { + Assert.assertTrue(verify( + PUBLIC_KEY, + PAYLOAD, + SIGNATURE, + TIMESTAMP + )); + } - Security.addProvider(new BouncyCastleProvider()); + @Test + public void testBadKey() throws Exception { + Assert.assertFalse(verify( + "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEqTxd43gyp8IOEto2LdIfjRQrIbsd4SXZkLW6jDutdhXSJCWHw8REntlo7aNDthvj+y7GjUuFDb/R1NGe1OPzpA==", + PAYLOAD, + SIGNATURE, + TIMESTAMP + )); + } + + @Test + public void testBadPayload() throws Exception { + Assert.assertFalse(verify( + PUBLIC_KEY, + "payload", + SIGNATURE, + TIMESTAMP + )); + } - String testPublicKey = "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEEDr2LjtURuePQzplybdC+u4CwrqDqBaWjcMMsTbhdbcwHBcepxo7yAQGhHPTnlvFYPAZFceEu/1FwCM/QmGUhA=="; - String testPayload = "{\"category\":\"example_payload\",\"event\":\"test_event\",\"message_id\":\"message_id\"}"; - String testSignature = "MEUCIQCtIHJeH93Y+qpYeWrySphQgpNGNr/U+UyUlBkU6n7RAwIgJTz2C+8a8xonZGi6BpSzoQsbVRamr2nlxFDWYNH2j/0="; - String testTimestamp = "1588788367"; + @Test + public void testBadSignature() throws Exception { + Assert.assertFalse(verify( + PUBLIC_KEY, + PAYLOAD, + "MEUCIQCtIHJeH93Y+qpYeWrySphQgpNGNr/U+UyUlBkU6n7RAwIgJTz2C+8a8xonZGi6BpSzoQsbVRamr2nlxFDWYNH3j/0=", + TIMESTAMP + )); + } - EventWebhook ew = new EventWebhook(); - ECPublicKey ellipticCurvePublicKey = ew.ConvertPublicKeyToECDSA(testPublicKey); - boolean isValidSignature = ew.VerifySignature(ellipticCurvePublicKey, testPayload, testSignature, - testTimestamp); + @Test + public void testBadTimestamp() throws Exception { + Assert.assertFalse(verify( + PUBLIC_KEY, + PAYLOAD, + SIGNATURE, + "timestamp" + )); + } - Assert.assertTrue(isValidSignature); + private boolean verify(final String publicKey, final String payload, final String signature, final String timestamp) throws Exception { + final EventWebhook ew = new EventWebhook(); + final ECPublicKey ellipticCurvePublicKey = ew.ConvertPublicKeyToECDSA(publicKey); + return ew.VerifySignature(ellipticCurvePublicKey, payload, signature, timestamp); } } From 48264f5076fd471571eda309caba7036974a58cf Mon Sep 17 00:00:00 2001 From: Martin Macko Date: Mon, 21 Sep 2020 16:36:37 +0200 Subject: [PATCH 227/345] docs: Update documentation for GET /templates (#504) --- USAGE.md | 1 + examples/templates/templates.java | 1 + 2 files changed, 2 insertions(+) diff --git a/USAGE.md b/USAGE.md index 08487720..6a482cb4 100644 --- a/USAGE.md +++ b/USAGE.md @@ -5206,6 +5206,7 @@ Transactional templates are templates created specifically for transactional ema Request request = new Request(); request.setMethod(Method.GET); request.setEndpoint("templates"); + request.addQueryParam("generations", "legacy,dynamic") Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); diff --git a/examples/templates/templates.java b/examples/templates/templates.java index a16c4bed..4fcf3886 100644 --- a/examples/templates/templates.java +++ b/examples/templates/templates.java @@ -42,6 +42,7 @@ public static void main(String[] args) throws IOException { Request request = new Request(); request.setMethod(Method.GET); request.setEndpoint("templates"); + request.addQueryParam("generations", "legacy,dynamic") Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); From b7de4b605d01df04e0623784e37bdef911a11ebd Mon Sep 17 00:00:00 2001 From: Sam Harrison Date: Mon, 21 Sep 2020 10:25:30 -0500 Subject: [PATCH 228/345] docs: update legacy/dynamic transactional template doc links --- USE_CASES.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/USE_CASES.md b/USE_CASES.md index e2afdb41..20e9906e 100644 --- a/USE_CASES.md +++ b/USE_CASES.md @@ -14,7 +14,7 @@ This document provides examples for specific use cases. Please [open an issue](h # Transactional Templates -For this example, we assume you have created a [transactional template](https://sendgrid.com/docs/User_Guide/Transactional_Templates/index.html) in the UI or via the API. Following is the template content we used for testing. +For this example, we assume you have created a [dynamic transactional template](https://sendgrid.com/docs/ui/sending-email/how-to-send-an-email-with-dynamic-transactional-templates/) in the UI or via the API. Following is the template content we used for testing. Template ID (replace with your own): @@ -114,7 +114,7 @@ public class Example { # Legacy Templates -For this example, we assume you have created a [legacy template](https://sendgrid.com/docs/User_Guide/Transactional_Templates/index.html). Following is the template content we used for testing. +For this example, we assume you have created a [legacy transactional template](https://sendgrid.com/docs/User_Guide/Transactional_Templates/index.html) in the UI or via the API. Following is the template content we used for testing. Template ID (replace with your own): From 5c0f717933d748f4829c12193ba9236fb1e40262 Mon Sep 17 00:00:00 2001 From: Twilio Date: Mon, 28 Sep 2020 20:13:08 +0000 Subject: [PATCH 229/345] [Librarian] Version Bump --- CHANGELOG.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index cc4e2420..22a4f43b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,15 @@ # Change Log All notable changes to this project will be documented in this file. +[2020-09-28] Version 4.6.6 +-------------------------- +**Library - Docs** +- [PR #504](https://github.com/sendgrid/sendgrid-java/pull/504): Update documentation for GET /templates. Thanks to [@LinkedList](https://github.com/LinkedList)! + +**Library - Fix** +- [PR #649](https://github.com/sendgrid/sendgrid-java/pull/649): update the eventwebhook sample data, example, tests, and byte handling. Thanks to [@childish-sambino](https://github.com/childish-sambino)! + + [2020-09-16] Version 4.6.5 -------------------------- **Library - Docs** From 1eb78b1ed660ef7ef3f70407929573ffef3d8fa5 Mon Sep 17 00:00:00 2001 From: Twilio Date: Mon, 28 Sep 2020 20:49:04 +0000 Subject: [PATCH 230/345] Release 4.6.6 --- CONTRIBUTING.md | 2 +- README.md | 8 ++++---- pom.xml | 4 ++-- src/main/java/com/sendgrid/BaseInterface.java | 2 +- src/test/java/com/sendgrid/SendGridTest.java | 2 +- 5 files changed, 9 insertions(+), 9 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 12132145..8c16dcc8 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -98,7 +98,7 @@ touch Example.java Add the example you want to test to Example.java, including the headers at the top of the file. ``` bash -javac -classpath ../repo/com/sendgrid/4.6.5/sendgrid-4.6.5-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.6.5/sendgrid-4.6.5-jar.jar:. Example +javac -classpath ../repo/com/sendgrid/4.6.6/sendgrid-4.6.6-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.6.6/sendgrid-4.6.6-jar.jar:. Example ``` diff --git a/README.md b/README.md index c0189b90..583f7245 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ **NEW:** Subscribe to email [notifications](https://dx.sendgrid.com/newsletter/java) for releases and breaking changes. -**The default branch name for this repository has been changed to `main` as of 4.6.5.** +**The default branch name for this repository has been changed to `main` as of 4.6.6.** **This library allows you to quickly and easily use the Twilio SendGrid Web API v3 via Java.** @@ -40,7 +40,7 @@ We appreciate your continued support, thank you! ## Prerequisites - Java 8 or 11 -- The Twilio SendGrid service, starting at the [free level](https://sendgrid.com/free?source=sendgrid-java) to send up to 4.6.5 emails for the first 30 days, then send 100 emails/day free forever or check out [our pricing](https://sendgrid.com/pricing?source=sendgrid-java). +- The Twilio SendGrid service, starting at the [free level](https://sendgrid.com/free?source=sendgrid-java) to send up to 4.6.6 emails for the first 30 days, then send 100 emails/day free forever or check out [our pricing](https://sendgrid.com/pricing?source=sendgrid-java). ## Setup Environment Variables @@ -68,7 +68,7 @@ Add the following to your build.gradle file in the root of your project. ... dependencies { ... - implementation 'com.sendgrid:sendgrid-java:4.6.5' + implementation 'com.sendgrid:sendgrid-java:4.6.6' } repositories { @@ -87,7 +87,7 @@ mvn install You can just drop the jar file in. It's a fat jar - it has all the dependencies built in. -[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.6.5/sendgrid-java.jar) +[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.6.6/sendgrid-java.jar) ## Dependencies diff --git a/pom.xml b/pom.xml index 5b750743..8d26156c 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ com.sendgrid sendgrid-java Twilio SendGrid Java helper library - 4.6.5 + 4.6.6 This Java module allows you to quickly and easily send emails through Twilio SendGrid using Java. https://github.com/sendgrid/sendgrid-java @@ -26,7 +26,7 @@ https://github.com/sendgrid/sendgrid-java scm:git:git@github.com:sendgrid/sendgrid-java.git scm:git:git@github.com:sendgrid/sendgrid-java.git - 4.6.5 + 4.6.6 diff --git a/src/main/java/com/sendgrid/BaseInterface.java b/src/main/java/com/sendgrid/BaseInterface.java index f122f3e3..80a8733d 100644 --- a/src/main/java/com/sendgrid/BaseInterface.java +++ b/src/main/java/com/sendgrid/BaseInterface.java @@ -11,7 +11,7 @@ */ public abstract class BaseInterface implements SendGridAPI { - private static final String VERSION = "4.6.5"; + private static final String VERSION = "4.6.6"; private static final String USER_AGENT = "sendgrid/" + VERSION + ";java"; private static final int RATE_LIMIT_RESPONSE_CODE = 429; diff --git a/src/test/java/com/sendgrid/SendGridTest.java b/src/test/java/com/sendgrid/SendGridTest.java index d19796fd..58e8e375 100644 --- a/src/test/java/com/sendgrid/SendGridTest.java +++ b/src/test/java/com/sendgrid/SendGridTest.java @@ -43,7 +43,7 @@ public void testConstructWithClient() throws IOException { @Test public void testLibraryVersion() { SendGrid sg = new SendGrid(SENDGRID_API_KEY); - Assert.assertEquals(sg.getLibraryVersion(), "4.6.5"); + Assert.assertEquals(sg.getLibraryVersion(), "4.6.6"); } @Test From 1d838bd97789444079cc0e8e688532e1e57ac7af Mon Sep 17 00:00:00 2001 From: "Julian J. Maurer" Date: Wed, 30 Sep 2020 01:40:04 +0200 Subject: [PATCH 231/345] docs: reorganize examples (#360) --- examples/categories/README.md | 7 ++ .../categories/RetrieveAllCategories.java | 33 +++++++ .../RetrieveStatisticsForCategories.java | 36 ++++++++ .../categories/RetrieveSumsForCategories.java | 38 ++++++++ examples/categories/categories.java | 91 ------------------- 5 files changed, 114 insertions(+), 91 deletions(-) create mode 100644 examples/categories/README.md create mode 100644 examples/categories/RetrieveAllCategories.java create mode 100644 examples/categories/RetrieveStatisticsForCategories.java create mode 100644 examples/categories/RetrieveSumsForCategories.java delete mode 100644 examples/categories/categories.java diff --git a/examples/categories/README.md b/examples/categories/README.md new file mode 100644 index 00000000..4ac50544 --- /dev/null +++ b/examples/categories/README.md @@ -0,0 +1,7 @@ +![SendGrid Logo](https://uiux.s3.amazonaws.com/2016-logos/email-logo%402x.png) + +This folder contains various examples on using the Categories endpoint of SendGrid with Java: + +* [Retrieve all categories (GET /categories)](RetrieveAllCategories.java) +* [Retrieve Email Statistics for Categories (GET /categories/stats)](RetrieveStatisticsForCategories.java) +* [Retrieve sums of email stats for each category (GET /categories/stats/sums)](RetrieveSumsForCategories.java) \ No newline at end of file diff --git a/examples/categories/RetrieveAllCategories.java b/examples/categories/RetrieveAllCategories.java new file mode 100644 index 00000000..aa1ab2b6 --- /dev/null +++ b/examples/categories/RetrieveAllCategories.java @@ -0,0 +1,33 @@ +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.*; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +////////////////////////////////////////////////////////////////// +// Retrieve all categories +// GET /categories + + +public class RetrieveAllCategories { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("categories"); + request.addQueryParam("category", "test_string"); + request.addQueryParam("limit", "1"); + request.addQueryParam("offset", "1"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/categories/RetrieveStatisticsForCategories.java b/examples/categories/RetrieveStatisticsForCategories.java new file mode 100644 index 00000000..b02cf247 --- /dev/null +++ b/examples/categories/RetrieveStatisticsForCategories.java @@ -0,0 +1,36 @@ +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.*; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +////////////////////////////////////////////////////////////////// +// Retrieve Email Statistics for Categories +// GET /categories/stats + + +public class RetrieveMailStatisticsForCategories { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("categories/stats"); + request.addQueryParam("end_date", "2016-04-01"); + request.addQueryParam("aggregated_by", "day"); + request.addQueryParam("limit", "1"); + request.addQueryParam("offset", "1"); + request.addQueryParam("start_date", "2016-01-01"); + request.addQueryParam("categories", "test_string"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/categories/RetrieveSumsForCategories.java b/examples/categories/RetrieveSumsForCategories.java new file mode 100644 index 00000000..a82e8e2d --- /dev/null +++ b/examples/categories/RetrieveSumsForCategories.java @@ -0,0 +1,38 @@ +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.*; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +////////////////////////////////////////////////////////////////// +// Retrieve sums of email stats for each category [Needs: Stats object defined, has category ID?] +// GET /categories/stats/sums + + +public class RetrieveSumsForCategories { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("categories/stats/sums"); + request.addQueryParam("end_date", "2016-04-01"); + request.addQueryParam("aggregated_by", "day"); + request.addQueryParam("limit", "1"); + request.addQueryParam("sort_by_metric", "test_string"); + request.addQueryParam("offset", "1"); + request.addQueryParam("start_date", "2016-01-01"); + request.addQueryParam("sort_by_direction", "asc"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} + diff --git a/examples/categories/categories.java b/examples/categories/categories.java deleted file mode 100644 index 7ac73822..00000000 --- a/examples/categories/categories.java +++ /dev/null @@ -1,91 +0,0 @@ -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; - -import com.sendgrid.*; - -import java.io.IOException; -import java.util.HashMap; -import java.util.Map; - -////////////////////////////////////////////////////////////////// -// Retrieve all categories -// GET /categories - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("categories"); - request.addQueryParam("category", "test_string"); - request.addQueryParam("limit", "1"); - request.addQueryParam("offset", "1"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve Email Statistics for Categories -// GET /categories/stats - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("categories/stats"); - request.addQueryParam("end_date", "2016-04-01"); - request.addQueryParam("aggregated_by", "day"); - request.addQueryParam("limit", "1"); - request.addQueryParam("offset", "1"); - request.addQueryParam("start_date", "2016-01-01"); - request.addQueryParam("categories", "test_string"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve sums of email stats for each category [Needs: Stats object defined, has category ID?] -// GET /categories/stats/sums - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("categories/stats/sums"); - request.addQueryParam("end_date", "2016-04-01"); - request.addQueryParam("aggregated_by", "day"); - request.addQueryParam("limit", "1"); - request.addQueryParam("sort_by_metric", "test_string"); - request.addQueryParam("offset", "1"); - request.addQueryParam("start_date", "2016-01-01"); - request.addQueryParam("sort_by_direction", "asc"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - From afcd7f5bc91b42c5c5a0ea1d35b9ce45cbc197ee Mon Sep 17 00:00:00 2001 From: Twilio Date: Wed, 14 Oct 2020 18:21:11 +0000 Subject: [PATCH 232/345] [Librarian] Version Bump --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 22a4f43b..4e22590b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,12 @@ # Change Log All notable changes to this project will be documented in this file. +[2020-10-14] Version 4.6.7 +-------------------------- +**Library - Docs** +- [PR #360](https://github.com/sendgrid/sendgrid-java/pull/360): reorganize examples. Thanks to [@derjayjay](https://github.com/derjayjay)! + + [2020-09-28] Version 4.6.6 -------------------------- **Library - Docs** From 8db137f058faaf08c700997e9f533be1c3b123ea Mon Sep 17 00:00:00 2001 From: Twilio Date: Wed, 14 Oct 2020 19:30:28 +0000 Subject: [PATCH 233/345] Release 4.6.7 --- CONTRIBUTING.md | 2 +- README.md | 8 ++++---- pom.xml | 4 ++-- src/main/java/com/sendgrid/BaseInterface.java | 2 +- src/test/java/com/sendgrid/SendGridTest.java | 2 +- 5 files changed, 9 insertions(+), 9 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 8c16dcc8..0ccdb92b 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -98,7 +98,7 @@ touch Example.java Add the example you want to test to Example.java, including the headers at the top of the file. ``` bash -javac -classpath ../repo/com/sendgrid/4.6.6/sendgrid-4.6.6-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.6.6/sendgrid-4.6.6-jar.jar:. Example +javac -classpath ../repo/com/sendgrid/4.6.7/sendgrid-4.6.7-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.6.7/sendgrid-4.6.7-jar.jar:. Example ``` diff --git a/README.md b/README.md index 583f7245..f0fdb548 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ **NEW:** Subscribe to email [notifications](https://dx.sendgrid.com/newsletter/java) for releases and breaking changes. -**The default branch name for this repository has been changed to `main` as of 4.6.6.** +**The default branch name for this repository has been changed to `main` as of 4.6.7.** **This library allows you to quickly and easily use the Twilio SendGrid Web API v3 via Java.** @@ -40,7 +40,7 @@ We appreciate your continued support, thank you! ## Prerequisites - Java 8 or 11 -- The Twilio SendGrid service, starting at the [free level](https://sendgrid.com/free?source=sendgrid-java) to send up to 4.6.6 emails for the first 30 days, then send 100 emails/day free forever or check out [our pricing](https://sendgrid.com/pricing?source=sendgrid-java). +- The Twilio SendGrid service, starting at the [free level](https://sendgrid.com/free?source=sendgrid-java) to send up to 4.6.7 emails for the first 30 days, then send 100 emails/day free forever or check out [our pricing](https://sendgrid.com/pricing?source=sendgrid-java). ## Setup Environment Variables @@ -68,7 +68,7 @@ Add the following to your build.gradle file in the root of your project. ... dependencies { ... - implementation 'com.sendgrid:sendgrid-java:4.6.6' + implementation 'com.sendgrid:sendgrid-java:4.6.7' } repositories { @@ -87,7 +87,7 @@ mvn install You can just drop the jar file in. It's a fat jar - it has all the dependencies built in. -[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.6.6/sendgrid-java.jar) +[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.6.7/sendgrid-java.jar) ## Dependencies diff --git a/pom.xml b/pom.xml index 8d26156c..37f5c201 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ com.sendgrid sendgrid-java Twilio SendGrid Java helper library - 4.6.6 + 4.6.7 This Java module allows you to quickly and easily send emails through Twilio SendGrid using Java. https://github.com/sendgrid/sendgrid-java @@ -26,7 +26,7 @@ https://github.com/sendgrid/sendgrid-java scm:git:git@github.com:sendgrid/sendgrid-java.git scm:git:git@github.com:sendgrid/sendgrid-java.git - 4.6.6 + 4.6.7 diff --git a/src/main/java/com/sendgrid/BaseInterface.java b/src/main/java/com/sendgrid/BaseInterface.java index 80a8733d..ebab63ed 100644 --- a/src/main/java/com/sendgrid/BaseInterface.java +++ b/src/main/java/com/sendgrid/BaseInterface.java @@ -11,7 +11,7 @@ */ public abstract class BaseInterface implements SendGridAPI { - private static final String VERSION = "4.6.6"; + private static final String VERSION = "4.6.7"; private static final String USER_AGENT = "sendgrid/" + VERSION + ";java"; private static final int RATE_LIMIT_RESPONSE_CODE = 429; diff --git a/src/test/java/com/sendgrid/SendGridTest.java b/src/test/java/com/sendgrid/SendGridTest.java index 58e8e375..f6556e87 100644 --- a/src/test/java/com/sendgrid/SendGridTest.java +++ b/src/test/java/com/sendgrid/SendGridTest.java @@ -43,7 +43,7 @@ public void testConstructWithClient() throws IOException { @Test public void testLibraryVersion() { SendGrid sg = new SendGrid(SENDGRID_API_KEY); - Assert.assertEquals(sg.getLibraryVersion(), "4.6.6"); + Assert.assertEquals(sg.getLibraryVersion(), "4.6.7"); } @Test From 1344f938821fc059b9c22f9ceb9d681eaf5779d2 Mon Sep 17 00:00:00 2001 From: Josh Soref Date: Wed, 14 Oct 2020 17:22:48 -0400 Subject: [PATCH 234/345] chore: fix spelling typos (#650) --- CHANGELOG.md | 2 +- FIRST_TIMERS.md | 14 ++++---- USAGE.md | 36 +++++++++---------- USE_CASES.md | 2 +- examples/accesssettings/Example.java | 2 +- examples/ips/RetrieveAllPools.java | 2 +- ...GetEnforedTLS.java => GetEnforcedTLS.java} | 0 examples/user/README.md | 2 +- .../java/com/sendgrid/RateLimitException.java | 2 +- .../java/com/sendgrid/helpers/mail/Mail.java | 6 ++-- .../helpers/AttachmentBuilderTest.java | 6 ++-- 11 files changed, 37 insertions(+), 37 deletions(-) rename examples/user/{GetEnforedTLS.java => GetEnforcedTLS.java} (100%) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4e22590b..b4779fe9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,7 +19,7 @@ All notable changes to this project will be documented in this file. [2020-09-16] Version 4.6.5 -------------------------- **Library - Docs** -- [PR #477](https://github.com/sendgrid/sendgrid-java/pull/477): Run *.md documents through Grammer.ly. Thanks to [@vinird](https://github.com/vinird)! +- [PR #477](https://github.com/sendgrid/sendgrid-java/pull/477): Run *.md documents through Grammar.ly. Thanks to [@vinird](https://github.com/vinird)! [2020-08-19] Version 4.6.4 diff --git a/FIRST_TIMERS.md b/FIRST_TIMERS.md index 47cf5425..9db04724 100644 --- a/FIRST_TIMERS.md +++ b/FIRST_TIMERS.md @@ -61,13 +61,13 @@ Before creating a pull request, make sure that you respect the repository's cons * [Node.js SDK](https://github.com/sendgrid/sendgrid-nodejs/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) * [Java SDK](https://github.com/sendgrid/sendgrid-java/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) * [Go SDK](https://github.com/sendgrid/sendgrid-go/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) -* [Python STMPAPI Client](https://github.com/sendgrid/smtpapi-python/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) -* [PHP STMPAPI Client](https://github.com/sendgrid/smtpapi-php/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) -* [C# STMPAPI Client](https://github.com/sendgrid/smtpapi-csharp/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) -* [Ruby STMPAPI Client](https://github.com/sendgrid/smtpapi-ruby/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) -* [Node.js STMPAPI Client](https://github.com/sendgrid/smtpapi-nodejs/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) -* [Java STMPAPI Client](https://github.com/sendgrid/smtpapi-java/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) -* [Go STMPAPI Client](https://github.com/sendgrid/smtpapi-go/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) +* [Python SMTPAPI Client](https://github.com/sendgrid/smtpapi-python/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) +* [PHP SMTPAPI Client](https://github.com/sendgrid/smtpapi-php/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) +* [C# SMTPAPI Client](https://github.com/sendgrid/smtpapi-csharp/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) +* [Ruby SMTPAPI Client](https://github.com/sendgrid/smtpapi-ruby/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) +* [Node.js SMTPAPI Client](https://github.com/sendgrid/smtpapi-nodejs/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) +* [Java SMTPAPI Client](https://github.com/sendgrid/smtpapi-java/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) +* [Go SMTPAPI Client](https://github.com/sendgrid/smtpapi-go/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) * [Python HTTP Client](https://github.com/sendgrid/python-http-client/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) * [PHP HTTP Client](https://github.com/sendgrid/php-http-client/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) * [C# HTTP Client](https://github.com/sendgrid/csharp-http-client/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) diff --git a/USAGE.md b/USAGE.md index 6a482cb4..e5b3e1d2 100644 --- a/USAGE.md +++ b/USAGE.md @@ -546,7 +546,7 @@ Each user can create up to 25 different suppression groups. Request request = new Request(); request.setMethod(Method.POST); request.setEndpoint("asm/groups"); - request.setBody("{\"is_default\":true,\"description\":\"Suggestions for products our users might like.\",\"name\":\"Product) Suggestions\"}"; + request.setBody("{\"is_default\":true,\"description\":\"Suggestions for products our users might like.\",\"name\":\"Product) Suggestions\"}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -941,7 +941,7 @@ For more information: Request request = new Request(); request.setMethod(Method.POST); request.setEndpoint("campaigns"); - request.setBody("{\"custom_unsubscribe_url\":\"\",\"html_content\":\"

Check out our) spring line!

\",\"list_ids\":[110,124],\"sender_id\":124451,\"subject\":\"New Products for Spring!\",\"plain_content\":\"Check out our spring line!\",\"suppression_group_id\":42,\"title\":\"March Newsletter\",\"segment_ids\":[110],\"categories\":[\"spring line\"],\"ip_pool\":\"marketing\"}"; + request.setBody("{\"custom_unsubscribe_url\":\"\",\"html_content\":\"

Check out our) spring line!

\",\"list_ids\":[110,124],\"sender_id\":124451,\"subject\":\"New Products for Spring!\",\"plain_content\":\"Check out our spring line!\",\"suppression_group_id\":42,\"title\":\"March Newsletter\",\"segment_ids\":[110],\"categories\":[\"spring line\"],\"ip_pool\":\"marketing\"}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -998,7 +998,7 @@ For more information: Request request = new Request(); request.setMethod(Method.PATCH); request.setEndpoint("campaigns/{campaign_id}"); - request.setBody("{\"html_content\":\"

Check out our summer line!

\",\"subject\":\"New Products for Summer!\",\"title\":\"May Newsletter\",\"categories\":[\"summer line\"],\"plain_content\":\"Check out our summer line!\"}"; + request.setBody("{\"html_content\":\"

Check out our summer line!

\",\"subject\":\"New Products for Summer!\",\"title\":\"May Newsletter\",\"categories\":[\"summer line\"],\"plain_content\":\"Check out our summer line!\"}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -1760,7 +1760,7 @@ The Contacts API helps you manage your [Marketing Campaigns](https://sendgrid.co Request request = new Request(); request.setMethod(Method.POST); request.setEndpoint("contactdb/recipients"); - request.setBody("[{\"age\":25,\"last_name\":\"User\",\"email\":\"example@example.com\",\"first_name\":\"\"},{\"age\":25,\"last)_name\":\"User\",\"email\":\"example2@example.com\",\"first_name\":\"Example\"}]"; + request.setBody("[{\"age\":25,\"last_name\":\"User\",\"email\":\"example@example.com\",\"first_name\":\"\"},{\"age\":25,\"last)_name\":\"User\",\"email\":\"example2@example.com\",\"first_name\":\"Example\"}]"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -2033,7 +2033,7 @@ For more information about segments in Marketing Campaigns, please see our [User Request request = new Request(); request.setMethod(Method.POST); request.setEndpoint("contactdb/segments"); - request.setBody("{\"conditions\":[{\"operator\":\"eq\",\"field\":\"last_name\",\"and)_or\":\"\",\"value\":\"Miller\"},{\"operator\":\"gt\",\"field\":\"last_clicked\",\"and_or\":\"and\",\"value\":\"01/02/2015\"},{\"operator\":\"eq\",\"field\":\"clicks.campaign_identifier\",\"and_or\":\"or\",\"value\":\"513\"}],\"name\":\"Last Name Miller\",\"list_id\":4}"; + request.setBody("{\"conditions\":[{\"operator\":\"eq\",\"field\":\"last_name\",\"and)_or\":\"\",\"value\":\"Miller\"},{\"operator\":\"gt\",\"field\":\"last_clicked\",\"and_or\":\"and\",\"value\":\"01/02/2015\"},{\"operator\":\"eq\",\"field\":\"clicks.campaign_identifier\",\"and_or\":\"or\",\"value\":\"513\"}],\"name\":\"Last Name Miller\",\"list_id\":4}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -2084,7 +2084,7 @@ For more information about segments in Marketing Campaigns, please see our [User Request request = new Request(); request.setMethod(Method.PATCH); request.setEndpoint("contactdb/segments/{segment_id}"); - request.setBody("{\"conditions\":[{\"operator\":\"eq\",\"field\":\"last_name\",\"and)_or\":\"\",\"value\":\"Miller\"}],\"name\":\"The Millers\",\"list_id\":5}"; + request.setBody("{\"conditions\":[{\"operator\":\"eq\",\"field\":\"last_name\",\"and)_or\":\"\",\"value\":\"Miller\"}],\"name\":\"The Millers\",\"list_id\":5}"); request.addQueryParam("segment_id", "test_string"); Response response = sg.api(request); System.out.println(response.getStatusCode()); @@ -2701,7 +2701,7 @@ This endpoint has a helper, check it out [here](src/main/java/com/sendgrid/helpe Request request = new Request(); request.setMethod(Method.POST); request.setEndpoint("mail/send"); - request.setBody("{\"custom_args\":{\"New Argument 1\":\"New Value 1\",\"activationAttempt\":\"1\",\"customerAccountNumber\":\")[CUSTOMER ACCOUNT NUMBER GOES HERE]\"},\"from\":{\"email\":\"sam.smith@example.com\",\"name\":\"Sam Smith\"},\"attachments\":[{\"name\":\"file1\",\"filename\":\"file1.jpg\",\"content\":\"[BASE64 encoded content block here]\",\"disposition\":\"inline\",\"content_id\":\"ii_139db99fdb5c3704\",\"type\":\"jpg\"}],\"personalizations\":[{\"to\":[{\"email\":\"john.doe@example.com\",\"name\":\"John Doe\"}],\"cc\":[{\"email\":\"jane.doe@example.com\",\"name\":\"Jane Doe\"}],\"bcc\":[{\"email\":\"sam.doe@example.com\",\"name\":\"Sam Doe\"}],\"custom_args\":{\"New Argument 1\":\"New Value 1\",\"activationAttempt\":\"1\",\"customerAccountNumber\":\"[CUSTOMER ACCOUNT NUMBER GOES HERE]\"},\"headers\":{\"X-Accept-Language\":\"en\",\"X-Mailer\":\"MyApp\"},\"send_at\":1409348513,\"substitutions\":{\"type\":\"object\",\"id\":\"substitutions\"},\"subject\":\"Hello, World!\"}],\"subject\":\"Hello, World!\",\"ip_pool_name\":\"[YOUR POOL NAME GOES HERE]\",\"content\":[{\"type\":\"text/html\",\"value\":\"

Hello, world!

\"}],\"headers\":{},\"asm\":{\"groups_to_display\":[1,2,3],\"group_id\":1},\"batch_id\":\"[YOUR BATCH ID GOES HERE]\",\"tracking_settings\":{\"subscription_tracking\":{\"text\":\"If you would like to unsubscribe and stop receiving these emails <% click here %>.\",\"enable\":true,\"html\":\"If you would like to unsubscribe and stop receiving these emails <% clickhere %>.\",\"substitution_tag\":\"<%click here%>\"},\"open_tracking\":{\"enable\":true,\"substitution_tag\":\"%opentrack\"},\"click_tracking\":{\"enable\":true,\"enable_text\":true},\"ganalytics\":{\"utm_campaign\":\"[NAME OF YOUR REFERRER SOURCE]\",\"enable\":true,\"utm_name\":\"[NAME OF YOUR CAMPAIGN]\",\"utm_term\":\"[IDENTIFY PAID KEYWORDS HERE]\",\"utm_content\":\"[USE THIS SPACE TO DIFFERENTIATE YOUR EMAIL FROM ADS]\",\"utm_medium\":\"[NAME OF YOUR MARKETING MEDIUM e.g. email]\"}},\"mail_settings\":{\"footer\":{\"text\":\"Thanks,/n The Twilio SendGrid Team\",\"enable\":true,\"html\":\"

Thanks
The Twilio SendGrid Team

\"},\"spam_check\":{\"threshold\":3,\"post_to_url\":\"http://example.com/compliance\",\"enable\":true},\"bypass_list_management\":{\"enable\":true},\"sandbox_mode\":{\"enable\":false},\"bcc\":{\"enable\":true,\"email\":\"ben.doe@example.com\"}},\"reply_to\":{\"email\":\"sam.smith@example.com\",\"name\":\"Sam Smith\"},\"sections\":{\"section\":{\":sectionName2\":\"section 2 text\",\":sectionName1\":\"section 1 text\"}},\"template_id\":\"[YOUR TEMPLATE ID GOES HERE]\",\"categories\":[\"category1\",\"category2\"],\"send_at\":1409348513}"; + request.setBody("{\"custom_args\":{\"New Argument 1\":\"New Value 1\",\"activationAttempt\":\"1\",\"customerAccountNumber\":\")[CUSTOMER ACCOUNT NUMBER GOES HERE]\"},\"from\":{\"email\":\"sam.smith@example.com\",\"name\":\"Sam Smith\"},\"attachments\":[{\"name\":\"file1\",\"filename\":\"file1.jpg\",\"content\":\"[BASE64 encoded content block here]\",\"disposition\":\"inline\",\"content_id\":\"ii_139db99fdb5c3704\",\"type\":\"jpg\"}],\"personalizations\":[{\"to\":[{\"email\":\"john.doe@example.com\",\"name\":\"John Doe\"}],\"cc\":[{\"email\":\"jane.doe@example.com\",\"name\":\"Jane Doe\"}],\"bcc\":[{\"email\":\"sam.doe@example.com\",\"name\":\"Sam Doe\"}],\"custom_args\":{\"New Argument 1\":\"New Value 1\",\"activationAttempt\":\"1\",\"customerAccountNumber\":\"[CUSTOMER ACCOUNT NUMBER GOES HERE]\"},\"headers\":{\"X-Accept-Language\":\"en\",\"X-Mailer\":\"MyApp\"},\"send_at\":1409348513,\"substitutions\":{\"type\":\"object\",\"id\":\"substitutions\"},\"subject\":\"Hello, World!\"}],\"subject\":\"Hello, World!\",\"ip_pool_name\":\"[YOUR POOL NAME GOES HERE]\",\"content\":[{\"type\":\"text/html\",\"value\":\"

Hello, world!

\"}],\"headers\":{},\"asm\":{\"groups_to_display\":[1,2,3],\"group_id\":1},\"batch_id\":\"[YOUR BATCH ID GOES HERE]\",\"tracking_settings\":{\"subscription_tracking\":{\"text\":\"If you would like to unsubscribe and stop receiving these emails <% click here %>.\",\"enable\":true,\"html\":\"If you would like to unsubscribe and stop receiving these emails <% clickhere %>.\",\"substitution_tag\":\"<%click here%>\"},\"open_tracking\":{\"enable\":true,\"substitution_tag\":\"%opentrack\"},\"click_tracking\":{\"enable\":true,\"enable_text\":true},\"ganalytics\":{\"utm_campaign\":\"[NAME OF YOUR REFERRER SOURCE]\",\"enable\":true,\"utm_name\":\"[NAME OF YOUR CAMPAIGN]\",\"utm_term\":\"[IDENTIFY PAID KEYWORDS HERE]\",\"utm_content\":\"[USE THIS SPACE TO DIFFERENTIATE YOUR EMAIL FROM ADS]\",\"utm_medium\":\"[NAME OF YOUR MARKETING MEDIUM e.g. email]\"}},\"mail_settings\":{\"footer\":{\"text\":\"Thanks,/n The Twilio SendGrid Team\",\"enable\":true,\"html\":\"

Thanks
The Twilio SendGrid Team

\"},\"spam_check\":{\"threshold\":3,\"post_to_url\":\"http://example.com/compliance\",\"enable\":true},\"bypass_list_management\":{\"enable\":true},\"sandbox_mode\":{\"enable\":false},\"bcc\":{\"enable\":true,\"email\":\"ben.doe@example.com\"}},\"reply_to\":{\"email\":\"sam.smith@example.com\",\"name\":\"Sam Smith\"},\"sections\":{\"section\":{\":sectionName2\":\"section 2 text\",\":sectionName1\":\"section 1 text\"}},\"template_id\":\"[YOUR TEMPLATE ID GOES HERE]\",\"categories\":[\"category1\",\"category2\"],\"send_at\":1409348513}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -3360,7 +3360,7 @@ Sender Identities are required to be verified before use. If your domain has bee Request request = new Request(); request.setMethod(Method.POST); request.setEndpoint("senders"); - request.setBody("{\"city\":\"Denver\",\"from\":{\"email\":\"from@example.com\",\"name\":\"Example) INC\"},\"zip\":\"80202\",\"country\":\"United States\",\"state\":\"Colorado\",\"address_2\":\"Apt. 456\",\"address\":\"123 Elm St.\",\"reply_to\":{\"email\":\"replyto@example.com\",\"name\":\"Example INC\"},\"nickname\":\"My Sender ID\"}"; + request.setBody("{\"city\":\"Denver\",\"from\":{\"email\":\"from@example.com\",\"name\":\"Example) INC\"},\"zip\":\"80202\",\"country\":\"United States\",\"state\":\"Colorado\",\"address_2\":\"Apt. 456\",\"address\":\"123 Elm St.\",\"reply_to\":{\"email\":\"replyto@example.com\",\"name\":\"Example INC\"},\"nickname\":\"My Sender ID\"}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -3409,7 +3409,7 @@ Partial updates are allowed, but fields that are marked as "required" in the POS Request request = new Request(); request.setMethod(Method.PATCH); request.setEndpoint("senders/{sender_id}"); - request.setBody("{\"city\":\"Denver\",\"from\":{\"email\":\"from@example.com\",\"name\":\"Example) INC\"},\"zip\":\"80202\",\"country\":\"United States\",\"state\":\"Colorado\",\"address_2\":\"Apt. 456\",\"address\":\"123 Elm St.\",\"reply_to\":{\"email\":\"replyto@example.com\",\"name\":\"Example INC\"},\"nickname\":\"My Sender ID\"}"; + request.setBody("{\"city\":\"Denver\",\"from\":{\"email\":\"from@example.com\",\"name\":\"Example) INC\"},\"zip\":\"80202\",\"country\":\"United States\",\"state\":\"Colorado\",\"address_2\":\"Apt. 456\",\"address\":\"123 Elm St.\",\"reply_to\":{\"email\":\"replyto@example.com\",\"name\":\"Example INC\"},\"nickname\":\"My Sender ID\"}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -3511,7 +3511,7 @@ For more information on domain authentication, please see our [User Guide](https Request request = new Request(); request.setMethod(Method.POST); request.setEndpoint("whitelabel/domains"); - request.setBody("{\"automatic)_security\":false,\"username\":\"john@example.com\",\"domain\":\"example.com\",\"default\":true,\"custom_spf\":true,\"ips\":[\"192.168.1.1\",\"192.168.1.2\"],\"subdomain\":\"news\"}"; + request.setBody("{\"automatic)_security\":false,\"username\":\"john@example.com\",\"domain\":\"example.com\",\"default\":true,\"custom_spf\":true,\"ips\":[\"192.168.1.1\",\"192.168.1.2\"],\"subdomain\":\"news\"}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -3785,7 +3785,7 @@ For more information on domain authentication, please see our [User Guide](https throw ex; } ``` -## Remove an IP from a domain authenticaiton. +## Remove an IP from a domain authentication. **This endpoint allows you to remove a domain's IP address from that domain's authentication.** @@ -4310,7 +4310,7 @@ For more information about Subusers: Request request = new Request(); request.setMethod(Method.POST); request.setEndpoint("subusers"); - request.setBody("{\"username\":\"John@example.com\",\"ips\":[\"1.1.1.1\",\"2.2.2.2\"],\"password\":\"johns_password\",\"email\)":\"John@example.com\"}"; + request.setBody("{\"username\":\"John@example.com\",\"ips\":[\"1.1.1.1\",\"2.2.2.2\"],\"password\":\"johns_password\",\"email\)":\"John@example.com\"}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -5312,7 +5312,7 @@ For more information about transactional templates, please see our [User Guide]( Request request = new Request(); request.setMethod(Method.POST); request.setEndpoint("templates/{template_id}/versions"); - request.setBody("{\"name\":\"example_version_name\",\"html_content\":\"<%body%>\",\"plain_content\":\")<%body%>\",\"active\":1,\"template_id\":\"ddb96bbc-9b92-425e-8979-99464621b543\",\"subject\":\"<%subject%>\"}"; + request.setBody("{\"name\":\"example_version_name\",\"html_content\":\"<%body%>\",\"plain_content\":\")<%body%>\",\"active\":1,\"template_id\":\"ddb96bbc-9b92-425e-8979-99464621b543\",\"subject\":\"<%subject%>\"}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -5344,7 +5344,7 @@ For more information about transactional templates, please see our [User Guide]( Request request = new Request(); request.setMethod(Method.PATCH); request.setEndpoint("templates/{template_id}/versions/{version_id}"); - request.setBody("{\"active\":1,\"html_content\":\"<%body%>\",\"subject\":\"<%subject%>\",\"name\":\"updated_example)_name\",\"plain_content\":\"<%body%>\"}"; + request.setBody("{\"active\":1,\"html_content\":\"<%body%>\",\"subject\":\"<%subject%>\",\"name\":\"updated_example)_name\",\"plain_content\":\"<%body%>\"}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -5549,7 +5549,7 @@ For more information about tracking, please see our [User Guide](https://sendgri Request request = new Request(); request.setMethod(Method.PATCH); request.setEndpoint("tracking_settings/google_analytics"); - request.setBody("{\"utm_campaign\":\"website\",\"utm_term\":\"\",\"utm_content\":\"\",\"enabled\":true,\"utm)_source\":\"sendgrid.com\",\"utm_medium\":\"email\"}"; + request.setBody("{\"utm_campaign\":\"website\",\"utm_term\":\"\",\"utm_content\":\"\",\"enabled\":true,\"utm)_source\":\"sendgrid.com\",\"utm_medium\":\"email\"}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -5661,7 +5661,7 @@ For more information about tracking, please see our [User Guide](https://sendgri Request request = new Request(); request.setMethod(Method.PATCH); request.setEndpoint("tracking_settings/subscription"); - request.setBody("{\"url\":\"url\",\"html_content\":\"html content\",\"enabled\":true,\"landing\":\"landing page) html\",\"replace\":\"replacement tag\",\"plain_content\":\"text content\"}"; + request.setBody("{\"url\":\"url\",\"html_content\":\"html content\",\"enabled\":true,\"landing\":\"landing page) html\",\"replace\":\"replacement tag\",\"plain_content\":\"text content\"}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -6135,7 +6135,7 @@ Common uses of this data are to remove unsubscribes, react to spam reports, dete Request request = new Request(); request.setMethod(Method.PATCH); request.setEndpoint("user/webhooks/event/settings"); - request.setBody("{\"group_resubscribe\":true,\"delivered\":true,\"group_unsubscribe\":true,\"spam_report\":true,\"url\":\"url\)",\"enabled\":true,\"bounce\":true,\"deferred\":true,\"unsubscribe\":true,\"dropped\":true,\"open\":true,\"click\":true,\"processed\":true}"; + request.setBody("{\"group_resubscribe\":true,\"delivered\":true,\"group_unsubscribe\":true,\"spam_report\":true,\"url\":\"url\)",\"enabled\":true,\"bounce\":true,\"deferred\":true,\"unsubscribe\":true,\"dropped\":true,\"open\":true,\"click\":true,\"processed\":true}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); @@ -6212,7 +6212,7 @@ The inbound parse webhook allows you to have incoming emails parsed, extracting Request request = new Request(); request.setMethod(Method.POST); request.setEndpoint("user/webhooks/parse/settings"); - request.setBody("{\"url\":\"http://email.myhosthame.com\",\"send_raw\":false,\"hostname\":\"myhostname.com\",\"spam)_check\":true}"; + request.setBody("{\"url\":\"http://email.myhosthame.com\",\"send_raw\":false,\"hostname\":\"myhostname.com\",\"spam)_check\":true}"); Response response = sg.api(request); System.out.println(response.getStatusCode()); System.out.println(response.getBody()); diff --git a/USE_CASES.md b/USE_CASES.md index 20e9906e..b9b0613a 100644 --- a/USE_CASES.md +++ b/USE_CASES.md @@ -53,7 +53,7 @@ import java.io.IOException; public class Example { public static void main(String[] args) throws IOException { Mail mail = new Mail(); - mail.setFrom(new Email("teste@example.com")); + mail.setFrom(new Email("tester@example.com")); mail.setTemplateId("d-2c214ac919e84170b21855cc129b4a5f"); Personalization personalization = new Personalization(); diff --git a/examples/accesssettings/Example.java b/examples/accesssettings/Example.java index 6fd33a36..5de41ee0 100644 --- a/examples/accesssettings/Example.java +++ b/examples/accesssettings/Example.java @@ -23,7 +23,7 @@ protected Response execute(Request request) throws IOException { return response; } - protected void printResonseInfo(Response response) { + protected void printResponseInfo(Response response) { System.out.println(response.getStatusCode()); System.out.println(response.getBody()); System.out.println(response.getHeaders()); diff --git a/examples/ips/RetrieveAllPools.java b/examples/ips/RetrieveAllPools.java index 93bf78ec..c6734071 100644 --- a/examples/ips/RetrieveAllPools.java +++ b/examples/ips/RetrieveAllPools.java @@ -13,7 +13,7 @@ // GET /ips/pools -public class RetieveAllIPPools { +public class RetrieveAllIPPools { public static void main(String[] args) throws IOException { try { SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); diff --git a/examples/user/GetEnforedTLS.java b/examples/user/GetEnforcedTLS.java similarity index 100% rename from examples/user/GetEnforedTLS.java rename to examples/user/GetEnforcedTLS.java diff --git a/examples/user/README.md b/examples/user/README.md index 68e8370d..befb7b4f 100644 --- a/examples/user/README.md +++ b/examples/user/README.md @@ -33,7 +33,7 @@ - [Update Username](UpdateUsername.java) ## Security Settings Examples -- [Get Enforced TLS](GetEnforedTLS.java) +- [Get Enforced TLS](GetEnforcedTLS.java) - [Update Enforced TLS](UpdateEnforcedTLS.java) ## Webhook Settings Examples diff --git a/src/main/java/com/sendgrid/RateLimitException.java b/src/main/java/com/sendgrid/RateLimitException.java index 7a2570ac..5f25a075 100644 --- a/src/main/java/com/sendgrid/RateLimitException.java +++ b/src/main/java/com/sendgrid/RateLimitException.java @@ -30,7 +30,7 @@ public Request getRequest() { } /** - * Get the number of times the action was attemted. + * Get the number of times the action was attempted. * * @return the retry count. */ diff --git a/src/main/java/com/sendgrid/helpers/mail/Mail.java b/src/main/java/com/sendgrid/helpers/mail/Mail.java index 24eb19de..ea2b9739 100644 --- a/src/main/java/com/sendgrid/helpers/mail/Mail.java +++ b/src/main/java/com/sendgrid/helpers/mail/Mail.java @@ -236,7 +236,7 @@ public List getPersonalization() { } /** - * Add a personalizaton to the email. + * Add a personalization to the email. * * @param personalization a personalization. */ @@ -506,7 +506,7 @@ public void setReplyTo(Email replyTo) { } /** - * Create a string represenation of the Mail object JSON. + * Create a string representation of the Mail object JSON. * * @return a JSON string. * @throws IOException in case of a JSON marshal error. @@ -521,7 +521,7 @@ public String build() throws IOException { } /** - * Create a string represenation of the Mail object JSON and pretty print it. + * Create a string representation of the Mail object JSON and pretty print it. * * @return a pretty JSON string. * @throws IOException in case of a JSON marshal error. diff --git a/src/test/java/com/sendgrid/helpers/AttachmentBuilderTest.java b/src/test/java/com/sendgrid/helpers/AttachmentBuilderTest.java index 3ea3f379..adef08aa 100644 --- a/src/test/java/com/sendgrid/helpers/AttachmentBuilderTest.java +++ b/src/test/java/com/sendgrid/helpers/AttachmentBuilderTest.java @@ -18,18 +18,18 @@ public void testCreateAttachments() { String content = "This test checks if the builder works fine"; InputStream contentStream = new ByteArrayInputStream(content.getBytes(Charset.forName("UTF-8"))); String contentId = "someId"; - String dispositon = "someDisposition"; + String disposition = "someDisposition"; Attachments attachments = new Attachments.Builder(fileName, contentStream) .withType(type) .withContentId(contentId) - .withDisposition(dispositon) + .withDisposition(disposition) .build(); Assert.assertEquals(attachments.getType(), type); Assert.assertEquals(attachments.getFilename(), fileName); Assert.assertEquals(attachments.getContentId(), contentId); - Assert.assertEquals(attachments.getDisposition(), dispositon); + Assert.assertEquals(attachments.getDisposition(), disposition); Assert.assertEquals(attachments.getContent(), Base64.encodeBase64String(content.getBytes(Charset.forName("UTF-8")))); } From 054d4fcc47fa7fd0f8ddfdc089763ac93c410fb6 Mon Sep 17 00:00:00 2001 From: Josh Soref Date: Thu, 15 Oct 2020 11:48:22 -0400 Subject: [PATCH 235/345] chore: Fix PR link for PRs (#651) --- PULL_REQUEST_TEMPLATE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PULL_REQUEST_TEMPLATE.md b/PULL_REQUEST_TEMPLATE.md index a8681802..f5af09c3 100644 --- a/PULL_REQUEST_TEMPLATE.md +++ b/PULL_REQUEST_TEMPLATE.md @@ -21,7 +21,7 @@ A short description of what this PR does. ### Checklist - [ ] I acknowledge that all my contributions will be made under the project's license - [ ] I have made a material change to the repo (functionality, testing, spelling, grammar) -- [ ] I have read the [Contribution Guidelines](CONTRIBUTING.md) and my PR follows them +- [ ] I have read the [Contribution Guidelines](https://github.com/sendgrid/sendgrid-java/blob/main/CONTRIBUTING.md) and my PR follows them - [ ] I have titled the PR appropriately - [ ] I have updated my branch with the main branch - [ ] I have added tests that prove my fix is effective or that my feature works From 2eb923aef91daf5b370190af04faa149d7156216 Mon Sep 17 00:00:00 2001 From: Twilio Date: Thu, 15 Oct 2020 16:23:12 +0000 Subject: [PATCH 236/345] chore: update template files --- PULL_REQUEST_TEMPLATE.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/PULL_REQUEST_TEMPLATE.md b/PULL_REQUEST_TEMPLATE.md index f5af09c3..1b0763ca 100644 --- a/PULL_REQUEST_TEMPLATE.md +++ b/PULL_REQUEST_TEMPLATE.md @@ -19,13 +19,13 @@ Closes #2 A short description of what this PR does. ### Checklist -- [ ] I acknowledge that all my contributions will be made under the project's license +- [x] I acknowledge that all my contributions will be made under the project's license - [ ] I have made a material change to the repo (functionality, testing, spelling, grammar) - [ ] I have read the [Contribution Guidelines](https://github.com/sendgrid/sendgrid-java/blob/main/CONTRIBUTING.md) and my PR follows them - [ ] I have titled the PR appropriately - [ ] I have updated my branch with the main branch - [ ] I have added tests that prove my fix is effective or that my feature works -- [ ] I have added necessary documentation about the functionality in the appropriate .md file +- [ ] I have added the necessary documentation about the functionality in the appropriate .md file - [ ] I have added inline documentation to the code I modified If you have questions, please file a [support ticket](https://twilio.com/help/contact), or create a GitHub Issue in this repository. From 0f1a5ff13e8221486cd17b66231a5cf09ac7658c Mon Sep 17 00:00:00 2001 From: Twilio Date: Thu, 15 Oct 2020 16:33:49 +0000 Subject: [PATCH 237/345] chore: update template files --- PULL_REQUEST_TEMPLATE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PULL_REQUEST_TEMPLATE.md b/PULL_REQUEST_TEMPLATE.md index 1b0763ca..32f9ee30 100644 --- a/PULL_REQUEST_TEMPLATE.md +++ b/PULL_REQUEST_TEMPLATE.md @@ -28,4 +28,4 @@ A short description of what this PR does. - [ ] I have added the necessary documentation about the functionality in the appropriate .md file - [ ] I have added inline documentation to the code I modified -If you have questions, please file a [support ticket](https://twilio.com/help/contact), or create a GitHub Issue in this repository. +If you have questions, please file a [support ticket](https://support.sendgrid.com/hc/en-us), or create a GitHub Issue in this repository. From f6b3386e634462c5bcf4943eff0744f0c2ac5a68 Mon Sep 17 00:00:00 2001 From: Twilio Date: Thu, 15 Oct 2020 21:27:07 +0000 Subject: [PATCH 238/345] chore: update template files --- PULL_REQUEST_TEMPLATE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/PULL_REQUEST_TEMPLATE.md b/PULL_REQUEST_TEMPLATE.md index 32f9ee30..a2fca138 100644 --- a/PULL_REQUEST_TEMPLATE.md +++ b/PULL_REQUEST_TEMPLATE.md @@ -28,4 +28,4 @@ A short description of what this PR does. - [ ] I have added the necessary documentation about the functionality in the appropriate .md file - [ ] I have added inline documentation to the code I modified -If you have questions, please file a [support ticket](https://support.sendgrid.com/hc/en-us), or create a GitHub Issue in this repository. +If you have questions, please file a [support ticket](https://support.sendgrid.com), or create a GitHub Issue in this repository. From a38756798b05296db98de1c60ab2ea324612cac0 Mon Sep 17 00:00:00 2001 From: Twilio Date: Tue, 27 Oct 2020 21:32:27 +0000 Subject: [PATCH 239/345] chore: update template files --- LICENSE.md => LICENSE | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename LICENSE.md => LICENSE (100%) diff --git a/LICENSE.md b/LICENSE similarity index 100% rename from LICENSE.md rename to LICENSE From a95ef4836597da18250a834f33308ee9da44bbb7 Mon Sep 17 00:00:00 2001 From: Sam Harrison Date: Tue, 27 Oct 2020 16:42:34 -0500 Subject: [PATCH 240/345] chore: update license references --- README.md | 4 ++-- pom.xml | 4 ++-- src/test/java/com/sendgrid/LicenseTest.java | 2 +- src/test/java/com/sendgrid/TestRequiredFilesExist.java | 4 ++-- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index f0fdb548..3610fb10 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ [![Twitter Follow](https://img.shields.io/twitter/follow/sendgrid.svg?style=social&label=Follow)](https://twitter.com/sendgrid) [![GitHub contributors](https://img.shields.io/github/contributors/sendgrid/sendgrid-java.svg)](https://github.com/sendgrid/sendgrid-java/graphs/contributors) [![Open Source Helpers](https://www.codetriage.com/sendgrid/sendgrid-java/badges/users.svg)](https://www.codetriage.com/sendgrid/sendgrid-java) -[![MIT licensed](https://img.shields.io/badge/license-MIT-blue.svg)](./LICENSE.md) +[![MIT licensed](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE) **NEW:** Subscribe to email [notifications](https://dx.sendgrid.com/newsletter/java) for releases and breaking changes. @@ -233,4 +233,4 @@ If you've instead found a bug in the library or would like new features added, g # License -[The MIT License (MIT)](LICENSE.md) +[The MIT License (MIT)](LICENSE) diff --git a/pom.xml b/pom.xml index 37f5c201..439765b7 100644 --- a/pom.xml +++ b/pom.xml @@ -159,7 +159,7 @@ ${basedir} - LICENSE.md + LICENSE @@ -330,4 +330,4 @@ - \ No newline at end of file + diff --git a/src/test/java/com/sendgrid/LicenseTest.java b/src/test/java/com/sendgrid/LicenseTest.java index 96bf096c..1f96ef70 100644 --- a/src/test/java/com/sendgrid/LicenseTest.java +++ b/src/test/java/com/sendgrid/LicenseTest.java @@ -12,7 +12,7 @@ public class LicenseTest { @Test public void testLicenseShouldHaveCorrectYear() throws IOException { String copyrightText = null; - try (BufferedReader br = new BufferedReader(new FileReader("./LICENSE.md"))) { + try (BufferedReader br = new BufferedReader(new FileReader("./LICENSE"))) { for (String line; (line = br.readLine()) != null; ) { if (line.startsWith("Copyright")) { copyrightText = line; diff --git a/src/test/java/com/sendgrid/TestRequiredFilesExist.java b/src/test/java/com/sendgrid/TestRequiredFilesExist.java index 62eda186..4efc2f04 100644 --- a/src/test/java/com/sendgrid/TestRequiredFilesExist.java +++ b/src/test/java/com/sendgrid/TestRequiredFilesExist.java @@ -70,10 +70,10 @@ public void checkIssuesTemplateExists() { assertTrue(new File("./ISSUE_TEMPLATE.md").exists()); } - // ./LICENSE.md + // ./LICENSE @Test public void checkLicenseExists() { - assertTrue(new File("./LICENSE.md").exists()); + assertTrue(new File("./LICENSE").exists()); } // ./PULL_REQUEST_TEMPLATE.md From 2844ac05cf6f32a0fe7d7f6ef984133fba13f083 Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Fri, 30 Oct 2020 14:17:14 -0700 Subject: [PATCH 241/345] chore: update badge --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 3610fb10..75e809a3 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ ![SendGrid Logo](twilio_sendgrid_logo.png) -[![Travis Badge](https://travis-ci.org/sendgrid/sendgrid-java.svg?branch=main)](https://travis-ci.org/sendgrid/sendgrid-java) +[![Travis Badge](https://travis-ci.com/sendgrid/sendgrid-java.svg?branch=main)](https://travis-ci.com/sendgrid/sendgrid-java) [![Maven Central](https://img.shields.io/maven-central/v/com.sendgrid/sendgrid-java.svg)](http://mvnrepository.com/artifact/com.sendgrid/sendgrid-java) [![Email Notifications Badge](https://dx.sendgrid.com/badge/java)](https://dx.sendgrid.com/newsletter/java) [![Twitter Follow](https://img.shields.io/twitter/follow/sendgrid.svg?style=social&label=Follow)](https://twitter.com/sendgrid) From 7cf8b2835d88c3bb3830c8a62a6374b38ab60b37 Mon Sep 17 00:00:00 2001 From: Twilio Date: Thu, 5 Nov 2020 21:41:46 +0000 Subject: [PATCH 242/345] [Librarian] Version Bump --- CHANGELOG.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index b4779fe9..87888fb5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,13 @@ # Change Log All notable changes to this project will be documented in this file. +[2020-11-05] Version 4.6.8 +-------------------------- +**Library - Chore** +- [PR #651](https://github.com/sendgrid/sendgrid-java/pull/651): Fix PR link for PRs. Thanks to [@jsoref](https://github.com/jsoref)! +- [PR #650](https://github.com/sendgrid/sendgrid-java/pull/650): fix spelling typos. Thanks to [@jsoref](https://github.com/jsoref)! + + [2020-10-14] Version 4.6.7 -------------------------- **Library - Docs** From ab6708168678b7f7130e363e6f8448b1f0609186 Mon Sep 17 00:00:00 2001 From: Twilio Date: Thu, 5 Nov 2020 21:56:29 +0000 Subject: [PATCH 243/345] Release 4.6.8 --- CONTRIBUTING.md | 2 +- README.md | 8 ++++---- pom.xml | 8 ++++---- src/main/java/com/sendgrid/BaseInterface.java | 2 +- src/test/java/com/sendgrid/SendGridTest.java | 2 +- 5 files changed, 11 insertions(+), 11 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 0ccdb92b..cbd779c1 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -98,7 +98,7 @@ touch Example.java Add the example you want to test to Example.java, including the headers at the top of the file. ``` bash -javac -classpath ../repo/com/sendgrid/4.6.7/sendgrid-4.6.7-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.6.7/sendgrid-4.6.7-jar.jar:. Example +javac -classpath ../repo/com/sendgrid/4.6.8/sendgrid-4.6.8-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.6.8/sendgrid-4.6.8-jar.jar:. Example ``` diff --git a/README.md b/README.md index 75e809a3..e33997ca 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ **NEW:** Subscribe to email [notifications](https://dx.sendgrid.com/newsletter/java) for releases and breaking changes. -**The default branch name for this repository has been changed to `main` as of 4.6.7.** +**The default branch name for this repository has been changed to `main` as of 4.6.8.** **This library allows you to quickly and easily use the Twilio SendGrid Web API v3 via Java.** @@ -40,7 +40,7 @@ We appreciate your continued support, thank you! ## Prerequisites - Java 8 or 11 -- The Twilio SendGrid service, starting at the [free level](https://sendgrid.com/free?source=sendgrid-java) to send up to 4.6.7 emails for the first 30 days, then send 100 emails/day free forever or check out [our pricing](https://sendgrid.com/pricing?source=sendgrid-java). +- The Twilio SendGrid service, starting at the [free level](https://sendgrid.com/free?source=sendgrid-java) to send up to 4.6.8 emails for the first 30 days, then send 100 emails/day free forever or check out [our pricing](https://sendgrid.com/pricing?source=sendgrid-java). ## Setup Environment Variables @@ -68,7 +68,7 @@ Add the following to your build.gradle file in the root of your project. ... dependencies { ... - implementation 'com.sendgrid:sendgrid-java:4.6.7' + implementation 'com.sendgrid:sendgrid-java:4.6.8' } repositories { @@ -87,7 +87,7 @@ mvn install You can just drop the jar file in. It's a fat jar - it has all the dependencies built in. -[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.6.7/sendgrid-java.jar) +[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.6.8/sendgrid-java.jar) ## Dependencies diff --git a/pom.xml b/pom.xml index 439765b7..4bc94f9e 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ com.sendgrid sendgrid-java Twilio SendGrid Java helper library - 4.6.7 + 4.6.8 This Java module allows you to quickly and easily send emails through Twilio SendGrid using Java. https://github.com/sendgrid/sendgrid-java @@ -26,7 +26,7 @@ https://github.com/sendgrid/sendgrid-java scm:git:git@github.com:sendgrid/sendgrid-java.git scm:git:git@github.com:sendgrid/sendgrid-java.git - 4.6.7 + 4.6.8 @@ -318,7 +318,7 @@ org.bouncycastle bcprov-jdk15on - 1.66 + 1.67 @@ -330,4 +330,4 @@ - + \ No newline at end of file diff --git a/src/main/java/com/sendgrid/BaseInterface.java b/src/main/java/com/sendgrid/BaseInterface.java index ebab63ed..8f284f41 100644 --- a/src/main/java/com/sendgrid/BaseInterface.java +++ b/src/main/java/com/sendgrid/BaseInterface.java @@ -11,7 +11,7 @@ */ public abstract class BaseInterface implements SendGridAPI { - private static final String VERSION = "4.6.7"; + private static final String VERSION = "4.6.8"; private static final String USER_AGENT = "sendgrid/" + VERSION + ";java"; private static final int RATE_LIMIT_RESPONSE_CODE = 429; diff --git a/src/test/java/com/sendgrid/SendGridTest.java b/src/test/java/com/sendgrid/SendGridTest.java index f6556e87..e93c1199 100644 --- a/src/test/java/com/sendgrid/SendGridTest.java +++ b/src/test/java/com/sendgrid/SendGridTest.java @@ -43,7 +43,7 @@ public void testConstructWithClient() throws IOException { @Test public void testLibraryVersion() { SendGrid sg = new SendGrid(SENDGRID_API_KEY); - Assert.assertEquals(sg.getLibraryVersion(), "4.6.7"); + Assert.assertEquals(sg.getLibraryVersion(), "4.6.8"); } @Test From 4670d0613242dfa9bf196729898bc1b1b157598d Mon Sep 17 00:00:00 2001 From: Alex Date: Fri, 6 Nov 2020 22:49:30 +0300 Subject: [PATCH 244/345] docs: Fix code issues in examples/clients/clients.java (#357) --- examples/clients/GetEmailStatistics.java | 32 ++++++++++ .../GetEmailStatisticsByClientType.java | 32 ++++++++++ examples/clients/README.md | 6 ++ examples/clients/clients.java | 59 ------------------- 4 files changed, 70 insertions(+), 59 deletions(-) create mode 100644 examples/clients/GetEmailStatistics.java create mode 100644 examples/clients/GetEmailStatisticsByClientType.java create mode 100644 examples/clients/README.md delete mode 100644 examples/clients/clients.java diff --git a/examples/clients/GetEmailStatistics.java b/examples/clients/GetEmailStatistics.java new file mode 100644 index 00000000..632c817c --- /dev/null +++ b/examples/clients/GetEmailStatistics.java @@ -0,0 +1,32 @@ +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.*; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +////////////////////////////////////////////////////////////////// +// Retrieve email statistics by client type. +// GET /clients/stats + +public class GetEmailStatistics { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("clients/stats"); + request.addQueryParam("aggregated_by", "day"); + request.addQueryParam("start_date", "2016-01-01"); + request.addQueryParam("end_date", "2016-04-01"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/clients/GetEmailStatisticsByClientType.java b/examples/clients/GetEmailStatisticsByClientType.java new file mode 100644 index 00000000..eef0e2a2 --- /dev/null +++ b/examples/clients/GetEmailStatisticsByClientType.java @@ -0,0 +1,32 @@ +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.*; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +////////////////////////////////////////////////////////////////// +// Retrieve stats by a specific client type. +// GET /clients/{client_type}/stats + +public class GetEmailStatisticsByClientType { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint("clients/{client_type}/stats"); + request.addQueryParam("aggregated_by", "day"); + request.addQueryParam("start_date", "2016-01-01"); + request.addQueryParam("end_date", "2016-04-01"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} \ No newline at end of file diff --git a/examples/clients/README.md b/examples/clients/README.md new file mode 100644 index 00000000..0c74bd24 --- /dev/null +++ b/examples/clients/README.md @@ -0,0 +1,6 @@ +![SendGrid Logo](https://github.com/sendgrid/sendgrid-java/blob/main/twilio_sendgrid_logo.png) + +This folder contains various examples on using the CLIENTS endpoint of SendGrid with Java: + +* [Retrieve email statistics by client type (GET /clients/stats)](GetEmailStatistics.java) +* [Retrieve stats by a specific client type (GET /clients/{client_type}/stats)](GetEmailStatisticsByClientType.java) diff --git a/examples/clients/clients.java b/examples/clients/clients.java deleted file mode 100644 index 9b755d86..00000000 --- a/examples/clients/clients.java +++ /dev/null @@ -1,59 +0,0 @@ -import com.fasterxml.jackson.databind.JsonNode; -import com.fasterxml.jackson.databind.ObjectMapper; - -import com.sendgrid.*; - -import java.io.IOException; -import java.util.HashMap; -import java.util.Map; - -////////////////////////////////////////////////////////////////// -// Retrieve email statistics by client type. -// GET /clients/stats - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("clients/stats"); - request.addQueryParam("aggregated_by", "day"); - request.addQueryParam("start_date", "2016-01-01"); - request.addQueryParam("end_date", "2016-04-01"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - -////////////////////////////////////////////////////////////////// -// Retrieve stats by a specific client type. -// GET /clients/{client_type}/stats - - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.GET); - request.setEndpoint("clients/{client_type}/stats"); - request.addQueryParam("aggregated_by", "day"); - request.addQueryParam("start_date", "2016-01-01"); - request.addQueryParam("end_date", "2016-04-01"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} - From e612f643f632438f9d073588f248f6be4fdce8b8 Mon Sep 17 00:00:00 2001 From: Deepa Panwar Date: Sat, 7 Nov 2020 01:29:53 +0530 Subject: [PATCH 245/345] docs: Save attachment to Dropbox (#304) --- examples/dropbox/UploadToDropBox.java | 63 +++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 examples/dropbox/UploadToDropBox.java diff --git a/examples/dropbox/UploadToDropBox.java b/examples/dropbox/UploadToDropBox.java new file mode 100644 index 00000000..ae21fc76 --- /dev/null +++ b/examples/dropbox/UploadToDropBox.java @@ -0,0 +1,63 @@ +package dropbox; + +import com.dropbox.core.DbxRequestConfig; +import com.dropbox.core.v2.DbxClientV2; +import com.dropbox.core.v2.files.FileMetadata; +import com.sendgrid.Attachments; +import org.apache.commons.codec.binary.Base64; + +import java.io.ByteArrayInputStream; +import java.io.InputStream; +import java.nio.charset.Charset; +/* + Add Dropbox dependencies for compiling code + Gradle : compile 'com.dropbox.core:dropbox-core-sdk:3.0.5' + maven : + + com.dropbox.core + dropbox-core-sdk + 3.0.5 + + */ +public class UploadToDropBox { + public static void main(String[] args) { + String fileName = "book3.txt"; + String type = "text/plain"; + String content = "This test checks if the builder works fine"; + InputStream contentStream = new ByteArrayInputStream(content.getBytes(Charset.forName("UTF-8"))); + String contentId = "someId"; + String dispositon = "someDisposition"; + String accessToken = "user's access token"; + String path = "/path/to/folder"; + + Attachments attachments = new Attachments.Builder(fileName, contentStream) + .withType(type) + .withContentId(contentId) + .withDisposition(dispositon) + .build(); + String returnPath = uploadToDropbox(attachments, accessToken, path); + System.out.println("Path: " + returnPath); + } + + /** + * Uploads attachment to Dropbox + * + * @param attachments attachment to be uploaded + * @param accessToken user's Dropbox access token + * @param path path of the folder in which attachment needs to be added. Should not end with / + * @return the full path to the uploaded file + */ + private static String uploadToDropbox(Attachments attachments, String accessToken, String path){ + try { + DbxRequestConfig config = DbxRequestConfig.newBuilder("sendgrid/0.1").build(); + DbxClientV2 client = new DbxClientV2(config, accessToken); + FileMetadata uploadedFile = client.files().upload(String.format("%s/%s", path, attachments.getFilename())) + .uploadAndFinish(new ByteArrayInputStream((Base64.decodeBase64(attachments.getContent())))); + return uploadedFile.getPathDisplay(); + }catch(Exception ex) { + throw new RuntimeException("Error while uploading to Dropbox", ex); + } + } + +} + From 8e95e95c4ca57dbc92523b640ac7565540370f0c Mon Sep 17 00:00:00 2001 From: David Eriksson Date: Fri, 6 Nov 2020 21:01:54 +0100 Subject: [PATCH 246/345] docs: Correct number of free emails (#628) --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e33997ca..26ee7c3a 100644 --- a/README.md +++ b/README.md @@ -40,7 +40,7 @@ We appreciate your continued support, thank you! ## Prerequisites - Java 8 or 11 -- The Twilio SendGrid service, starting at the [free level](https://sendgrid.com/free?source=sendgrid-java) to send up to 4.6.8 emails for the first 30 days, then send 100 emails/day free forever or check out [our pricing](https://sendgrid.com/pricing?source=sendgrid-java). +- The Twilio SendGrid service, starting at the [free level](https://sendgrid.com/free?source=sendgrid-java) to send up to 40,000 emails for the first 30 days, then send 100 emails/day free forever or check out [our pricing](https://sendgrid.com/pricing?source=sendgrid-java). ## Setup Environment Variables From 68b230ab238b5b716bc3038a77f2618cf09bd37c Mon Sep 17 00:00:00 2001 From: Sam Harrison Date: Fri, 6 Nov 2020 14:05:22 -0600 Subject: [PATCH 247/345] chore: format example --- examples/dropbox/UploadToDropBox.java | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/examples/dropbox/UploadToDropBox.java b/examples/dropbox/UploadToDropBox.java index ae21fc76..1d729cd1 100644 --- a/examples/dropbox/UploadToDropBox.java +++ b/examples/dropbox/UploadToDropBox.java @@ -9,6 +9,7 @@ import java.io.ByteArrayInputStream; import java.io.InputStream; import java.nio.charset.Charset; + /* Add Dropbox dependencies for compiling code Gradle : compile 'com.dropbox.core:dropbox-core-sdk:3.0.5' @@ -31,10 +32,10 @@ public static void main(String[] args) { String path = "/path/to/folder"; Attachments attachments = new Attachments.Builder(fileName, contentStream) - .withType(type) - .withContentId(contentId) - .withDisposition(dispositon) - .build(); + .withType(type) + .withContentId(contentId) + .withDisposition(dispositon) + .build(); String returnPath = uploadToDropbox(attachments, accessToken, path); System.out.println("Path: " + returnPath); } @@ -44,20 +45,18 @@ public static void main(String[] args) { * * @param attachments attachment to be uploaded * @param accessToken user's Dropbox access token - * @param path path of the folder in which attachment needs to be added. Should not end with / + * @param path path of the folder in which attachment needs to be added. Should not end with / * @return the full path to the uploaded file */ - private static String uploadToDropbox(Attachments attachments, String accessToken, String path){ + private static String uploadToDropbox(Attachments attachments, String accessToken, String path) { try { DbxRequestConfig config = DbxRequestConfig.newBuilder("sendgrid/0.1").build(); DbxClientV2 client = new DbxClientV2(config, accessToken); FileMetadata uploadedFile = client.files().upload(String.format("%s/%s", path, attachments.getFilename())) - .uploadAndFinish(new ByteArrayInputStream((Base64.decodeBase64(attachments.getContent())))); + .uploadAndFinish(new ByteArrayInputStream((Base64.decodeBase64(attachments.getContent())))); return uploadedFile.getPathDisplay(); - }catch(Exception ex) { + } catch (Exception ex) { throw new RuntimeException("Error while uploading to Dropbox", ex); } } - } - From baad44497006fe17097f0d01e35295fa5a655ec2 Mon Sep 17 00:00:00 2001 From: Clayton Chu Date: Fri, 6 Nov 2020 15:22:53 -0500 Subject: [PATCH 248/345] docs: Fixes Javadoc errors in Attachments.java (#418) --- .../java/com/sendgrid/helpers/mail/objects/Attachments.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/Attachments.java b/src/main/java/com/sendgrid/helpers/mail/objects/Attachments.java index 9a3ff1b4..873475d7 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/Attachments.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/Attachments.java @@ -211,6 +211,7 @@ private String encodeToBase64(InputStream content) { * Set the type of this attachment builder. * * @param type the attachment type. + * @return attachment builder object. */ public Builder withType(String type) { this.type = type; @@ -221,6 +222,7 @@ public Builder withType(String type) { * Set the disposition of this attachment builder. * * @param disposition the disposition. + * @return attachment builder object. */ public Builder withDisposition(String disposition) { this.disposition = disposition; @@ -231,6 +233,7 @@ public Builder withDisposition(String disposition) { * Set the content ID of this attachment builder. * * @param contentId the content ID. + * @return attachment builder object. */ public Builder withContentId(String contentId) { this.contentId = contentId; @@ -239,6 +242,7 @@ public Builder withContentId(String contentId) { /** * Construct the attachments object. + * @return the attachments object constructed. */ public Attachments build() { Attachments attachments = new Attachments(); From b417e6c18e157349d8daa191c7554097dcb57ad6 Mon Sep 17 00:00:00 2001 From: Jamie Tanna Date: Fri, 6 Nov 2020 20:36:20 +0000 Subject: [PATCH 249/345] docs: Create use-cases directory (#405) Move each separate use case into their own separate files, linked from the `use-cases` directory. Closes #401. --- USE_CASES.md | 328 --------------------------- use-cases/README.md | 9 + use-cases/domain-authentication.md | 11 + use-cases/email-statistics.md | 5 + use-cases/transactional-templates.md | 107 +++++++++ 5 files changed, 132 insertions(+), 328 deletions(-) delete mode 100644 USE_CASES.md create mode 100644 use-cases/README.md create mode 100644 use-cases/domain-authentication.md create mode 100644 use-cases/email-statistics.md create mode 100644 use-cases/transactional-templates.md diff --git a/USE_CASES.md b/USE_CASES.md deleted file mode 100644 index b9b0613a..00000000 --- a/USE_CASES.md +++ /dev/null @@ -1,328 +0,0 @@ -This document provides examples for specific use cases. Please [open an issue](https://github.com/sendgrid/sendgrid-java/issues) or make a pull request for any use cases you would like us to document here. Thank you! - -# Use Cases - -* [Send Mail Examples](examples/helpers/mail/Example.java) - * [Send a Single Email to Multiple Recipients](examples/helpers/mail/SingleEmailMultipleRecipients.java) - * [Send Multiple Emails to Multiple Recipients](examples/helpers/mail/MultipleEmailsMultipleRecipients.java) -* [Transactional Templates](#transactional-templates) -* [Legacy Templates](#legacy-templates) -* [How to Setup a Domain Authentication](#domain-authentication) -* [How to View Email Statistics](#how-to-view-email-statistics) -* [Send an Email With Twilio Email (Pilot)](#send-an-email-with-twilio-email-pilot) -* [Send an SMS Message](#send-an-sms-message) - -# Transactional Templates - -For this example, we assume you have created a [dynamic transactional template](https://sendgrid.com/docs/ui/sending-email/how-to-send-an-email-with-dynamic-transactional-templates/) in the UI or via the API. Following is the template content we used for testing. - -Template ID (replace with your own): - -```text -d-2c214ac919e84170b21855cc129b4a5f -``` -Email Subject: - -```text -{{subject}} -``` -Template Body: - -```html - - - - - - Hello {{name}}, -

- I'm glad you are trying out the template feature! -

- I hope you are having a great day in {{city}} :) -

- - -``` - -## With Mail Helper Class - -```java -import com.sendgrid.*; -import java.io.IOException; - -public class Example { - public static void main(String[] args) throws IOException { - Mail mail = new Mail(); - mail.setFrom(new Email("tester@example.com")); - mail.setTemplateId("d-2c214ac919e84170b21855cc129b4a5f"); - - Personalization personalization = new Personalization(); - personalization.addDynamicTemplateData("subject", "Testing Templates"); - personalization.addDynamicTemplateData("name", "Example User"); - personalization.addDynamicTemplateData("city", "Denver"); - personalization.addTo(new Email("test@example.com")); - mail.addPersonalization(personalization); - - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - try { - request.setMethod(Method.POST); - request.setEndpoint("mail/send"); - request.setBody(mail.build()); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} -``` - -## Without Mail Helper Class - -```java -import com.sendgrid.*; -import java.io.IOException; - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.POST); - request.setEndpoint("mail/send"); - request.setBody("{ - \"from\": {\"email\": \"test@example.com\"}, - \"personalizations\": - [{ - \"to\": [{\"email\": \"test@example.com\"}], - \"dynamic_template_data\": {\"subject\": \"Testing Templates\",\"name\": \"Example User\", \"city\": \"Denver\"} - }], - \"template_id\": \"d-2c214ac919e84170b21855cc129b4a5f\"}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} -``` - -# Legacy Templates - -For this example, we assume you have created a [legacy transactional template](https://sendgrid.com/docs/User_Guide/Transactional_Templates/index.html) in the UI or via the API. Following is the template content we used for testing. - -Template ID (replace with your own): - -```text -13b8f94f-bcae-4ec6-b752-70d6cb59f932 -``` - -Email Subject: - -```text -<%subject%> -``` - -Template Body: - -```html - - - - - - Hello -name-, -

- I'm glad you are trying out the template feature! -

- <%body%> -

- I hope you are having a great day in -city- :) -

- - -``` - -## With Mail Helper Class - -```java -import com.sendgrid.*; -import java.io.IOException; - -public class Example { - public static void main(String[] args) throws IOException { - Email from = new Email("test@example.com"); - String subject = "I'm replacing the subject tag"; - Email to = new Email("test@example.com"); - Content content = new Content("text/html", "I'm replacing the body tag"); - Mail mail = new Mail(from, subject, to, content); - mail.personalization.get(0).addSubstitution("-name-", "Example User"); - mail.personalization.get(0).addSubstitution("-city-", "Denver"); - mail.setTemplateId("13b8f94f-bcae-4ec6-b752-70d6cb59f932"); - - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - try { - request.setMethod(Method.POST); - request.setEndpoint("mail/send"); - request.setBody(mail.build()); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} -``` - -## Without Mail Helper Class - -```java -import com.sendgrid.*; -import java.io.IOException; - -public class Example { - public static void main(String[] args) throws IOException { - try { - SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); - Request request = new Request(); - request.setMethod(Method.POST); - request.setEndpoint("mail/send"); - request.setBody("{ - \"personalizations\": - [{ - \"to\": [{\"email\": \"test@example.com\"}], - \"substitutions\": {\"-name-\": \"Example User\", \"-city-\": \"Denver\"}, - \"subject\": \"Hello World from the Twilio SendGrid Java Library!\" - }], - \"from\": {\"email\": \"test@example.com\"}, - \"content\": - [{ - \"type\": \"text/html\", - \"value\": \"I'm replacing the body tag\" - }] - ,\"template_id\": \"13b8f94f-bcae-4ec6-b752-70d6cb59f932\"}"); - Response response = sg.api(request); - System.out.println(response.getStatusCode()); - System.out.println(response.getBody()); - System.out.println(response.getHeaders()); - } catch (IOException ex) { - throw ex; - } - } -} -``` - - -# How to Setup a Domain Authentication - -You can find documentation for how to set up a domain authentication via the UI [here](https://sendgrid.com/docs/ui/account-and-settings/how-to-set-up-domain-authentication/) and via API [here](USAGE.md#sender-authentication). - -Find more information about all of Twilio SendGrid's authentication related documentation [here](https://sendgrid.com/docs/ui/account-and-settings/). - -# How to View Email Statistics - -You can find documentation for how to view your email statistics via the UI [here](https://app.sendgrid.com/statistics) and via API [here](USAGE.md#stats). - -Alternatively, we can post events to a URL of your choice via our [Event Webhook](https://sendgrid.com/docs/API_Reference/Webhooks/event.html) about events that occur as Twilio SendGrid processes your email. - -# Send an Email With Twilio Email (Pilot) - -### 1. Obtain a Free Twilio Account - -Sign up for a free Twilio account [here](https://www.twilio.com/try-twilio?source=sendgrid-java). - -### 2. Set Up Your Environment Variables - -The Twilio API allows for authentication using with either an API key/secret or your Account SID/Auth Token. You can create an API key [here](https://twil.io/get-api-key) or obtain your Account SID and Auth Token [here](https://twil.io/console). - -Once you have those, follow the steps below based on your operating system. - -#### Linux/Mac - -```bash -echo "export TWILIO_API_KEY='YOUR_TWILIO_API_KEY'" > twilio.env -echo "export TWILIO_API_SECRET='YOUR_TWILIO_API_SECRET'" >> twilio.env - -# or - -echo "export TWILIO_ACCOUNT_SID='YOUR_TWILIO_ACCOUNT_SID'" > twilio.env -echo "export TWILIO_AUTH_TOKEN='YOUR_TWILIO_AUTH_TOKEN'" >> twilio.env -``` - -Then: - -```bash -echo "twilio.env" >> .gitignore -source ./twilio.env -``` - -#### Windows - -Temporarily set the environment variable (accessible only during the current CLI session): - -```bash -set TWILIO_API_KEY=YOUR_TWILIO_API_KEY -set TWILIO_API_SECRET=YOUR_TWILIO_API_SECRET - -: or - -set TWILIO_ACCOUNT_SID=YOUR_TWILIO_ACCOUNT_SID -set TWILIO_AUTH_TOKEN=YOUR_TWILIO_AUTH_TOKEN -``` - -Or permanently set the environment variable (accessible in all subsequent CLI sessions): - -```bash -setx TWILIO_API_KEY "YOUR_TWILIO_API_KEY" -setx TWILIO_API_SECRET "YOUR_TWILIO_API_SECRET" - -: or - -setx TWILIO_ACCOUNT_SID "YOUR_TWILIO_ACCOUNT_SID" -setx TWILIO_AUTH_TOKEN "YOUR_TWILIO_AUTH_TOKEN" -``` - -### 3. Initialize the Twilio Email Client - -```java -TwilioEmail mailClient = new TwilioEmail(System.getenv("TWILIO_API_KEY"), System.getenv("TWILIO_API_SECRET")); - -// or - -TwilioEmail mailClient = new TwilioEmail(System.getenv("TWILIO_ACCOUNT_SID"), System.getenv("TWILIO_AUTH_TOKEN")); -``` - -This client has the same interface as the `SendGrid` client. - -# Send an SMS Message - -First, follow the above steps for creating a Twilio account and setting up environment variables with the proper credentials. - -Then, install the Twilio Helper Library by following the [installation steps](https://github.com/twilio/twilio-java#installation). - -Finally, send a message. - -```java -String accountSid = System.getenv("TWILIO_ACCOUNT_SID"); -String authToken = System.getenv("TWILIO_AUTH_TOKEN"); - -Twilio.init(accountSid, authToken); - -Message message = Message.creator( - new PhoneNumber("+15558881234"), // To number - new PhoneNumber("+15559994321"), // From number - "Hello world!" // SMS body -).create(); - -System.out.println(message.getSid()); -``` - -For more information, please visit the [Twilio SMS Java documentation](https://www.twilio.com/docs/sms/quickstart/java). diff --git a/use-cases/README.md b/use-cases/README.md new file mode 100644 index 00000000..35fd401d --- /dev/null +++ b/use-cases/README.md @@ -0,0 +1,9 @@ +# Use Cases + +This directory provides examples for specific use cases. + +Please [open an issue](https://github.com/sendgrid/sendgrid-java/issues/new) or make a pull request for any use cases you would like us to document here. Thank you! + +* [Transactional Templates](transactional-templates.md) +* [How to Setup a Domain Authentication](domain-authentication.md) +* [How to View Email Statistics](email-statistics.md) diff --git a/use-cases/domain-authentication.md b/use-cases/domain-authentication.md new file mode 100644 index 00000000..5bc6a750 --- /dev/null +++ b/use-cases/domain-authentication.md @@ -0,0 +1,11 @@ +# How to Setup a Domain Authentication + +You can find documentation for how to set up a domain authentication via the UI [here](https://sendgrid.com/docs/ui/account-and-settings/how-to-set-up-domain-authentication/) and via API [here](USAGE.md#sender-authentication). + +Find more information about all of Twilio SendGrid's authentication related documentation [here](https://sendgrid.com/docs/ui/account-and-settings/). + +# How to View Email Statistics + +You can find documentation for how to view your email statistics via the UI [here](https://app.sendgrid.com/statistics) and via API [here](USAGE.md#stats). + +Alternatively, we can post events to a URL of your choice via our [Event Webhook](https://sendgrid.com/docs/API_Reference/Webhooks/event.html) about events that occur as Twilio SendGrid processes your email. diff --git a/use-cases/email-statistics.md b/use-cases/email-statistics.md new file mode 100644 index 00000000..ace54b6a --- /dev/null +++ b/use-cases/email-statistics.md @@ -0,0 +1,5 @@ +# How to View Email Statistics + +You can find documentation for how to view your email statistics via the UI [here](https://app.sendgrid.com/statistics) and via API [here](USAGE.md#stats). + +Alternatively, we can post events to a URL of your choice via our [Event Webhook](https://sendgrid.com/docs/API_Reference/Webhooks/event.html) about events that occur as Twilio SendGrid processes your email. diff --git a/use-cases/transactional-templates.md b/use-cases/transactional-templates.md new file mode 100644 index 00000000..bb908733 --- /dev/null +++ b/use-cases/transactional-templates.md @@ -0,0 +1,107 @@ +# Transactional Templates + +For this example, we assume you have created a [transactional template](https://sendgrid.com/docs/User_Guide/Transactional_Templates/index.html). Following is the template content we used for testing. + +Template ID (replace with your own): + +```text +13b8f94f-bcae-4ec6-b752-70d6cb59f932 +``` + +Email Subject: + +```text +<%subject%> +``` + +Template Body: + +```html + + + + + + Hello -name-, +

+ I'm glad you are trying out the template feature! +

+ <%body%> +

+ I hope you are having a great day in -city- :) +

+ + +``` + +## With Mail Helper Class + +```java +import com.sendgrid.*; +import java.io.IOException; + +public class Example { + public static void main(String[] args) throws IOException { + Email from = new Email("test@example.com"); + String subject = "I'm replacing the subject tag"; + Email to = new Email("test@example.com"); + Content content = new Content("text/html", "I'm replacing the body tag"); + Mail mail = new Mail(from, subject, to, content); + mail.personalization.get(0).addSubstitution("-name-", "Example User"); + mail.personalization.get(0).addSubstitution("-city-", "Denver"); + mail.setTemplateId("13b8f94f-bcae-4ec6-b752-70d6cb59f932"); + + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + request.setMethod(Method.POST); + request.setEndpoint("mail/send"); + request.setBody(mail.build()); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} +``` + +## Without Mail Helper Class + +```java +import com.sendgrid.*; +import java.io.IOException; + +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.POST); + request.setEndpoint("mail/send"); + request.setBody("{ + \"personalizations\": + [{ + \"to\": [{\"email\": \"test@example.com\"}], + \"substitutions\": {\"-name-\": \"Example User\", \"-city-\": \"Denver\"}, + \"subject\": \"Hello World from the Twilio SendGrid Java Library!\" + }], + \"from\": {\"email\": \"test@example.com\"}, + \"content\": + [{ + \"type\": \"text/html\", + \"value\": \"I'm replacing the body tag\" + }] + ,\"template_id\": \"13b8f94f-bcae-4ec6-b752-70d6cb59f932\"}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} +``` From fd6919537c9845e9ed1086905eb0e02ffd0e5721 Mon Sep 17 00:00:00 2001 From: Sam Harrison Date: Fri, 6 Nov 2020 14:43:23 -0600 Subject: [PATCH 250/345] docs: add additional use cases back --- use-cases/README.md | 15 +++-- use-cases/legacy-templates.md | 104 ++++++++++++++++++++++++++++++++++ use-cases/sms.md | 19 +++++++ use-cases/twilio-email.md | 11 ++++ use-cases/twilio-setup.md | 48 ++++++++++++++++ 5 files changed, 193 insertions(+), 4 deletions(-) create mode 100644 use-cases/legacy-templates.md create mode 100644 use-cases/sms.md create mode 100644 use-cases/twilio-email.md create mode 100644 use-cases/twilio-setup.md diff --git a/use-cases/README.md b/use-cases/README.md index 35fd401d..988af54c 100644 --- a/use-cases/README.md +++ b/use-cases/README.md @@ -1,9 +1,16 @@ -# Use Cases - This directory provides examples for specific use cases. -Please [open an issue](https://github.com/sendgrid/sendgrid-java/issues/new) or make a pull request for any use cases you would like us to document here. Thank you! +Please [open an issue](https://github.com/sendgrid/sendgrid-ruby/issues) or [make a pull request](https://github.com/sendgrid/sendgrid-ruby/pulls) for any use cases you would like us to document here. Thank you! +# Email Use Cases * [Transactional Templates](transactional-templates.md) -* [How to Setup a Domain Authentication](domain-authentication.md) +* [Legacy Templates](legacy-templates.md) + +# Twilio Use Cases +* [Twilio Setup](twilio-setup.md) +* [Send an Email With Twilio Email (Pilot)](twilio-email.md) +* [Send an SMS Message](sms.md) + +# Non-Email Use Cases +* [How to Set up a Domain Authentication](domain-authentication.md) * [How to View Email Statistics](email-statistics.md) diff --git a/use-cases/legacy-templates.md b/use-cases/legacy-templates.md new file mode 100644 index 00000000..70239088 --- /dev/null +++ b/use-cases/legacy-templates.md @@ -0,0 +1,104 @@ +# Legacy Templates + +For this example, we assume you have created a [legacy transactional template](https://sendgrid.com/docs/User_Guide/Transactional_Templates/index.html) in the UI or via the API. Following is the template content we used for testing. + +Template ID (replace with your own): + +```text +13b8f94f-bcae-4ec6-b752-70d6cb59f932 +``` + +Email Subject: + +```text +<%subject%> +``` + +Template Body: + +```html + + + + + + Hello -name-, +

+ I'm glad you are trying out the template feature! +

+ <%body%> +

+ I hope you are having a great day in -city- :) +

+ + +``` + +## With Mail Helper Class + +```java +import com.sendgrid.*; +import java.io.IOException; +public class Example { + public static void main(String[] args) throws IOException { + Email from = new Email("test@example.com"); + String subject = "I'm replacing the subject tag"; + Email to = new Email("test@example.com"); + Content content = new Content("text/html", "I'm replacing the body tag"); + Mail mail = new Mail(from, subject, to, content); + mail.personalization.get(0).addSubstitution("-name-", "Example User"); + mail.personalization.get(0).addSubstitution("-city-", "Denver"); + mail.setTemplateId("13b8f94f-bcae-4ec6-b752-70d6cb59f932"); + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + request.setMethod(Method.POST); + request.setEndpoint("mail/send"); + request.setBody(mail.build()); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} +``` + +## Without Mail Helper Class + +```java +import com.sendgrid.*; +import java.io.IOException; +public class Example { + public static void main(String[] args) throws IOException { + try { + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + request.setMethod(Method.POST); + request.setEndpoint("mail/send"); + request.setBody("{ + \"personalizations\": + [{ + \"to\": [{\"email\": \"test@example.com\"}], + \"substitutions\": {\"-name-\": \"Example User\", \"-city-\": \"Denver\"}, + \"subject\": \"Hello World from the Twilio SendGrid Java Library!\" + }], + \"from\": {\"email\": \"test@example.com\"}, + \"content\": + [{ + \"type\": \"text/html\", + \"value\": \"I'm replacing the body tag\" + }] + ,\"template_id\": \"13b8f94f-bcae-4ec6-b752-70d6cb59f932\"}"); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} +``` diff --git a/use-cases/sms.md b/use-cases/sms.md new file mode 100644 index 00000000..3dfe4cfa --- /dev/null +++ b/use-cases/sms.md @@ -0,0 +1,19 @@ +First, follow the [Twilio Setup](twilio-setup.md) guide for creating a Twilio account and setting up environment variables with the proper credentials. + +Then, install the Twilio Helper Library by following the [installation steps](https://github.com/twilio/twilio-java#installation). + +Finally, send a message. + +```java +String accountSid = System.getenv("TWILIO_ACCOUNT_SID"); +String authToken = System.getenv("TWILIO_AUTH_TOKEN"); +Twilio.init(accountSid, authToken); +Message message = Message.creator( + new PhoneNumber("+15558881234"), // To number + new PhoneNumber("+15559994321"), // From number + "Hello world!" // SMS body +).create(); +System.out.println(message.getSid()); +``` + +For more information, please visit the [Twilio SMS Java documentation](https://www.twilio.com/docs/sms/quickstart/java). diff --git a/use-cases/twilio-email.md b/use-cases/twilio-email.md new file mode 100644 index 00000000..a0227a0f --- /dev/null +++ b/use-cases/twilio-email.md @@ -0,0 +1,11 @@ +First, follow the [Twilio Setup](twilio-setup.md) guide for creating a Twilio account and setting up environment variables with the proper credentials. + +Then, initialize the Twilio Email Client. + +```java +TwilioEmail mailClient = new TwilioEmail(System.getenv("TWILIO_API_KEY"), System.getenv("TWILIO_API_SECRET")); +// or +TwilioEmail mailClient = new TwilioEmail(System.getenv("TWILIO_ACCOUNT_SID"), System.getenv("TWILIO_AUTH_TOKEN")); +``` + +This client has the same interface as the `SendGrid` client. diff --git a/use-cases/twilio-setup.md b/use-cases/twilio-setup.md new file mode 100644 index 00000000..7c3c37fc --- /dev/null +++ b/use-cases/twilio-setup.md @@ -0,0 +1,48 @@ +### 1. Obtain a Free Twilio Account + +Sign up for a free Twilio account [here](https://www.twilio.com/try-twilio?source=sendgrid-java). + +### 2. Set Up Your Environment Variables + +The Twilio API allows for authentication using with either an API key/secret or your Account SID/Auth Token. You can create an API key [here](https://twil.io/get-api-key) or obtain your Account SID and Auth Token [here](https://twil.io/console). + +Once you have those, follow the steps below based on your operating system. + +#### Linux/Mac + +```bash +echo "export TWILIO_API_KEY='YOUR_TWILIO_API_KEY'" > twilio.env +echo "export TWILIO_API_SECRET='YOUR_TWILIO_API_SECRET'" >> twilio.env +# or +echo "export TWILIO_ACCOUNT_SID='YOUR_TWILIO_ACCOUNT_SID'" > twilio.env +echo "export TWILIO_AUTH_TOKEN='YOUR_TWILIO_AUTH_TOKEN'" >> twilio.env +``` + +Then: + +```bash +echo "twilio.env" >> .gitignore +source ./twilio.env +``` + +#### Windows + +Temporarily set the environment variable (accessible only during the current CLI session): + +```bash +set TWILIO_API_KEY=YOUR_TWILIO_API_KEY +set TWILIO_API_SECRET=YOUR_TWILIO_API_SECRET +: or +set TWILIO_ACCOUNT_SID=YOUR_TWILIO_ACCOUNT_SID +set TWILIO_AUTH_TOKEN=YOUR_TWILIO_AUTH_TOKEN +``` + +Or permanently set the environment variable (accessible in all subsequent CLI sessions): + +```bash +setx TWILIO_API_KEY "YOUR_TWILIO_API_KEY" +setx TWILIO_API_SECRET "YOUR_TWILIO_API_SECRET" +: or +setx TWILIO_ACCOUNT_SID "YOUR_TWILIO_ACCOUNT_SID" +setx TWILIO_AUTH_TOKEN "YOUR_TWILIO_AUTH_TOKEN" +``` From e0454aacd20af93640115bfef9b5e5764b672632 Mon Sep 17 00:00:00 2001 From: Sam Harrison Date: Mon, 9 Nov 2020 10:57:15 -0600 Subject: [PATCH 251/345] chore: update required files tests --- .../com/sendgrid/TestRequiredFilesExist.java | 19 ++----------------- 1 file changed, 2 insertions(+), 17 deletions(-) diff --git a/src/test/java/com/sendgrid/TestRequiredFilesExist.java b/src/test/java/com/sendgrid/TestRequiredFilesExist.java index 4efc2f04..d6e000d0 100644 --- a/src/test/java/com/sendgrid/TestRequiredFilesExist.java +++ b/src/test/java/com/sendgrid/TestRequiredFilesExist.java @@ -7,21 +7,12 @@ public class TestRequiredFilesExist { - // ./Docker or docker/Docker + // ./Dockerfile @Test public void checkDockerExists() { - boolean dockerExists = new File("./Dockerfile").exists() || - new File("./docker/Dockerfile").exists(); - assertTrue(dockerExists); + assertTrue(new File("./Dockerfile").exists()); } - // // ./docker-compose.yml or ./docker/docker-compose.yml - // @Test public void checkDockerComposeExists() { - // boolean dockerComposeExists = new File("./docker-compose.yml").exists() || - // new File("./docker/docker-compose.yml").exists(); - // assertTrue(dockerComposeExists); - // } - // ./.env_sample @Test public void checkEnvSampleExists() { @@ -99,10 +90,4 @@ public void checkTroubleShootingGuideExists() { public void checkUsageGuideExists() { assertTrue(new File("./USAGE.md").exists()); } - - // ./USE_CASES.md - @Test - public void checkUseCases() { - assertTrue(new File("./USE_CASES.md").exists()); - } } From 461315ce3417505742ad28d51f0a12e2bf365278 Mon Sep 17 00:00:00 2001 From: Alex Date: Mon, 9 Nov 2020 20:08:31 +0300 Subject: [PATCH 252/345] feat: Add helper for get unassigned IPs (#292) --- .../com/sendgrid/helpers/ips/IPAddress.java | 120 ++++++++++++++++++ .../com/sendgrid/helpers/ips/IPsHelper.java | 47 +++++++ 2 files changed, 167 insertions(+) create mode 100644 src/main/java/com/sendgrid/helpers/ips/IPAddress.java create mode 100644 src/main/java/com/sendgrid/helpers/ips/IPsHelper.java diff --git a/src/main/java/com/sendgrid/helpers/ips/IPAddress.java b/src/main/java/com/sendgrid/helpers/ips/IPAddress.java new file mode 100644 index 00000000..e190cdb9 --- /dev/null +++ b/src/main/java/com/sendgrid/helpers/ips/IPAddress.java @@ -0,0 +1,120 @@ +package com.sendgrid.helpers.ips; + +import com.fasterxml.jackson.annotation.JsonProperty; + +import java.util.List; + +public class IPAddress { + + /** + * An IP address. + */ + @JsonProperty("ip") + private String ip; + + /** + * The subusers that are able to send email from this IP. + */ + @JsonProperty("subusers") + private List subUsers; + + /** + * The reverse DNS record for this IP address. + */ + @JsonProperty("rdns") + private String rdns; + + /** + * The IP pools that this IP has been added to. + */ + @JsonProperty("pools") + private List pools; + + /** + * Indicates if this IP address is currently warming up. + */ + @JsonProperty("warmup") + private boolean warmup; + + /** + * The date that the IP address was entered into warmup. + */ + @JsonProperty("start_date") + private long startDate; + + /** + * Indicates if this IP address has been whitelabeled. + */ + @JsonProperty("whitelabeled") + private boolean whitelabeled; + + /** + * The date that the IP address was assigned to the user. + */ + @JsonProperty("assigned_at") + private long assignedAt; + + public String getIp() { + return ip; + } + + public void setIp(String ip) { + this.ip = ip; + } + + public List getSubUsers() { + return subUsers; + } + + public void setSubUsers(List subUsers) { + this.subUsers = subUsers; + } + + public String getRdns() { + return rdns; + } + + public void setRdns(String rdns) { + this.rdns = rdns; + } + + public List getPools() { + return pools; + } + + public void setPools(List pools) { + this.pools = pools; + } + + public boolean isWarmup() { + return warmup; + } + + public void setWarmup(boolean warmup) { + this.warmup = warmup; + } + + public long getStartDate() { + return startDate; + } + + public void setStartDate(long startDate) { + this.startDate = startDate; + } + + public boolean isWhitelabeled() { + return whitelabeled; + } + + public void setWhitelabeled(boolean whitelabeled) { + this.whitelabeled = whitelabeled; + } + + public long getAssignedAt() { + return assignedAt; + } + + public void setAssignedAt(long assignedAt) { + this.assignedAt = assignedAt; + } +} diff --git a/src/main/java/com/sendgrid/helpers/ips/IPsHelper.java b/src/main/java/com/sendgrid/helpers/ips/IPsHelper.java new file mode 100644 index 00000000..038901e1 --- /dev/null +++ b/src/main/java/com/sendgrid/helpers/ips/IPsHelper.java @@ -0,0 +1,47 @@ +package com.sendgrid.helpers.ips; + +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.sendgrid.Method; +import com.sendgrid.Request; +import com.sendgrid.Response; +import com.sendgrid.SendGrid; +import org.apache.http.HttpStatus; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +/** + * Helper class for quick and easy access to the SendGrid IP Addresses API. + */ +public class IPsHelper { + + private static final String ALL_IPS_ENDPOINT = "ips"; + + /** + * Get a list of unassigned IP addresses. + * @param sendGrid a SendGrid client. + * @return a list of unassigned ip addresses if response status is ok (200), otherwise - null + * @throws IOException in case of a network error or json parse error. + */ + public static List getAllUnassignedIPs(SendGrid sendGrid) throws IOException { + Request request = new Request(); + request.setMethod(Method.GET); + request.setEndpoint(ALL_IPS_ENDPOINT); + + Response response = sendGrid.api(request); + if (response != null && response.getStatusCode() == HttpStatus.SC_OK) { + List unassignedIPs = new ArrayList<>(); + List ipAddressList = new ObjectMapper().readValue(response.getBody(), new TypeReference>() {}); + for (IPAddress ipAddress : ipAddressList) { + if (ipAddress.getSubUsers() == null || ipAddress.getSubUsers().size() == 0) { + unassignedIPs.add(ipAddress.getIp()); + } + } + return unassignedIPs; + } + return null; + } + +} From b2db70ee90cc19812f33e765ed7ac64c3c8cdb71 Mon Sep 17 00:00:00 2001 From: jake Date: Wed, 18 Nov 2020 08:33:21 -0800 Subject: [PATCH 253/345] docs: Fix broken link in readme (#656) --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 26ee7c3a..f42b9e17 100644 --- a/README.md +++ b/README.md @@ -197,7 +197,7 @@ public class Example { # Use Cases -[Examples of common API use cases](USE_CASES.md), such as how to send an email with a transactional template. +[Examples of common API use cases](use-cases), such as how to send an email with a transactional template. # Announcements From fe0d5749efa4dfa9b13ea8177bf19fb8c4937371 Mon Sep 17 00:00:00 2001 From: Twilio Date: Wed, 18 Nov 2020 22:12:33 +0000 Subject: [PATCH 254/345] [Librarian] Version Bump --- CHANGELOG.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 87888fb5..e029f5d9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,20 @@ # Change Log All notable changes to this project will be documented in this file. +[2020-11-18] Version 4.7.0 +-------------------------- +**Library - Docs** +- [PR #656](https://github.com/sendgrid/sendgrid-java/pull/656): Fix broken link in readme. Thanks to [@KakeJopulsky](https://github.com/KakeJopulsky)! +- [PR #405](https://github.com/sendgrid/sendgrid-java/pull/405): Create use-cases directory. Thanks to [@jamietanna](https://github.com/jamietanna)! +- [PR #418](https://github.com/sendgrid/sendgrid-java/pull/418): Fixes Javadoc errors in Attachments.java. Thanks to [@pacbac](https://github.com/pacbac)! +- [PR #628](https://github.com/sendgrid/sendgrid-java/pull/628): Correct number of free emails. Thanks to [@twogood](https://github.com/twogood)! +- [PR #304](https://github.com/sendgrid/sendgrid-java/pull/304): Save attachment to Dropbox. Thanks to [@deepapanwar](https://github.com/deepapanwar)! +- [PR #357](https://github.com/sendgrid/sendgrid-java/pull/357): Fix code issues in examples/clients/clients.java. Thanks to [@pushkyn](https://github.com/pushkyn)! + +**Library - Feature** +- [PR #292](https://github.com/sendgrid/sendgrid-java/pull/292): Add helper for get unassigned IPs. Thanks to [@pushkyn](https://github.com/pushkyn)! + + [2020-11-05] Version 4.6.8 -------------------------- **Library - Chore** From b829f6ec53fcf78bd0f10656fd144d27b0951179 Mon Sep 17 00:00:00 2001 From: Twilio Date: Wed, 18 Nov 2020 22:33:03 +0000 Subject: [PATCH 255/345] Release 4.7.0 --- CONTRIBUTING.md | 2 +- README.md | 8 ++++---- pom.xml | 4 ++-- src/main/java/com/sendgrid/BaseInterface.java | 2 +- src/test/java/com/sendgrid/SendGridTest.java | 2 +- 5 files changed, 9 insertions(+), 9 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index cbd779c1..913fedee 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -98,7 +98,7 @@ touch Example.java Add the example you want to test to Example.java, including the headers at the top of the file. ``` bash -javac -classpath ../repo/com/sendgrid/4.6.8/sendgrid-4.6.8-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.6.8/sendgrid-4.6.8-jar.jar:. Example +javac -classpath ../repo/com/sendgrid/4.7.0/sendgrid-4.7.0-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.7.0/sendgrid-4.7.0-jar.jar:. Example ``` diff --git a/README.md b/README.md index f42b9e17..889bb68b 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ **NEW:** Subscribe to email [notifications](https://dx.sendgrid.com/newsletter/java) for releases and breaking changes. -**The default branch name for this repository has been changed to `main` as of 4.6.8.** +**The default branch name for this repository has been changed to `main` as of 4.7.0.** **This library allows you to quickly and easily use the Twilio SendGrid Web API v3 via Java.** @@ -40,7 +40,7 @@ We appreciate your continued support, thank you! ## Prerequisites - Java 8 or 11 -- The Twilio SendGrid service, starting at the [free level](https://sendgrid.com/free?source=sendgrid-java) to send up to 40,000 emails for the first 30 days, then send 100 emails/day free forever or check out [our pricing](https://sendgrid.com/pricing?source=sendgrid-java). +- The Twilio SendGrid service, starting at the [free level](https://sendgrid.com/free?source=sendgrid-java) to send up to 4.7.0 emails for the first 30 days, then send 100 emails/day free forever or check out [our pricing](https://sendgrid.com/pricing?source=sendgrid-java). ## Setup Environment Variables @@ -68,7 +68,7 @@ Add the following to your build.gradle file in the root of your project. ... dependencies { ... - implementation 'com.sendgrid:sendgrid-java:4.6.8' + implementation 'com.sendgrid:sendgrid-java:4.7.0' } repositories { @@ -87,7 +87,7 @@ mvn install You can just drop the jar file in. It's a fat jar - it has all the dependencies built in. -[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.6.8/sendgrid-java.jar) +[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.7.0/sendgrid-java.jar) ## Dependencies diff --git a/pom.xml b/pom.xml index 4bc94f9e..fcd7234c 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ com.sendgrid sendgrid-java Twilio SendGrid Java helper library - 4.6.8 + 4.7.0 This Java module allows you to quickly and easily send emails through Twilio SendGrid using Java. https://github.com/sendgrid/sendgrid-java @@ -26,7 +26,7 @@ https://github.com/sendgrid/sendgrid-java scm:git:git@github.com:sendgrid/sendgrid-java.git scm:git:git@github.com:sendgrid/sendgrid-java.git - 4.6.8 + 4.7.0 diff --git a/src/main/java/com/sendgrid/BaseInterface.java b/src/main/java/com/sendgrid/BaseInterface.java index 8f284f41..4aadd3b6 100644 --- a/src/main/java/com/sendgrid/BaseInterface.java +++ b/src/main/java/com/sendgrid/BaseInterface.java @@ -11,7 +11,7 @@ */ public abstract class BaseInterface implements SendGridAPI { - private static final String VERSION = "4.6.8"; + private static final String VERSION = "4.7.0"; private static final String USER_AGENT = "sendgrid/" + VERSION + ";java"; private static final int RATE_LIMIT_RESPONSE_CODE = 429; diff --git a/src/test/java/com/sendgrid/SendGridTest.java b/src/test/java/com/sendgrid/SendGridTest.java index e93c1199..7e94fcfc 100644 --- a/src/test/java/com/sendgrid/SendGridTest.java +++ b/src/test/java/com/sendgrid/SendGridTest.java @@ -43,7 +43,7 @@ public void testConstructWithClient() throws IOException { @Test public void testLibraryVersion() { SendGrid sg = new SendGrid(SENDGRID_API_KEY); - Assert.assertEquals(sg.getLibraryVersion(), "4.6.8"); + Assert.assertEquals(sg.getLibraryVersion(), "4.7.0"); } @Test From d34ee53d19d7ed521f49c9368256e0b97cb4eb1a Mon Sep 17 00:00:00 2001 From: Pat Putnam Date: Thu, 3 Dec 2020 17:54:04 -0700 Subject: [PATCH 256/345] fix: Utilize headers set on the Request object (#657) --- src/main/java/com/sendgrid/BaseInterface.java | 10 ++-- src/test/java/com/sendgrid/SendGridTest.java | 52 +++++++++++++++++++ 2 files changed, 55 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/sendgrid/BaseInterface.java b/src/main/java/com/sendgrid/BaseInterface.java index 4aadd3b6..4dd4ec0e 100644 --- a/src/main/java/com/sendgrid/BaseInterface.java +++ b/src/main/java/com/sendgrid/BaseInterface.java @@ -268,13 +268,9 @@ public Response api(final Request request) throws IOException { req.setEndpoint("/" + version + "/" + request.getEndpoint()); req.setBody(request.getBody()); - for (final Map.Entry header : this.requestHeaders.entrySet()) { - req.addHeader(header.getKey(), header.getValue()); - } - - for (final Map.Entry queryParam : request.getQueryParams().entrySet()) { - req.addQueryParam(queryParam.getKey(), queryParam.getValue()); - } + req.getHeaders().putAll(this.requestHeaders); + req.getHeaders().putAll(request.getHeaders()); + req.getQueryParams().putAll(request.getQueryParams()); return makeCall(req); } diff --git a/src/test/java/com/sendgrid/SendGridTest.java b/src/test/java/com/sendgrid/SendGridTest.java index 7e94fcfc..24d62a76 100644 --- a/src/test/java/com/sendgrid/SendGridTest.java +++ b/src/test/java/com/sendgrid/SendGridTest.java @@ -3190,4 +3190,56 @@ public void test_get_impersonate_subuser() { sg.removeImpersonateSubuser(); Assert.assertEquals(sg.getImpersonateSubuser(), null); } + + @Test + public void test_sendgrid_object_headers_are_used_in_request() throws IOException { + Client client = mock(Client.class); + SendGrid sg = new SendGrid(SENDGRID_API_KEY, client); + sg.addRequestHeader("set-on-sendgrid", "123"); + + Request request = new Request(); + + sg.api(request); + verify(client).api(argThat((Request req) -> req.getHeaders().containsKey("set-on-sendgrid"))); + } + + @Test + public void test_request_headers_are_used_in_request() throws IOException { + Client client = mock(Client.class); + SendGrid sg = new SendGrid(SENDGRID_API_KEY, client); + + Request request = new Request(); + request.addHeader("set-on-request", "456"); + + sg.api(request); + verify(client).api(argThat((Request req) -> req.getHeaders().containsKey("set-on-request"))); + } + + + @Test + public void test_sendgrid_object_and_request_headers_are_both_used_in_request() throws IOException { + Client client = mock(Client.class); + SendGrid sg = new SendGrid(SENDGRID_API_KEY, client); + sg.addRequestHeader("set-on-sendgrid", "123"); + + Request request = new Request(); + request.addHeader("set-on-request", "456"); + + sg.api(request); + verify(client).api(argThat((Request req) -> + req.getHeaders().containsKey("set-on-sendgrid") && req.getHeaders().containsKey("set-on-request"))); + } + + @Test + public void test_request_headers_override_sendgrid_object_headers() throws IOException { + Client client = mock(Client.class); + SendGrid sg = new SendGrid(SENDGRID_API_KEY, client); + sg.addRequestHeader("set-on-both", "123"); + + Request request = new Request(); + request.addHeader("set-on-both", "456"); + + sg.api(request); + verify(client).api(argThat((Request req) -> req.getHeaders().get("set-on-both").equals("456"))); + } } From f7718731f1eaf097674ce01d74da96f522b10d64 Mon Sep 17 00:00:00 2001 From: Twilio Date: Wed, 16 Dec 2020 22:49:53 +0000 Subject: [PATCH 257/345] [Librarian] Version Bump --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index e029f5d9..79834a22 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,12 @@ # Change Log All notable changes to this project will be documented in this file. +[2020-12-16] Version 4.7.1 +-------------------------- +**Library - Fix** +- [PR #657](https://github.com/sendgrid/sendgrid-java/pull/657): Utilize headers set on the Request object. Thanks to [@prputnam](https://github.com/prputnam)! + + [2020-11-18] Version 4.7.0 -------------------------- **Library - Docs** From 1259edeb8570d9ea9bfdc338d3de7bfb10b62b7e Mon Sep 17 00:00:00 2001 From: Twilio Date: Wed, 16 Dec 2020 22:49:56 +0000 Subject: [PATCH 258/345] Release 4.7.1 --- CONTRIBUTING.md | 2 +- README.md | 8 ++++---- pom.xml | 4 ++-- src/main/java/com/sendgrid/BaseInterface.java | 2 +- src/test/java/com/sendgrid/SendGridTest.java | 2 +- 5 files changed, 9 insertions(+), 9 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 913fedee..b091a76e 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -98,7 +98,7 @@ touch Example.java Add the example you want to test to Example.java, including the headers at the top of the file. ``` bash -javac -classpath ../repo/com/sendgrid/4.7.0/sendgrid-4.7.0-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.7.0/sendgrid-4.7.0-jar.jar:. Example +javac -classpath ../repo/com/sendgrid/4.7.1/sendgrid-4.7.1-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.7.1/sendgrid-4.7.1-jar.jar:. Example ``` diff --git a/README.md b/README.md index 889bb68b..3dce3ec9 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ **NEW:** Subscribe to email [notifications](https://dx.sendgrid.com/newsletter/java) for releases and breaking changes. -**The default branch name for this repository has been changed to `main` as of 4.7.0.** +**The default branch name for this repository has been changed to `main` as of 4.7.1.** **This library allows you to quickly and easily use the Twilio SendGrid Web API v3 via Java.** @@ -40,7 +40,7 @@ We appreciate your continued support, thank you! ## Prerequisites - Java 8 or 11 -- The Twilio SendGrid service, starting at the [free level](https://sendgrid.com/free?source=sendgrid-java) to send up to 4.7.0 emails for the first 30 days, then send 100 emails/day free forever or check out [our pricing](https://sendgrid.com/pricing?source=sendgrid-java). +- The Twilio SendGrid service, starting at the [free level](https://sendgrid.com/free?source=sendgrid-java) to send up to 4.7.1 emails for the first 30 days, then send 100 emails/day free forever or check out [our pricing](https://sendgrid.com/pricing?source=sendgrid-java). ## Setup Environment Variables @@ -68,7 +68,7 @@ Add the following to your build.gradle file in the root of your project. ... dependencies { ... - implementation 'com.sendgrid:sendgrid-java:4.7.0' + implementation 'com.sendgrid:sendgrid-java:4.7.1' } repositories { @@ -87,7 +87,7 @@ mvn install You can just drop the jar file in. It's a fat jar - it has all the dependencies built in. -[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.7.0/sendgrid-java.jar) +[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.7.1/sendgrid-java.jar) ## Dependencies diff --git a/pom.xml b/pom.xml index fcd7234c..88a8dc0d 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ com.sendgrid sendgrid-java Twilio SendGrid Java helper library - 4.7.0 + 4.7.1 This Java module allows you to quickly and easily send emails through Twilio SendGrid using Java. https://github.com/sendgrid/sendgrid-java @@ -26,7 +26,7 @@ https://github.com/sendgrid/sendgrid-java scm:git:git@github.com:sendgrid/sendgrid-java.git scm:git:git@github.com:sendgrid/sendgrid-java.git - 4.7.0 + 4.7.1 diff --git a/src/main/java/com/sendgrid/BaseInterface.java b/src/main/java/com/sendgrid/BaseInterface.java index 4dd4ec0e..44f36e73 100644 --- a/src/main/java/com/sendgrid/BaseInterface.java +++ b/src/main/java/com/sendgrid/BaseInterface.java @@ -11,7 +11,7 @@ */ public abstract class BaseInterface implements SendGridAPI { - private static final String VERSION = "4.7.0"; + private static final String VERSION = "4.7.1"; private static final String USER_AGENT = "sendgrid/" + VERSION + ";java"; private static final int RATE_LIMIT_RESPONSE_CODE = 429; diff --git a/src/test/java/com/sendgrid/SendGridTest.java b/src/test/java/com/sendgrid/SendGridTest.java index 24d62a76..2a855cef 100644 --- a/src/test/java/com/sendgrid/SendGridTest.java +++ b/src/test/java/com/sendgrid/SendGridTest.java @@ -43,7 +43,7 @@ public void testConstructWithClient() throws IOException { @Test public void testLibraryVersion() { SendGrid sg = new SendGrid(SENDGRID_API_KEY); - Assert.assertEquals(sg.getLibraryVersion(), "4.7.0"); + Assert.assertEquals(sg.getLibraryVersion(), "4.7.1"); } @Test From c156455e485e3368351082a78e980c618ef8d16b Mon Sep 17 00:00:00 2001 From: Twilio Date: Wed, 6 Jan 2021 18:16:42 +0000 Subject: [PATCH 259/345] chore: update template files --- LICENSE | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/LICENSE b/LICENSE index 29aba592..e5439a92 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (C) 2020, Twilio SendGrid, Inc. +Copyright (C) 2021, Twilio SendGrid, Inc. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in From 7381525d6b8b5f7ada71fd00b30238c5c170def1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 18 Feb 2021 16:42:52 -0800 Subject: [PATCH 260/345] chore: bump jackson.version from 2.10.2 to 2.12.1 (#671) --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 88a8dc0d..0c87b741 100644 --- a/pom.xml +++ b/pom.xml @@ -20,7 +20,7 @@ - 2.10.2 + 2.12.1 https://github.com/sendgrid/sendgrid-java From 1578ffc2e26e4c0ea03a25eeafd5e166011b5599 Mon Sep 17 00:00:00 2001 From: Twilio Date: Wed, 24 Feb 2021 20:06:27 +0000 Subject: [PATCH 261/345] [Librarian] Version Bump --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 79834a22..1fbc6b5e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,12 @@ # Change Log All notable changes to this project will be documented in this file. +[2021-02-24] Version 4.7.2 +-------------------------- +**Library - Chore** +- [PR #671](https://github.com/sendgrid/sendgrid-java/pull/671): bump jackson.version from 2.10.2 to 2.12.1. Thanks to [@dependabot](https://github.com/dependabot)! + + [2020-12-16] Version 4.7.1 -------------------------- **Library - Fix** From a2b4926ede929f36a3b6e9d9e9fcaba62125ae93 Mon Sep 17 00:00:00 2001 From: Twilio Date: Wed, 24 Feb 2021 20:20:14 +0000 Subject: [PATCH 262/345] Release 4.7.2 --- CONTRIBUTING.md | 2 +- README.md | 8 ++++---- pom.xml | 6 +++--- src/main/java/com/sendgrid/BaseInterface.java | 2 +- src/test/java/com/sendgrid/SendGridTest.java | 2 +- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index b091a76e..6e129bad 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -98,7 +98,7 @@ touch Example.java Add the example you want to test to Example.java, including the headers at the top of the file. ``` bash -javac -classpath ../repo/com/sendgrid/4.7.1/sendgrid-4.7.1-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.7.1/sendgrid-4.7.1-jar.jar:. Example +javac -classpath ../repo/com/sendgrid/4.7.2/sendgrid-4.7.2-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.7.2/sendgrid-4.7.2-jar.jar:. Example ``` diff --git a/README.md b/README.md index 3dce3ec9..fb0335e3 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ **NEW:** Subscribe to email [notifications](https://dx.sendgrid.com/newsletter/java) for releases and breaking changes. -**The default branch name for this repository has been changed to `main` as of 4.7.1.** +**The default branch name for this repository has been changed to `main` as of 4.7.2.** **This library allows you to quickly and easily use the Twilio SendGrid Web API v3 via Java.** @@ -40,7 +40,7 @@ We appreciate your continued support, thank you! ## Prerequisites - Java 8 or 11 -- The Twilio SendGrid service, starting at the [free level](https://sendgrid.com/free?source=sendgrid-java) to send up to 4.7.1 emails for the first 30 days, then send 100 emails/day free forever or check out [our pricing](https://sendgrid.com/pricing?source=sendgrid-java). +- The Twilio SendGrid service, starting at the [free level](https://sendgrid.com/free?source=sendgrid-java) to send up to 4.7.2 emails for the first 30 days, then send 100 emails/day free forever or check out [our pricing](https://sendgrid.com/pricing?source=sendgrid-java). ## Setup Environment Variables @@ -68,7 +68,7 @@ Add the following to your build.gradle file in the root of your project. ... dependencies { ... - implementation 'com.sendgrid:sendgrid-java:4.7.1' + implementation 'com.sendgrid:sendgrid-java:4.7.2' } repositories { @@ -87,7 +87,7 @@ mvn install You can just drop the jar file in. It's a fat jar - it has all the dependencies built in. -[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.7.1/sendgrid-java.jar) +[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.7.2/sendgrid-java.jar) ## Dependencies diff --git a/pom.xml b/pom.xml index 0c87b741..0842ac27 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ com.sendgrid sendgrid-java Twilio SendGrid Java helper library - 4.7.1 + 4.7.2 This Java module allows you to quickly and easily send emails through Twilio SendGrid using Java. https://github.com/sendgrid/sendgrid-java @@ -26,7 +26,7 @@ https://github.com/sendgrid/sendgrid-java scm:git:git@github.com:sendgrid/sendgrid-java.git scm:git:git@github.com:sendgrid/sendgrid-java.git - 4.7.1 + 4.7.2 @@ -318,7 +318,7 @@ org.bouncycastle bcprov-jdk15on - 1.67 + 1.68 diff --git a/src/main/java/com/sendgrid/BaseInterface.java b/src/main/java/com/sendgrid/BaseInterface.java index 44f36e73..39874e5f 100644 --- a/src/main/java/com/sendgrid/BaseInterface.java +++ b/src/main/java/com/sendgrid/BaseInterface.java @@ -11,7 +11,7 @@ */ public abstract class BaseInterface implements SendGridAPI { - private static final String VERSION = "4.7.1"; + private static final String VERSION = "4.7.2"; private static final String USER_AGENT = "sendgrid/" + VERSION + ";java"; private static final int RATE_LIMIT_RESPONSE_CODE = 429; diff --git a/src/test/java/com/sendgrid/SendGridTest.java b/src/test/java/com/sendgrid/SendGridTest.java index 2a855cef..1fbaddd8 100644 --- a/src/test/java/com/sendgrid/SendGridTest.java +++ b/src/test/java/com/sendgrid/SendGridTest.java @@ -43,7 +43,7 @@ public void testConstructWithClient() throws IOException { @Test public void testLibraryVersion() { SendGrid sg = new SendGrid(SENDGRID_API_KEY); - Assert.assertEquals(sg.getLibraryVersion(), "4.7.1"); + Assert.assertEquals(sg.getLibraryVersion(), "4.7.2"); } @Test From 25b1a9fa50c733a68b23ba1c0ec917b26bdd47ce Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Mon, 8 Mar 2021 23:26:24 -0800 Subject: [PATCH 263/345] Update README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index fb0335e3..720d62e8 100644 --- a/README.md +++ b/README.md @@ -202,6 +202,8 @@ public class Example { # Announcements +Our Developer Experience team is conducting planned maintenance from 03/09/2021 until 03/11/2021. Our next release is scheduled for 03/15/2021. + Please see our announcement regarding [breaking changes](https://github.com/sendgrid/sendgrid-java/issues/140). Your support is appreciated! All updates to this library are documented in our [CHANGELOG](CHANGELOG.md) and [releases](https://github.com/sendgrid/sendgrid-java/releases). You may also subscribe to email [release notifications](https://dx.sendgrid.com/newsletter/java) for releases and breaking changes. From e815bb21d73153b131b0a881bdfcd8354ddd4145 Mon Sep 17 00:00:00 2001 From: Twilio Date: Fri, 12 Mar 2021 19:28:15 +0000 Subject: [PATCH 264/345] chore: update template files --- .github/ISSUE_TEMPLATE/config.yml | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 .github/ISSUE_TEMPLATE/config.yml diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 00000000..b24426d0 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,10 @@ +contact_links: + - name: Twilio SendGrid Support + url: https://support.sendgrid.com + about: Get Support + - name: Stack Overflow + url: https://stackoverflow.com/questions/tagged/sendgrid-java+or+sendgrid+java + about: Ask questions on Stack Overflow + - name: Documentation + url: https://sendgrid.com/docs/for-developers/ + about: View Reference Documentation From 89e1ccdc689365c41afdd3004fad097edfd9676f Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Mon, 15 Mar 2021 12:49:43 -0700 Subject: [PATCH 265/345] Update README.md --- README.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/README.md b/README.md index 720d62e8..fb0335e3 100644 --- a/README.md +++ b/README.md @@ -202,8 +202,6 @@ public class Example { # Announcements -Our Developer Experience team is conducting planned maintenance from 03/09/2021 until 03/11/2021. Our next release is scheduled for 03/15/2021. - Please see our announcement regarding [breaking changes](https://github.com/sendgrid/sendgrid-java/issues/140). Your support is appreciated! All updates to this library are documented in our [CHANGELOG](CHANGELOG.md) and [releases](https://github.com/sendgrid/sendgrid-java/releases). You may also subscribe to email [release notifications](https://dx.sendgrid.com/newsletter/java) for releases and breaking changes. From ce541f15010416d28883aa095f6a646947585f0f Mon Sep 17 00:00:00 2001 From: Elise Shanholtz Date: Fri, 23 Apr 2021 11:08:16 -0700 Subject: [PATCH 266/345] chore: rotate key --- .travis.yml | 26 ++++++++++++-------------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/.travis.yml b/.travis.yml index ff279202..062520ed 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,22 +1,20 @@ language: java jdk: openjdk8 before_install: - - echo $GPG_SECRET_KEYS | base64 --decode | $GPG_EXECUTABLE --import --batch || true +- echo $GPG_SECRET_KEYS | base64 --decode | $GPG_EXECUTABLE --import --batch || true env: - - version=8 - - version=11 +- version=8 +- version=11 script: - - make test-docker - +- make test-docker deploy: - - provider: script - script: mvn clean deploy --settings .maven.xml -DskipTests=true -B -U -Prelease - edge: true - on: - tags: true - condition: $version = 8 - branch: main - +- provider: script + script: mvn clean deploy --settings .maven.xml -DskipTests=true -B -U -Prelease + edge: true + on: + tags: true + condition: "$version = 8" + branch: main notifications: slack: if: branch = main @@ -24,4 +22,4 @@ notifications: on_success: never on_failure: change rooms: - - secure: q2SEemDXFLu/2G2I7oD02+YsM5Q0G27j+b4P1BcReWqVHhRz9L+iyuYWhIXJ6hW0omL5V2XrZ65uqb4f/SD7b89oXRGToVxfykrBzcas1tqIIp9lldd1u2eMc59zALX4nkTlE0T4UFLwEvoeY8aXoD/dNytSy6M2F5c2nYcmoN0= + secure: U60cRCUgX4z+CYZXW/DjNSeCr4rxZVJBjlsGtpzNVWt2Lz7jhx/6Bx/2SChPQt1BR/6RY3kUf1hXAd3vqbwIMjvSFm/HBb4EHEWLAoqVtHjj6p9YZ+NXFzxRrarG3tBB14prRoG2t8TwdcvxnklBOYgUY5PWld3ptp+BG8iyr8A= From 9de3eaeafe4f07682555ec6237bc9bc797c5c53a Mon Sep 17 00:00:00 2001 From: Mikko Date: Fri, 30 Apr 2021 19:18:41 +0300 Subject: [PATCH 267/345] docs: Fix number of free emails in README (#679) Somewhere along the line, the number seems to have been replaced with a version number. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index fb0335e3..532515fa 100644 --- a/README.md +++ b/README.md @@ -40,7 +40,7 @@ We appreciate your continued support, thank you! ## Prerequisites - Java 8 or 11 -- The Twilio SendGrid service, starting at the [free level](https://sendgrid.com/free?source=sendgrid-java) to send up to 4.7.2 emails for the first 30 days, then send 100 emails/day free forever or check out [our pricing](https://sendgrid.com/pricing?source=sendgrid-java). +- The Twilio SendGrid service, starting at the [free level](https://sendgrid.com/free?source=sendgrid-java) to send up to 40,000 emails for the first 30 days, then send 100 emails/day free forever or check out [our pricing](https://sendgrid.com/pricing?source=sendgrid-java). ## Setup Environment Variables From 0128ca219befa395ec5cb5cc72878e802bc96cea Mon Sep 17 00:00:00 2001 From: Jennifer Mah <42650198+JenniferMah@users.noreply.github.com> Date: Tue, 11 May 2021 16:49:26 -0600 Subject: [PATCH 268/345] docs: Fix date for main branch --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 532515fa..0f1cca27 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ **NEW:** Subscribe to email [notifications](https://dx.sendgrid.com/newsletter/java) for releases and breaking changes. -**The default branch name for this repository has been changed to `main` as of 4.7.2.** +**The default branch name for this repository has been changed to `main` as of 07/27/2020.** **This library allows you to quickly and easily use the Twilio SendGrid Web API v3 via Java.** From 5ea0713a2283cc67e543c31f94056658c9bd61ce Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Wed, 16 Jun 2021 16:18:36 -0700 Subject: [PATCH 269/345] update slack token --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 062520ed..f456ed0c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -22,4 +22,4 @@ notifications: on_success: never on_failure: change rooms: - secure: U60cRCUgX4z+CYZXW/DjNSeCr4rxZVJBjlsGtpzNVWt2Lz7jhx/6Bx/2SChPQt1BR/6RY3kUf1hXAd3vqbwIMjvSFm/HBb4EHEWLAoqVtHjj6p9YZ+NXFzxRrarG3tBB14prRoG2t8TwdcvxnklBOYgUY5PWld3ptp+BG8iyr8A= + secure: NGGQe8OMWfbAOM6O7odDHtY/UVdqJ6oLQzB96QlTNkGgbyINKdufHxHaiv0SC/w4alUzzs6gw1h2WCpxw1PPl+pnVAeSVLfvRLYQApCGigWF0s5AyfVxtoG7bZOQLhsddC1ldQr12G4zclew+7k+0bgra4ENkbvv1OGiQdPJ08U= From b03272e3af731f7b86aa2eb78f33a80d62d913e4 Mon Sep 17 00:00:00 2001 From: Jennifer Mah Date: Wed, 16 Jun 2021 17:08:20 -0700 Subject: [PATCH 270/345] chore: add docker credentials to travis --- .travis.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index f456ed0c..5518c0d2 100644 --- a/.travis.yml +++ b/.travis.yml @@ -6,7 +6,8 @@ env: - version=8 - version=11 script: -- make test-docker +- echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin + - make test-docker deploy: - provider: script script: mvn clean deploy --settings .maven.xml -DskipTests=true -B -U -Prelease From e3e55d857ca2dc960313e3cbe1440117e9dd2759 Mon Sep 17 00:00:00 2001 From: Jennifer Mah Date: Wed, 16 Jun 2021 17:10:54 -0700 Subject: [PATCH 271/345] chore: add docker credentials to travis --- .travis.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.travis.yml b/.travis.yml index 5518c0d2..84f6b2be 100644 --- a/.travis.yml +++ b/.travis.yml @@ -6,8 +6,8 @@ env: - version=8 - version=11 script: -- echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin - - make test-docker +- echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin" +- make test-docker deploy: - provider: script script: mvn clean deploy --settings .maven.xml -DskipTests=true -B -U -Prelease From 0812d5c3b1c2556ab531f7cf055538505f9293bb Mon Sep 17 00:00:00 2001 From: Jennifer Mah Date: Wed, 16 Jun 2021 17:14:53 -0700 Subject: [PATCH 272/345] chore: add docker credentials to travis --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 84f6b2be..4e3f5b5c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -6,7 +6,7 @@ env: - version=8 - version=11 script: -- echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin" +- echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin - make test-docker deploy: - provider: script From 7ee80927a7b59de6cb30170267fdf3cc5e762859 Mon Sep 17 00:00:00 2001 From: Twilio Date: Wed, 30 Jun 2021 19:36:47 +0000 Subject: [PATCH 273/345] [Librarian] Version Bump --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1fbc6b5e..e05c2625 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,12 @@ # Change Log All notable changes to this project will be documented in this file. +[2021-06-30] Version 4.7.3 +-------------------------- +**Library - Docs** +- [PR #679](https://github.com/sendgrid/sendgrid-java/pull/679): Fix number of free emails in README. Thanks to [@mjjs](https://github.com/mjjs)! + + [2021-02-24] Version 4.7.2 -------------------------- **Library - Chore** From ce785105c95658f321c4138a124b9b14d909da65 Mon Sep 17 00:00:00 2001 From: Twilio Date: Wed, 30 Jun 2021 19:44:27 +0000 Subject: [PATCH 274/345] Release 4.7.3 --- CONTRIBUTING.md | 2 +- README.md | 4 ++-- pom.xml | 6 +++--- src/main/java/com/sendgrid/BaseInterface.java | 2 +- src/test/java/com/sendgrid/SendGridTest.java | 2 +- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 6e129bad..a1fc85bd 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -98,7 +98,7 @@ touch Example.java Add the example you want to test to Example.java, including the headers at the top of the file. ``` bash -javac -classpath ../repo/com/sendgrid/4.7.2/sendgrid-4.7.2-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.7.2/sendgrid-4.7.2-jar.jar:. Example +javac -classpath ../repo/com/sendgrid/4.7.3/sendgrid-4.7.3-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.7.3/sendgrid-4.7.3-jar.jar:. Example ``` diff --git a/README.md b/README.md index 0f1cca27..4c5c69d6 100644 --- a/README.md +++ b/README.md @@ -68,7 +68,7 @@ Add the following to your build.gradle file in the root of your project. ... dependencies { ... - implementation 'com.sendgrid:sendgrid-java:4.7.2' + implementation 'com.sendgrid:sendgrid-java:4.7.3' } repositories { @@ -87,7 +87,7 @@ mvn install You can just drop the jar file in. It's a fat jar - it has all the dependencies built in. -[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.7.2/sendgrid-java.jar) +[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.7.3/sendgrid-java.jar) ## Dependencies diff --git a/pom.xml b/pom.xml index 0842ac27..f4052115 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ com.sendgrid sendgrid-java Twilio SendGrid Java helper library - 4.7.2 + 4.7.3 This Java module allows you to quickly and easily send emails through Twilio SendGrid using Java. https://github.com/sendgrid/sendgrid-java @@ -26,7 +26,7 @@ https://github.com/sendgrid/sendgrid-java scm:git:git@github.com:sendgrid/sendgrid-java.git scm:git:git@github.com:sendgrid/sendgrid-java.git - 4.7.2 + 4.7.3 @@ -318,7 +318,7 @@ org.bouncycastle bcprov-jdk15on - 1.68 + 1.69 diff --git a/src/main/java/com/sendgrid/BaseInterface.java b/src/main/java/com/sendgrid/BaseInterface.java index 39874e5f..18d3b71c 100644 --- a/src/main/java/com/sendgrid/BaseInterface.java +++ b/src/main/java/com/sendgrid/BaseInterface.java @@ -11,7 +11,7 @@ */ public abstract class BaseInterface implements SendGridAPI { - private static final String VERSION = "4.7.2"; + private static final String VERSION = "4.7.3"; private static final String USER_AGENT = "sendgrid/" + VERSION + ";java"; private static final int RATE_LIMIT_RESPONSE_CODE = 429; diff --git a/src/test/java/com/sendgrid/SendGridTest.java b/src/test/java/com/sendgrid/SendGridTest.java index 1fbaddd8..27190868 100644 --- a/src/test/java/com/sendgrid/SendGridTest.java +++ b/src/test/java/com/sendgrid/SendGridTest.java @@ -43,7 +43,7 @@ public void testConstructWithClient() throws IOException { @Test public void testLibraryVersion() { SendGrid sg = new SendGrid(SENDGRID_API_KEY); - Assert.assertEquals(sg.getLibraryVersion(), "4.7.2"); + Assert.assertEquals(sg.getLibraryVersion(), "4.7.3"); } @Test From 83e57c6c45d6ef32dbcf414a97f9bbcae2a0c544 Mon Sep 17 00:00:00 2001 From: Elmer Thomas Date: Wed, 21 Jul 2021 15:25:56 -0700 Subject: [PATCH 275/345] Remove newsletter badge --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index 4c5c69d6..0668fc8b 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,6 @@ [![Travis Badge](https://travis-ci.com/sendgrid/sendgrid-java.svg?branch=main)](https://travis-ci.com/sendgrid/sendgrid-java) [![Maven Central](https://img.shields.io/maven-central/v/com.sendgrid/sendgrid-java.svg)](http://mvnrepository.com/artifact/com.sendgrid/sendgrid-java) -[![Email Notifications Badge](https://dx.sendgrid.com/badge/java)](https://dx.sendgrid.com/newsletter/java) [![Twitter Follow](https://img.shields.io/twitter/follow/sendgrid.svg?style=social&label=Follow)](https://twitter.com/sendgrid) [![GitHub contributors](https://img.shields.io/github/contributors/sendgrid/sendgrid-java.svg)](https://github.com/sendgrid/sendgrid-java/graphs/contributors) [![Open Source Helpers](https://www.codetriage.com/sendgrid/sendgrid-java/badges/users.svg)](https://www.codetriage.com/sendgrid/sendgrid-java) From 9bc3c25bdcd6c68983a20560db62d46837f7d059 Mon Sep 17 00:00:00 2001 From: Elise Shanholtz Date: Thu, 29 Jul 2021 15:01:21 -0700 Subject: [PATCH 276/345] chore: update travis config --- .travis.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.travis.yml b/.travis.yml index 4e3f5b5c..05841cba 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,6 +2,7 @@ language: java jdk: openjdk8 before_install: - echo $GPG_SECRET_KEYS | base64 --decode | $GPG_EXECUTABLE --import --batch || true +- echo $GPG_OWNERTRUST | base64 --decode | $GPG_EXECUTABLE --import-ownertrust --batch || true env: - version=8 - version=11 From ca5c05c9992415d06e413dfe9b88f0855c8dd26d Mon Sep 17 00:00:00 2001 From: Jennifer Mah Date: Thu, 29 Jul 2021 15:24:53 -0700 Subject: [PATCH 277/345] chore: remove docker credentials for PRs --- .travis.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 05841cba..9d5fdc9d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -7,7 +7,9 @@ env: - version=8 - version=11 script: -- echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin +- if [[ "$TRAVIS_BRANCH" == "main" || "$TRAVIS_BRANCH" == "travis" ]] && [ "$TRAVIS_PULL_REQUEST" == "false" ]; then + echo "${DOCKER_PASSWORD}" | docker login -u "${DOCKER_USERNAME}" --password-stdin; + fi - make test-docker deploy: - provider: script From 468db091a68176555757c45e11812f77c3b2b3cf Mon Sep 17 00:00:00 2001 From: svcprodsec-sendgrid <70608793+svcprodsec-sendgrid@users.noreply.github.com> Date: Mon, 2 Aug 2021 12:11:55 -0400 Subject: [PATCH 278/345] fix: pom.xml to reduce vulnerabilities (#694) The following vulnerabilities are fixed with an upgrade: - https://snyk.io/vuln/SNYK-JAVA-ORGAPACHEHTTPCOMPONENTS-1048058 Co-authored-by: snyk-bot --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index f4052115..d26ae36d 100644 --- a/pom.xml +++ b/pom.xml @@ -286,7 +286,7 @@ com.sendgrid java-http-client - 4.3.6 + 4.3.7 com.fasterxml.jackson.core From 8b41bb94fe6c4ffa4574e1ceb0e22dc128659799 Mon Sep 17 00:00:00 2001 From: Twilio Date: Wed, 11 Aug 2021 16:53:15 +0000 Subject: [PATCH 279/345] [Librarian] Version Bump --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index e05c2625..6385e5bb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,12 @@ # Change Log All notable changes to this project will be documented in this file. +[2021-08-11] Version 4.7.4 +-------------------------- +**Library - Chore** +- [PR #694](https://github.com/sendgrid/sendgrid-java/pull/694): [Snyk] Security upgrade com.sendgrid:java-http-client from 4.3.6 to 4.3.7. Thanks to [@svcprodsec-sendgrid](https://github.com/svcprodsec-sendgrid)! + + [2021-06-30] Version 4.7.3 -------------------------- **Library - Docs** From c46e5775ae058d7f9b12be5c8e170b97c32e05b9 Mon Sep 17 00:00:00 2001 From: Twilio Date: Wed, 11 Aug 2021 17:04:16 +0000 Subject: [PATCH 280/345] Release 4.7.4 --- CONTRIBUTING.md | 2 +- README.md | 4 ++-- pom.xml | 4 ++-- src/main/java/com/sendgrid/BaseInterface.java | 2 +- src/test/java/com/sendgrid/SendGridTest.java | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index a1fc85bd..94cf44c0 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -98,7 +98,7 @@ touch Example.java Add the example you want to test to Example.java, including the headers at the top of the file. ``` bash -javac -classpath ../repo/com/sendgrid/4.7.3/sendgrid-4.7.3-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.7.3/sendgrid-4.7.3-jar.jar:. Example +javac -classpath ../repo/com/sendgrid/4.7.4/sendgrid-4.7.4-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.7.4/sendgrid-4.7.4-jar.jar:. Example ``` diff --git a/README.md b/README.md index 0668fc8b..0d9bb379 100644 --- a/README.md +++ b/README.md @@ -67,7 +67,7 @@ Add the following to your build.gradle file in the root of your project. ... dependencies { ... - implementation 'com.sendgrid:sendgrid-java:4.7.3' + implementation 'com.sendgrid:sendgrid-java:4.7.4' } repositories { @@ -86,7 +86,7 @@ mvn install You can just drop the jar file in. It's a fat jar - it has all the dependencies built in. -[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.7.3/sendgrid-java.jar) +[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.7.4/sendgrid-java.jar) ## Dependencies diff --git a/pom.xml b/pom.xml index d26ae36d..dcf70d0d 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ com.sendgrid sendgrid-java Twilio SendGrid Java helper library - 4.7.3 + 4.7.4 This Java module allows you to quickly and easily send emails through Twilio SendGrid using Java. https://github.com/sendgrid/sendgrid-java @@ -26,7 +26,7 @@ https://github.com/sendgrid/sendgrid-java scm:git:git@github.com:sendgrid/sendgrid-java.git scm:git:git@github.com:sendgrid/sendgrid-java.git - 4.7.3 + 4.7.4 diff --git a/src/main/java/com/sendgrid/BaseInterface.java b/src/main/java/com/sendgrid/BaseInterface.java index 18d3b71c..bca374f0 100644 --- a/src/main/java/com/sendgrid/BaseInterface.java +++ b/src/main/java/com/sendgrid/BaseInterface.java @@ -11,7 +11,7 @@ */ public abstract class BaseInterface implements SendGridAPI { - private static final String VERSION = "4.7.3"; + private static final String VERSION = "4.7.4"; private static final String USER_AGENT = "sendgrid/" + VERSION + ";java"; private static final int RATE_LIMIT_RESPONSE_CODE = 429; diff --git a/src/test/java/com/sendgrid/SendGridTest.java b/src/test/java/com/sendgrid/SendGridTest.java index 27190868..30e4d286 100644 --- a/src/test/java/com/sendgrid/SendGridTest.java +++ b/src/test/java/com/sendgrid/SendGridTest.java @@ -43,7 +43,7 @@ public void testConstructWithClient() throws IOException { @Test public void testLibraryVersion() { SendGrid sg = new SendGrid(SENDGRID_API_KEY); - Assert.assertEquals(sg.getLibraryVersion(), "4.7.3"); + Assert.assertEquals(sg.getLibraryVersion(), "4.7.4"); } @Test From 84fe0783ff2437328f1cd3f3a8d4dfa9bf5c6f2d Mon Sep 17 00:00:00 2001 From: Elise Shanholtz Date: Tue, 21 Sep 2021 12:18:33 -0700 Subject: [PATCH 281/345] chore: update docker (#703) --- .travis.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.travis.yml b/.travis.yml index 9d5fdc9d..d4b2a0ac 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,6 +1,11 @@ language: java jdk: openjdk8 before_install: +- curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - +- sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" +- sudo apt-get update +- sudo apt-get -y -o Dpkg::Options::="--force-confnew" install docker-ce +- docker --version - echo $GPG_SECRET_KEYS | base64 --decode | $GPG_EXECUTABLE --import --batch || true - echo $GPG_OWNERTRUST | base64 --decode | $GPG_EXECUTABLE --import-ownertrust --batch || true env: From bc645f1d40ff68691db4b3c645bd20609bf96bbf Mon Sep 17 00:00:00 2001 From: Twilio Date: Wed, 22 Sep 2021 20:34:25 +0000 Subject: [PATCH 282/345] [Librarian] Version Bump --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6385e5bb..104bf3e8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,12 @@ # Change Log All notable changes to this project will be documented in this file. +[2021-09-22] Version 4.7.5 +-------------------------- +**Library - Chore** +- [PR #703](https://github.com/sendgrid/sendgrid-java/pull/703): update docker. Thanks to [@eshanholtz](https://github.com/eshanholtz)! + + [2021-08-11] Version 4.7.4 -------------------------- **Library - Chore** From d75ac30a74c7240ce717fbd429c1248aed05724b Mon Sep 17 00:00:00 2001 From: Twilio Date: Wed, 22 Sep 2021 20:44:24 +0000 Subject: [PATCH 283/345] Release 4.7.5 --- CONTRIBUTING.md | 2 +- README.md | 4 ++-- pom.xml | 4 ++-- src/main/java/com/sendgrid/BaseInterface.java | 2 +- src/test/java/com/sendgrid/SendGridTest.java | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 94cf44c0..38da8a7f 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -98,7 +98,7 @@ touch Example.java Add the example you want to test to Example.java, including the headers at the top of the file. ``` bash -javac -classpath ../repo/com/sendgrid/4.7.4/sendgrid-4.7.4-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.7.4/sendgrid-4.7.4-jar.jar:. Example +javac -classpath ../repo/com/sendgrid/4.7.5/sendgrid-4.7.5-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.7.5/sendgrid-4.7.5-jar.jar:. Example ``` diff --git a/README.md b/README.md index 0d9bb379..c0f85c93 100644 --- a/README.md +++ b/README.md @@ -67,7 +67,7 @@ Add the following to your build.gradle file in the root of your project. ... dependencies { ... - implementation 'com.sendgrid:sendgrid-java:4.7.4' + implementation 'com.sendgrid:sendgrid-java:4.7.5' } repositories { @@ -86,7 +86,7 @@ mvn install You can just drop the jar file in. It's a fat jar - it has all the dependencies built in. -[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.7.4/sendgrid-java.jar) +[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.7.5/sendgrid-java.jar) ## Dependencies diff --git a/pom.xml b/pom.xml index dcf70d0d..a12304dd 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ com.sendgrid sendgrid-java Twilio SendGrid Java helper library - 4.7.4 + 4.7.5 This Java module allows you to quickly and easily send emails through Twilio SendGrid using Java. https://github.com/sendgrid/sendgrid-java @@ -26,7 +26,7 @@ https://github.com/sendgrid/sendgrid-java scm:git:git@github.com:sendgrid/sendgrid-java.git scm:git:git@github.com:sendgrid/sendgrid-java.git - 4.7.4 + 4.7.5 diff --git a/src/main/java/com/sendgrid/BaseInterface.java b/src/main/java/com/sendgrid/BaseInterface.java index bca374f0..b2fb04a6 100644 --- a/src/main/java/com/sendgrid/BaseInterface.java +++ b/src/main/java/com/sendgrid/BaseInterface.java @@ -11,7 +11,7 @@ */ public abstract class BaseInterface implements SendGridAPI { - private static final String VERSION = "4.7.4"; + private static final String VERSION = "4.7.5"; private static final String USER_AGENT = "sendgrid/" + VERSION + ";java"; private static final int RATE_LIMIT_RESPONSE_CODE = 429; diff --git a/src/test/java/com/sendgrid/SendGridTest.java b/src/test/java/com/sendgrid/SendGridTest.java index 30e4d286..02e22723 100644 --- a/src/test/java/com/sendgrid/SendGridTest.java +++ b/src/test/java/com/sendgrid/SendGridTest.java @@ -43,7 +43,7 @@ public void testConstructWithClient() throws IOException { @Test public void testLibraryVersion() { SendGrid sg = new SendGrid(SENDGRID_API_KEY); - Assert.assertEquals(sg.getLibraryVersion(), "4.7.4"); + Assert.assertEquals(sg.getLibraryVersion(), "4.7.5"); } @Test From 470872da6e48e6a80368f697e35c0a7ceb0c1cc4 Mon Sep 17 00:00:00 2001 From: Jennifer Mah <42650198+JenniferMah@users.noreply.github.com> Date: Wed, 29 Sep 2021 15:10:10 -0700 Subject: [PATCH 284/345] docs: update documentation link --- use-cases/transactional-templates.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/use-cases/transactional-templates.md b/use-cases/transactional-templates.md index bb908733..ba2b39e2 100644 --- a/use-cases/transactional-templates.md +++ b/use-cases/transactional-templates.md @@ -1,6 +1,6 @@ # Transactional Templates -For this example, we assume you have created a [transactional template](https://sendgrid.com/docs/User_Guide/Transactional_Templates/index.html). Following is the template content we used for testing. +For this example, we assume you have created a [transactional template](https://docs.sendgrid.com/ui/sending-email/create-and-edit-legacy-transactional-templates). Following is the template content we used for testing. Template ID (replace with your own): From 49e68952346b4a10cfd257eed5915ae535ae0db8 Mon Sep 17 00:00:00 2001 From: Shwetha Radhakrishna Date: Fri, 8 Oct 2021 06:52:22 -0700 Subject: [PATCH 285/345] docs: improve signed webhook events docs (#705) --- TROUBLESHOOTING.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/TROUBLESHOOTING.md b/TROUBLESHOOTING.md index 02fba251..44b5c885 100644 --- a/TROUBLESHOOTING.md +++ b/TROUBLESHOOTING.md @@ -18,6 +18,7 @@ If you can't find a solution below, please open an [issue](https://github.com/se - [Using the Package Manager](#using-the-package-manager) - [Android Compatibility](#android-compatibility) - [Viewing the Request Body](#viewing-the-request-body) +- [Verifying Event Webhooks](#signed-webhooks) ## Migrating from v2 to v3 @@ -114,3 +115,15 @@ You can do this right before you call `request.setBody(mail.build())` like so: ```java System.out.println(mail.build()); ``` + + +## Signed Webhook Verification + +Twilio SendGrid's Event Webhook will notify a URL via HTTP POST with information about events that occur as your mail is processed. [This](https://docs.sendgrid.com/for-developers/tracking-events/getting-started-event-webhook-security-features) article covers all you need to know to secure the Event Webhook, allowing you to verify that incoming requests originate from Twilio SendGrid. The sendgrid-java library can help you verify these Signed Event Webhooks. + +You can find the end-to-end usage example [here](examples/helpers/eventwebhook/Example.java) and the tests [here](/src/test/java/com/sendgrid/helpers/eventwebhook/EventWebhookTest.java). + +If you are still having trouble getting the validation to work, follow the following instructions: +- Be sure to use the *raw* payload for validation +- Be sure to include a trailing carriage return and newline in your payload +- In case of multi-event webhooks, make sure you include the trailing newline and carriage return after *each* event From 218f51be349f82011861c4d9262344d2575e3256 Mon Sep 17 00:00:00 2001 From: Twilio Date: Mon, 18 Oct 2021 18:31:16 +0000 Subject: [PATCH 286/345] [Librarian] Version Bump --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 104bf3e8..95307ff6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,12 @@ # Change Log All notable changes to this project will be documented in this file. +[2021-10-18] Version 4.7.6 +-------------------------- +**Library - Docs** +- [PR #705](https://github.com/sendgrid/sendgrid-java/pull/705): improve signed webhook events docs. Thanks to [@shwetha-manvinkurke](https://github.com/shwetha-manvinkurke)! + + [2021-09-22] Version 4.7.5 -------------------------- **Library - Chore** From bb9c0eab5a4723d04178f7fd2864309862af770d Mon Sep 17 00:00:00 2001 From: Twilio Date: Mon, 18 Oct 2021 18:40:25 +0000 Subject: [PATCH 287/345] Release 4.7.6 --- CONTRIBUTING.md | 2 +- README.md | 4 ++-- pom.xml | 4 ++-- src/main/java/com/sendgrid/BaseInterface.java | 2 +- src/test/java/com/sendgrid/SendGridTest.java | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 38da8a7f..5229ed86 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -98,7 +98,7 @@ touch Example.java Add the example you want to test to Example.java, including the headers at the top of the file. ``` bash -javac -classpath ../repo/com/sendgrid/4.7.5/sendgrid-4.7.5-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.7.5/sendgrid-4.7.5-jar.jar:. Example +javac -classpath ../repo/com/sendgrid/4.7.6/sendgrid-4.7.6-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.7.6/sendgrid-4.7.6-jar.jar:. Example ``` diff --git a/README.md b/README.md index c0f85c93..5acaee3e 100644 --- a/README.md +++ b/README.md @@ -67,7 +67,7 @@ Add the following to your build.gradle file in the root of your project. ... dependencies { ... - implementation 'com.sendgrid:sendgrid-java:4.7.5' + implementation 'com.sendgrid:sendgrid-java:4.7.6' } repositories { @@ -86,7 +86,7 @@ mvn install You can just drop the jar file in. It's a fat jar - it has all the dependencies built in. -[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.7.5/sendgrid-java.jar) +[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.7.6/sendgrid-java.jar) ## Dependencies diff --git a/pom.xml b/pom.xml index a12304dd..4a9f4a00 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ com.sendgrid sendgrid-java Twilio SendGrid Java helper library - 4.7.5 + 4.7.6 This Java module allows you to quickly and easily send emails through Twilio SendGrid using Java. https://github.com/sendgrid/sendgrid-java @@ -26,7 +26,7 @@ https://github.com/sendgrid/sendgrid-java scm:git:git@github.com:sendgrid/sendgrid-java.git scm:git:git@github.com:sendgrid/sendgrid-java.git - 4.7.5 + 4.7.6 diff --git a/src/main/java/com/sendgrid/BaseInterface.java b/src/main/java/com/sendgrid/BaseInterface.java index b2fb04a6..31bb9dfa 100644 --- a/src/main/java/com/sendgrid/BaseInterface.java +++ b/src/main/java/com/sendgrid/BaseInterface.java @@ -11,7 +11,7 @@ */ public abstract class BaseInterface implements SendGridAPI { - private static final String VERSION = "4.7.5"; + private static final String VERSION = "4.7.6"; private static final String USER_AGENT = "sendgrid/" + VERSION + ";java"; private static final int RATE_LIMIT_RESPONSE_CODE = 429; diff --git a/src/test/java/com/sendgrid/SendGridTest.java b/src/test/java/com/sendgrid/SendGridTest.java index 02e22723..b181589d 100644 --- a/src/test/java/com/sendgrid/SendGridTest.java +++ b/src/test/java/com/sendgrid/SendGridTest.java @@ -43,7 +43,7 @@ public void testConstructWithClient() throws IOException { @Test public void testLibraryVersion() { SendGrid sg = new SendGrid(SENDGRID_API_KEY); - Assert.assertEquals(sg.getLibraryVersion(), "4.7.5"); + Assert.assertEquals(sg.getLibraryVersion(), "4.7.6"); } @Test From a2c71efc7c1513d17e67cf04e414ff7c4c1adee1 Mon Sep 17 00:00:00 2001 From: Bilal Boussayoud Date: Thu, 21 Oct 2021 09:47:43 -0600 Subject: [PATCH 288/345] feat: allow personalization of the From name and email for each email recipient (#706) * feat: allow personalization of the From name and email for email recipients --- examples/helpers/mail/Example.java | 14 ++++-- .../MultipleEmailsMultipleRecipients.java | 1 + .../helpers/mail/objects/Personalization.java | 19 ++++++++ .../java/com/sendgrid/helpers/MailTest.java | 10 +++- use-cases/README.md | 1 + use-cases/personalizations.md | 48 +++++++++++++++++++ 6 files changed, 87 insertions(+), 6 deletions(-) create mode 100644 use-cases/personalizations.md diff --git a/examples/helpers/mail/Example.java b/examples/helpers/mail/Example.java index 8ff7ed42..bffcdfdb 100644 --- a/examples/helpers/mail/Example.java +++ b/examples/helpers/mail/Example.java @@ -57,22 +57,26 @@ public static Mail buildKitchenSink() { to2.setName("Example User"); to2.setEmail("test1@example.com"); personalization2.addTo(to2); + Email fromEmail2 = new Email(); + fromEmail2.setName("Example User"); + fromEmail2.setEmail("test2@example.com"); + personalization2.setFrom(fromEmail2); to2.setName("Example User"); - to2.setEmail("test2@example.com"); + to2.setEmail("test3@example.com"); personalization2.addTo(to2); Email cc2 = new Email(); cc2.setName("Example User"); - cc2.setEmail("test3@example.com"); + cc2.setEmail("test4@example.com"); personalization2.addCc(cc2); cc2.setName("Example User"); - cc2.setEmail("test4@example.com"); + cc2.setEmail("test5@example.com"); personalization2.addCc(cc2); Email bcc2 = new Email(); bcc2.setName("Example User"); - bcc2.setEmail("test5@example.com"); + bcc2.setEmail("test6@example.com"); personalization2.addBcc(bcc2); bcc2.setName("Example User"); - bcc2.setEmail("test6@example.com"); + bcc2.setEmail("test7@example.com"); personalization2.addBcc(bcc2); personalization2.setSubject("Hello World from the Personalized Twilio SendGrid Java Library"); personalization2.addHeader("X-Test", "test"); diff --git a/examples/helpers/mail/MultipleEmailsMultipleRecipients.java b/examples/helpers/mail/MultipleEmailsMultipleRecipients.java index 35fe03b8..e96fca16 100644 --- a/examples/helpers/mail/MultipleEmailsMultipleRecipients.java +++ b/examples/helpers/mail/MultipleEmailsMultipleRecipients.java @@ -29,6 +29,7 @@ public static void main(String[] args) throws IOException { final Personalization personalization2 = new Personalization(); personalization2.addTo(new Email("test2@example.com", "Example User2")); + personalization2.setFrom(new Email("test3@example.com", "Example User3")); personalization2.addDynamicTemplateData("name", "Example User2"); personalization2.addDynamicTemplateData("city", "San Francisco"); mail.addPersonalization(personalization2); diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/Personalization.java b/src/main/java/com/sendgrid/helpers/mail/objects/Personalization.java index 82cb3de3..16e99005 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/Personalization.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/Personalization.java @@ -15,6 +15,9 @@ public class Personalization { @JsonProperty("to") private List tos; + @JsonProperty("from") + private Email from; + @JsonProperty("cc") private List ccs; @@ -59,6 +62,15 @@ public void addTo(Email email) { } } + @JsonProperty("from") + public Email getFrom() { + return from; + } + + public void setFrom(Email email) { + this.from = email; + } + @JsonProperty("cc") public List getCcs() { if (ccs == null) { @@ -260,6 +272,13 @@ public boolean equals(Object obj) { } else if (!tos.equals(other.tos)) { return false; } + if (from == null) { + if (other.from != null) { + return false; + } + } else if (!from.equals(other.from)) { + return false; + } return true; } } diff --git a/src/test/java/com/sendgrid/helpers/MailTest.java b/src/test/java/com/sendgrid/helpers/MailTest.java index bc49a197..9cdc194c 100644 --- a/src/test/java/com/sendgrid/helpers/MailTest.java +++ b/src/test/java/com/sendgrid/helpers/MailTest.java @@ -78,6 +78,10 @@ public void testKitchenSink() throws IOException { to2.setName("Example User"); to2.setEmail("test@example.com"); personalization2.addTo(to2); + Email fromEmail2 = new Email(); + fromEmail2.setName("Example Sender"); + fromEmail2.setEmail("sender@example.com"); + personalization2.setFrom(fromEmail2); Email cc2 = new Email(); cc2.setName("Example User"); cc2.setEmail("test@example.com"); @@ -110,6 +114,10 @@ public void testKitchenSink() throws IOException { to3.setName("Example User"); to3.setEmail("test@example.com"); personalization3.addTo(to3); + Email fromEmail3 = new Email(); + fromEmail3.setName("Example Sender2"); + fromEmail3.setEmail("sender2@example.com"); + personalization3.setFrom(fromEmail3); Email cc3 = new Email(); cc3.setName("Example User"); cc3.setEmail("test@example.com"); @@ -247,7 +255,7 @@ public void testKitchenSink() throws IOException { replyTo.setEmail("test@example.com"); mail.setReplyTo(replyTo); - Assert.assertEquals(mail.build(), "{\"from\":{\"name\":\"Example User\",\"email\":\"test@example.com\"},\"subject\":\"Hello World from the SendGrid Java Library\",\"personalizations\":[{\"to\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"cc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"bcc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"subject\":\"Hello World from the Personalized SendGrid Java Library\",\"headers\":{\"X-Mock\":\"true\",\"X-Test\":\"test\"},\"substitutions\":{\"%city%\":\"Denver\",\"%name%\":\"Example User\"},\"custom_args\":{\"type\":\"marketing\",\"user_id\":\"343\"},\"send_at\":1443636843},{\"to\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"cc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"bcc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"subject\":\"Hello World from the Personalized SendGrid Java Library\",\"headers\":{\"X-Mock\":\"true\",\"X-Test\":\"test\"},\"substitutions\":{\"%city%\":\"Denver\",\"%name%\":\"Example User\"},\"custom_args\":{\"type\":\"marketing\",\"user_id\":\"343\"},\"send_at\":1443636843},{\"to\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"cc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"bcc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"subject\":\"Hello World from the Personalized SendGrid Java Library\",\"headers\":{\"X-Mock\":\"true\",\"X-Test\":\"test\"},\"custom_args\":{\"type\":\"marketing\",\"user_id\":\"343\"},\"dynamic_template_data\":{\"city\":\"Denver\",\"items\":[{\"price\":\"$ 59.95\",\"text\":\"New Line Sneakers\"},{\"text\":\"Old Line Sneakers\"}],\"name\":\"Example User\"},\"send_at\":1443636843}],\"content\":[{\"type\":\"text/plain\",\"value\":\"some text here\"},{\"type\":\"text/html\",\"value\":\"some text here\"}],\"attachments\":[{\"content\":\"TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdC4gQ3JhcyBwdW12\",\"type\":\"application/pdf\",\"filename\":\"balance_001.pdf\",\"disposition\":\"attachment\",\"content_id\":\"Balance Sheet\"},{\"content\":\"BwdW\",\"type\":\"image/png\",\"filename\":\"banner.png\",\"disposition\":\"inline\",\"content_id\":\"Banner\"}],\"template_id\":\"13b8f94f-bcae-4ec6-b752-70d6cb59f932\",\"sections\":{\"%section1%\":\"Substitution Text for Section 1\",\"%section2%\":\"Substitution Text for Section 2\"},\"headers\":{\"X-Test1\":\"1\",\"X-Test2\":\"2\"},\"categories\":[\"May\",\"2016\"],\"custom_args\":{\"campaign\":\"welcome\",\"weekday\":\"morning\"},\"send_at\":1443636842,\"asm\":{\"group_id\":99,\"groups_to_display\":[4,5,6,7,8]},\"ip_pool_name\":\"23\",\"mail_settings\":{\"bcc\":{\"enable\":true,\"email\":\"test@example.com\"},\"bypass_list_management\":{\"enable\":true},\"footer\":{\"enable\":true,\"text\":\"Footer Text\",\"html\":\"Footer Text\"},\"sandbox_mode\":{\"enable\":true},\"spam_check\":{\"enable\":true,\"threshold\":1,\"post_to_url\":\"https://spamcatcher.sendgrid.com\"}},\"tracking_settings\":{\"click_tracking\":{\"enable\":true,\"enable_text\":false},\"open_tracking\":{\"enable\":true,\"substitution_tag\":\"Optional tag to replace with the open image in the body of the message\"},\"subscription_tracking\":{\"enable\":true,\"text\":\"text to insert into the text/plain portion of the message\",\"html\":\"html to insert into the text/html portion of the message\",\"substitution_tag\":\"Optional tag to replace with the open image in the body of the message\"},\"ganalytics\":{\"enable\":true,\"utm_source\":\"some source\",\"utm_term\":\"some term\",\"utm_content\":\"some content\",\"utm_campaign\":\"some name\",\"utm_medium\":\"some medium\"}},\"reply_to\":{\"name\":\"Example User\",\"email\":\"test@example.com\"}}"); + Assert.assertEquals(mail.build(), "{\"from\":{\"name\":\"Example User\",\"email\":\"test@example.com\"},\"subject\":\"Hello World from the SendGrid Java Library\",\"personalizations\":[{\"to\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"cc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"bcc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"subject\":\"Hello World from the Personalized SendGrid Java Library\",\"headers\":{\"X-Mock\":\"true\",\"X-Test\":\"test\"},\"substitutions\":{\"%city%\":\"Denver\",\"%name%\":\"Example User\"},\"custom_args\":{\"type\":\"marketing\",\"user_id\":\"343\"},\"send_at\":1443636843},{\"to\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"from\":{\"name\":\"Example Sender\",\"email\":\"sender@example.com\"},\"cc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"bcc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"subject\":\"Hello World from the Personalized SendGrid Java Library\",\"headers\":{\"X-Mock\":\"true\",\"X-Test\":\"test\"},\"substitutions\":{\"%city%\":\"Denver\",\"%name%\":\"Example User\"},\"custom_args\":{\"type\":\"marketing\",\"user_id\":\"343\"},\"send_at\":1443636843},{\"to\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"from\":{\"name\":\"Example Sender2\",\"email\":\"sender2@example.com\"},\"cc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"bcc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"subject\":\"Hello World from the Personalized SendGrid Java Library\",\"headers\":{\"X-Mock\":\"true\",\"X-Test\":\"test\"},\"custom_args\":{\"type\":\"marketing\",\"user_id\":\"343\"},\"dynamic_template_data\":{\"city\":\"Denver\",\"items\":[{\"price\":\"$ 59.95\",\"text\":\"New Line Sneakers\"},{\"text\":\"Old Line Sneakers\"}],\"name\":\"Example User\"},\"send_at\":1443636843}],\"content\":[{\"type\":\"text/plain\",\"value\":\"some text here\"},{\"type\":\"text/html\",\"value\":\"some text here\"}],\"attachments\":[{\"content\":\"TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdC4gQ3JhcyBwdW12\",\"type\":\"application/pdf\",\"filename\":\"balance_001.pdf\",\"disposition\":\"attachment\",\"content_id\":\"Balance Sheet\"},{\"content\":\"BwdW\",\"type\":\"image/png\",\"filename\":\"banner.png\",\"disposition\":\"inline\",\"content_id\":\"Banner\"}],\"template_id\":\"13b8f94f-bcae-4ec6-b752-70d6cb59f932\",\"sections\":{\"%section1%\":\"Substitution Text for Section 1\",\"%section2%\":\"Substitution Text for Section 2\"},\"headers\":{\"X-Test1\":\"1\",\"X-Test2\":\"2\"},\"categories\":[\"May\",\"2016\"],\"custom_args\":{\"campaign\":\"welcome\",\"weekday\":\"morning\"},\"send_at\":1443636842,\"asm\":{\"group_id\":99,\"groups_to_display\":[4,5,6,7,8]},\"ip_pool_name\":\"23\",\"mail_settings\":{\"bcc\":{\"enable\":true,\"email\":\"test@example.com\"},\"bypass_list_management\":{\"enable\":true},\"footer\":{\"enable\":true,\"text\":\"Footer Text\",\"html\":\"Footer Text\"},\"sandbox_mode\":{\"enable\":true},\"spam_check\":{\"enable\":true,\"threshold\":1,\"post_to_url\":\"https://spamcatcher.sendgrid.com\"}},\"tracking_settings\":{\"click_tracking\":{\"enable\":true,\"enable_text\":false},\"open_tracking\":{\"enable\":true,\"substitution_tag\":\"Optional tag to replace with the open image in the body of the message\"},\"subscription_tracking\":{\"enable\":true,\"text\":\"text to insert into the text/plain portion of the message\",\"html\":\"html to insert into the text/html portion of the message\",\"substitution_tag\":\"Optional tag to replace with the open image in the body of the message\"},\"ganalytics\":{\"enable\":true,\"utm_source\":\"some source\",\"utm_term\":\"some term\",\"utm_content\":\"some content\",\"utm_campaign\":\"some name\",\"utm_medium\":\"some medium\"}},\"reply_to\":{\"name\":\"Example User\",\"email\":\"test@example.com\"}}"); } @Test diff --git a/use-cases/README.md b/use-cases/README.md index 988af54c..204d8609 100644 --- a/use-cases/README.md +++ b/use-cases/README.md @@ -5,6 +5,7 @@ Please [open an issue](https://github.com/sendgrid/sendgrid-ruby/issues) or [mak # Email Use Cases * [Transactional Templates](transactional-templates.md) * [Legacy Templates](legacy-templates.md) +* [Personalizations](personalizations.md) # Twilio Use Cases * [Twilio Setup](twilio-setup.md) diff --git a/use-cases/personalizations.md b/use-cases/personalizations.md new file mode 100644 index 00000000..494161d8 --- /dev/null +++ b/use-cases/personalizations.md @@ -0,0 +1,48 @@ +# Personalizations + +This example goes over how to send multiple emails using personalizations with the helper class. + +A similar example can be found in `examples/helpers/mail/MultipleEmailsMultipleRecipients.java`, and further documentation can be found [here](https://docs.sendgrid.com/for-developers/sending-email/personalizations). + +```java +import com.sendgrid.*; +import java.io.IOException; + +public class Example { + public static void main(String[] args) { + final Mail mail = new Mail(); + + // Note that the domain of the from addresses should be the same + mail.setFrom(new Email("test@example.com", "Example User")); + mail.setSubject("I'm the original subject"); + mail.addContent(new Content("text/plain", "and this is some content")); + mail.addContent(new Content("text/html", "and this is some content")); + + final Personalization personalization1 = new Personalization(); + personalization1.addTo(new Email("test1@example.com", "Example User1")); + personalization1.addCc(new Email("test2@example.com", "Example User2")); + mail.addPersonalization(personalization1); + + final Personalization personalization2 = new Personalization(); + personalization2.addTo(new Email("test3@example.com", "Example User3")); + personalization2.setFrom(new Email("test4@example.com", "Example User4")); + personalization2.setSubject(new Subject("I'm the personalized subject")); + personalization2.addBcc(new Email("test5@example.com", "Example User5")); + mail.addPersonalization(personalization2); + + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Request request = new Request(); + try { + request.setMethod(Method.POST); + request.setEndpoint("mail/send"); + request.setBody(mail.build()); + Response response = sg.api(request); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + } catch (IOException ex) { + throw ex; + } + } +} +``` \ No newline at end of file From 7a58fcd4f0dca8c8de984d762bacb88717268753 Mon Sep 17 00:00:00 2001 From: Ethan Lo Date: Mon, 1 Nov 2021 18:20:04 -0400 Subject: [PATCH 289/345] fix: Add missing bypass settings to MailSettings (#707) * Add missing bypass settings to MailSettings --- examples/helpers/mail/Example.java | 11 +++ .../helpers/mail/objects/MailSettings.java | 88 +++++++++++++++++++ .../java/com/sendgrid/helpers/MailTest.java | 11 ++- 3 files changed, 109 insertions(+), 1 deletion(-) diff --git a/examples/helpers/mail/Example.java b/examples/helpers/mail/Example.java index bffcdfdb..174e38ba 100644 --- a/examples/helpers/mail/Example.java +++ b/examples/helpers/mail/Example.java @@ -149,6 +149,17 @@ public static Mail buildKitchenSink() { Setting bypassListManagement = new Setting(); bypassListManagement.setEnable(true); mailSettings.setBypassListManagement(bypassListManagement); + // Note: Bypass Spam, Bounce, and Unsubscribe management cannot + // be combined with Bypass List Management + Setting bypassSpamManagement = new Setting(); + bypassSpamManagement.setEnable(true); + mailSettings.setBypassSpamManagement(bypassSpamManagement); + Setting bypassBounceManagement = new Setting(); + bypassBounceManagement.setEnable(true); + mailSettings.setBypassBounceManagement(bypassBounceManagement); + Setting bypassUnsubscribeManagement = new Setting(); + bypassUnsubscribeManagement.setEnable(true); + mailSettings.setBypassUnsubscribeManagement(bypassUnsubscribeManagement); FooterSetting footerSetting = new FooterSetting(); footerSetting.setEnable(true); footerSetting.setText("Footer Text"); diff --git a/src/main/java/com/sendgrid/helpers/mail/objects/MailSettings.java b/src/main/java/com/sendgrid/helpers/mail/objects/MailSettings.java index d83a56b6..1bad6b09 100644 --- a/src/main/java/com/sendgrid/helpers/mail/objects/MailSettings.java +++ b/src/main/java/com/sendgrid/helpers/mail/objects/MailSettings.java @@ -18,6 +18,15 @@ public class MailSettings { @JsonProperty("bypass_list_management") private Setting bypassListManagement; + @JsonProperty("bypass_spam_management") + private Setting bypassSpamManagement; + + @JsonProperty("bypass_bounce_management") + private Setting bypassBounceManagement; + + @JsonProperty("bypass_unsubscribe_management") + private Setting bypassUnsubscribeManagement; + @JsonProperty("footer") private FooterSetting footerSetting; @@ -58,6 +67,58 @@ public void setBypassListManagement(Setting bypassListManagement) { this.bypassListManagement = bypassListManagement; } + /** + * Allows you to bypass the spam report list to ensure that the email is delivered to recipients. + * Bounce and unsubscribe lists will still be checked; addresses on these other lists will not + * receive the message. + * + * This filter cannot be combined with the bypass_list_management filter. + * @return the bypass spam setting + */ + + @JsonProperty("bypass_spam_management") + public Setting getBypassSpamManagement() { + return bypassSpamManagement; + } + + public void setBypassSpamManagement(Setting bypassSpamManagement) { + this.bypassSpamManagement = bypassSpamManagement; + } + + /** + * Allows you to bypass the bounce list to ensure that the email is delivered to recipients. + * Spam report and unsubscribe lists will still be checked; addresses on these other lists + * will not receive the message. + * + * This filter cannot be combined with the bypass_list_management filter. + * @return the bypass bounce setting + */ + @JsonProperty("bypass_bounce_management") + public Setting getBypassBounceManagement() { + return bypassBounceManagement; + } + public void setBypassBounceManagement(Setting bypassBounceManagement) { + this.bypassBounceManagement = bypassBounceManagement; + } + + /** + * Allows you to bypass the global unsubscribe list to ensure that the email is delivered + * to recipients. Bounce and spam report lists will still be checked; addresses on these + * other lists will not receive the message. This filter applies only to global unsubscribes + * and will not bypass group unsubscribes. + * + * This filter cannot be combined with the bypass_list_management filter. + * @return the bypass unsubscribe setting + */ + @JsonProperty("bypass_unsubscribe_management") + public Setting getBypassUnsubscribeManagement() { + return bypassUnsubscribeManagement; + } + + public void setBypassUnsubscribeManagement(Setting bypassUnsubscribeManagement) { + this.bypassUnsubscribeManagement = bypassUnsubscribeManagement; + } + /** * Get the footer settings that you would like included on every email. * @@ -128,6 +189,12 @@ public int hashCode() { result = prime * result + ((bccSettings == null) ? 0 : bccSettings.hashCode()); result = prime * result + ((bypassListManagement == null) ? 0 : bypassListManagement.hashCode()); + result = + prime * result + ((bypassSpamManagement == null) ? 0 : bypassSpamManagement.hashCode()); + result = + prime * result + ((bypassBounceManagement == null) ? 0 : bypassBounceManagement.hashCode()); + result = + prime * result + ((bypassUnsubscribeManagement == null) ? 0 : bypassUnsubscribeManagement.hashCode()); result = prime * result + ((footerSetting == null) ? 0 : footerSetting.hashCode()); result = prime * result + ((sandBoxMode == null) ? 0 : sandBoxMode.hashCode()); result = prime * result + ((spamCheckSetting == null) ? 0 : spamCheckSetting.hashCode()); @@ -160,6 +227,27 @@ public boolean equals(Object obj) { } else if (!bypassListManagement.equals(other.bypassListManagement)) { return false; } + if (bypassSpamManagement == null) { + if (other.bypassSpamManagement != null) { + return false; + } + } else if (!bypassSpamManagement.equals(other.bypassSpamManagement)) { + return false; + } + if (bypassBounceManagement == null) { + if (other.bypassBounceManagement != null) { + return false; + } + } else if (!bypassBounceManagement.equals(other.bypassBounceManagement)) { + return false; + } + if (bypassUnsubscribeManagement == null) { + if (other.bypassUnsubscribeManagement != null) { + return false; + } + } else if (!bypassUnsubscribeManagement.equals(other.bypassUnsubscribeManagement)) { + return false; + } if (footerSetting == null) { if (other.footerSetting != null) { return false; diff --git a/src/test/java/com/sendgrid/helpers/MailTest.java b/src/test/java/com/sendgrid/helpers/MailTest.java index 9cdc194c..22c7f8db 100644 --- a/src/test/java/com/sendgrid/helpers/MailTest.java +++ b/src/test/java/com/sendgrid/helpers/MailTest.java @@ -212,7 +212,16 @@ public void testKitchenSink() throws IOException { mailSettings.setSandboxMode(sandBoxMode); Setting bypassListManagement = new Setting(); bypassListManagement.setEnable(true); + Setting bypassSpamManagement = new Setting(); + bypassSpamManagement.setEnable(true); + Setting bypassBounceManagement = new Setting(); + bypassBounceManagement.setEnable(true); + Setting bypassUnsubscribeManagement = new Setting(); + bypassUnsubscribeManagement.setEnable(true); mailSettings.setBypassListManagement(bypassListManagement); + mailSettings.setBypassSpamManagement(bypassSpamManagement); + mailSettings.setBypassBounceManagement(bypassBounceManagement); + mailSettings.setBypassUnsubscribeManagement(bypassUnsubscribeManagement); FooterSetting footerSetting = new FooterSetting(); footerSetting.setEnable(true); footerSetting.setText("Footer Text"); @@ -255,7 +264,7 @@ public void testKitchenSink() throws IOException { replyTo.setEmail("test@example.com"); mail.setReplyTo(replyTo); - Assert.assertEquals(mail.build(), "{\"from\":{\"name\":\"Example User\",\"email\":\"test@example.com\"},\"subject\":\"Hello World from the SendGrid Java Library\",\"personalizations\":[{\"to\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"cc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"bcc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"subject\":\"Hello World from the Personalized SendGrid Java Library\",\"headers\":{\"X-Mock\":\"true\",\"X-Test\":\"test\"},\"substitutions\":{\"%city%\":\"Denver\",\"%name%\":\"Example User\"},\"custom_args\":{\"type\":\"marketing\",\"user_id\":\"343\"},\"send_at\":1443636843},{\"to\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"from\":{\"name\":\"Example Sender\",\"email\":\"sender@example.com\"},\"cc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"bcc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"subject\":\"Hello World from the Personalized SendGrid Java Library\",\"headers\":{\"X-Mock\":\"true\",\"X-Test\":\"test\"},\"substitutions\":{\"%city%\":\"Denver\",\"%name%\":\"Example User\"},\"custom_args\":{\"type\":\"marketing\",\"user_id\":\"343\"},\"send_at\":1443636843},{\"to\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"from\":{\"name\":\"Example Sender2\",\"email\":\"sender2@example.com\"},\"cc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"bcc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"subject\":\"Hello World from the Personalized SendGrid Java Library\",\"headers\":{\"X-Mock\":\"true\",\"X-Test\":\"test\"},\"custom_args\":{\"type\":\"marketing\",\"user_id\":\"343\"},\"dynamic_template_data\":{\"city\":\"Denver\",\"items\":[{\"price\":\"$ 59.95\",\"text\":\"New Line Sneakers\"},{\"text\":\"Old Line Sneakers\"}],\"name\":\"Example User\"},\"send_at\":1443636843}],\"content\":[{\"type\":\"text/plain\",\"value\":\"some text here\"},{\"type\":\"text/html\",\"value\":\"some text here\"}],\"attachments\":[{\"content\":\"TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdC4gQ3JhcyBwdW12\",\"type\":\"application/pdf\",\"filename\":\"balance_001.pdf\",\"disposition\":\"attachment\",\"content_id\":\"Balance Sheet\"},{\"content\":\"BwdW\",\"type\":\"image/png\",\"filename\":\"banner.png\",\"disposition\":\"inline\",\"content_id\":\"Banner\"}],\"template_id\":\"13b8f94f-bcae-4ec6-b752-70d6cb59f932\",\"sections\":{\"%section1%\":\"Substitution Text for Section 1\",\"%section2%\":\"Substitution Text for Section 2\"},\"headers\":{\"X-Test1\":\"1\",\"X-Test2\":\"2\"},\"categories\":[\"May\",\"2016\"],\"custom_args\":{\"campaign\":\"welcome\",\"weekday\":\"morning\"},\"send_at\":1443636842,\"asm\":{\"group_id\":99,\"groups_to_display\":[4,5,6,7,8]},\"ip_pool_name\":\"23\",\"mail_settings\":{\"bcc\":{\"enable\":true,\"email\":\"test@example.com\"},\"bypass_list_management\":{\"enable\":true},\"footer\":{\"enable\":true,\"text\":\"Footer Text\",\"html\":\"Footer Text\"},\"sandbox_mode\":{\"enable\":true},\"spam_check\":{\"enable\":true,\"threshold\":1,\"post_to_url\":\"https://spamcatcher.sendgrid.com\"}},\"tracking_settings\":{\"click_tracking\":{\"enable\":true,\"enable_text\":false},\"open_tracking\":{\"enable\":true,\"substitution_tag\":\"Optional tag to replace with the open image in the body of the message\"},\"subscription_tracking\":{\"enable\":true,\"text\":\"text to insert into the text/plain portion of the message\",\"html\":\"html to insert into the text/html portion of the message\",\"substitution_tag\":\"Optional tag to replace with the open image in the body of the message\"},\"ganalytics\":{\"enable\":true,\"utm_source\":\"some source\",\"utm_term\":\"some term\",\"utm_content\":\"some content\",\"utm_campaign\":\"some name\",\"utm_medium\":\"some medium\"}},\"reply_to\":{\"name\":\"Example User\",\"email\":\"test@example.com\"}}"); + Assert.assertEquals(mail.build(), "{\"from\":{\"name\":\"Example User\",\"email\":\"test@example.com\"},\"subject\":\"Hello World from the SendGrid Java Library\",\"personalizations\":[{\"to\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"cc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"bcc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"subject\":\"Hello World from the Personalized SendGrid Java Library\",\"headers\":{\"X-Mock\":\"true\",\"X-Test\":\"test\"},\"substitutions\":{\"%city%\":\"Denver\",\"%name%\":\"Example User\"},\"custom_args\":{\"type\":\"marketing\",\"user_id\":\"343\"},\"send_at\":1443636843},{\"to\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"from\":{\"name\":\"Example Sender\",\"email\":\"sender@example.com\"},\"cc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"bcc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"subject\":\"Hello World from the Personalized SendGrid Java Library\",\"headers\":{\"X-Mock\":\"true\",\"X-Test\":\"test\"},\"substitutions\":{\"%city%\":\"Denver\",\"%name%\":\"Example User\"},\"custom_args\":{\"type\":\"marketing\",\"user_id\":\"343\"},\"send_at\":1443636843},{\"to\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"from\":{\"name\":\"Example Sender2\",\"email\":\"sender2@example.com\"},\"cc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"bcc\":[{\"name\":\"Example User\",\"email\":\"test@example.com\"},{\"name\":\"Example User\",\"email\":\"test@example.com\"}],\"subject\":\"Hello World from the Personalized SendGrid Java Library\",\"headers\":{\"X-Mock\":\"true\",\"X-Test\":\"test\"},\"custom_args\":{\"type\":\"marketing\",\"user_id\":\"343\"},\"dynamic_template_data\":{\"city\":\"Denver\",\"items\":[{\"price\":\"$ 59.95\",\"text\":\"New Line Sneakers\"},{\"text\":\"Old Line Sneakers\"}],\"name\":\"Example User\"},\"send_at\":1443636843}],\"content\":[{\"type\":\"text/plain\",\"value\":\"some text here\"},{\"type\":\"text/html\",\"value\":\"some text here\"}],\"attachments\":[{\"content\":\"TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdC4gQ3JhcyBwdW12\",\"type\":\"application/pdf\",\"filename\":\"balance_001.pdf\",\"disposition\":\"attachment\",\"content_id\":\"Balance Sheet\"},{\"content\":\"BwdW\",\"type\":\"image/png\",\"filename\":\"banner.png\",\"disposition\":\"inline\",\"content_id\":\"Banner\"}],\"template_id\":\"13b8f94f-bcae-4ec6-b752-70d6cb59f932\",\"sections\":{\"%section1%\":\"Substitution Text for Section 1\",\"%section2%\":\"Substitution Text for Section 2\"},\"headers\":{\"X-Test1\":\"1\",\"X-Test2\":\"2\"},\"categories\":[\"May\",\"2016\"],\"custom_args\":{\"campaign\":\"welcome\",\"weekday\":\"morning\"},\"send_at\":1443636842,\"asm\":{\"group_id\":99,\"groups_to_display\":[4,5,6,7,8]},\"ip_pool_name\":\"23\",\"mail_settings\":{\"bcc\":{\"enable\":true,\"email\":\"test@example.com\"},\"bypass_list_management\":{\"enable\":true},\"bypass_spam_management\":{\"enable\":true},\"bypass_bounce_management\":{\"enable\":true},\"bypass_unsubscribe_management\":{\"enable\":true},\"footer\":{\"enable\":true,\"text\":\"Footer Text\",\"html\":\"Footer Text\"},\"sandbox_mode\":{\"enable\":true},\"spam_check\":{\"enable\":true,\"threshold\":1,\"post_to_url\":\"https://spamcatcher.sendgrid.com\"}},\"tracking_settings\":{\"click_tracking\":{\"enable\":true,\"enable_text\":false},\"open_tracking\":{\"enable\":true,\"substitution_tag\":\"Optional tag to replace with the open image in the body of the message\"},\"subscription_tracking\":{\"enable\":true,\"text\":\"text to insert into the text/plain portion of the message\",\"html\":\"html to insert into the text/html portion of the message\",\"substitution_tag\":\"Optional tag to replace with the open image in the body of the message\"},\"ganalytics\":{\"enable\":true,\"utm_source\":\"some source\",\"utm_term\":\"some term\",\"utm_content\":\"some content\",\"utm_campaign\":\"some name\",\"utm_medium\":\"some medium\"}},\"reply_to\":{\"name\":\"Example User\",\"email\":\"test@example.com\"}}"); } @Test From f28554621884c0d44f1dc7564f931a8602aa7346 Mon Sep 17 00:00:00 2001 From: Twilio Date: Wed, 3 Nov 2021 18:51:56 +0000 Subject: [PATCH 290/345] [Librarian] Version Bump --- CHANGELOG.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 95307ff6..a3110c8b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,15 @@ # Change Log All notable changes to this project will be documented in this file. +[2021-11-03] Version 4.8.0 +-------------------------- +**Library - Fix** +- [PR #707](https://github.com/sendgrid/sendgrid-java/pull/707): Add missing bypass settings to MailSettings. Thanks to [@arkitex](https://github.com/arkitex)! + +**Library - Feature** +- [PR #706](https://github.com/sendgrid/sendgrid-java/pull/706): allow personalization of the From name and email for each email recipient. Thanks to [@beebzz](https://github.com/beebzz)! + + [2021-10-18] Version 4.7.6 -------------------------- **Library - Docs** From deffb1a395a6ed043ad78ae4da9dd03b22614e59 Mon Sep 17 00:00:00 2001 From: Twilio Date: Wed, 3 Nov 2021 19:00:15 +0000 Subject: [PATCH 291/345] Release 4.8.0 --- CONTRIBUTING.md | 2 +- README.md | 4 ++-- pom.xml | 4 ++-- src/main/java/com/sendgrid/BaseInterface.java | 2 +- src/test/java/com/sendgrid/SendGridTest.java | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 5229ed86..f5eeef08 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -98,7 +98,7 @@ touch Example.java Add the example you want to test to Example.java, including the headers at the top of the file. ``` bash -javac -classpath ../repo/com/sendgrid/4.7.6/sendgrid-4.7.6-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.7.6/sendgrid-4.7.6-jar.jar:. Example +javac -classpath ../repo/com/sendgrid/4.8.0/sendgrid-4.8.0-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.8.0/sendgrid-4.8.0-jar.jar:. Example ``` diff --git a/README.md b/README.md index 5acaee3e..d8ac5954 100644 --- a/README.md +++ b/README.md @@ -67,7 +67,7 @@ Add the following to your build.gradle file in the root of your project. ... dependencies { ... - implementation 'com.sendgrid:sendgrid-java:4.7.6' + implementation 'com.sendgrid:sendgrid-java:4.8.0' } repositories { @@ -86,7 +86,7 @@ mvn install You can just drop the jar file in. It's a fat jar - it has all the dependencies built in. -[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.7.6/sendgrid-java.jar) +[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.8.0/sendgrid-java.jar) ## Dependencies diff --git a/pom.xml b/pom.xml index 4a9f4a00..3b6a9fc1 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ com.sendgrid sendgrid-java Twilio SendGrid Java helper library - 4.7.6 + 4.8.0 This Java module allows you to quickly and easily send emails through Twilio SendGrid using Java. https://github.com/sendgrid/sendgrid-java @@ -26,7 +26,7 @@ https://github.com/sendgrid/sendgrid-java scm:git:git@github.com:sendgrid/sendgrid-java.git scm:git:git@github.com:sendgrid/sendgrid-java.git - 4.7.6 + 4.8.0 diff --git a/src/main/java/com/sendgrid/BaseInterface.java b/src/main/java/com/sendgrid/BaseInterface.java index 31bb9dfa..0165c442 100644 --- a/src/main/java/com/sendgrid/BaseInterface.java +++ b/src/main/java/com/sendgrid/BaseInterface.java @@ -11,7 +11,7 @@ */ public abstract class BaseInterface implements SendGridAPI { - private static final String VERSION = "4.7.6"; + private static final String VERSION = "4.8.0"; private static final String USER_AGENT = "sendgrid/" + VERSION + ";java"; private static final int RATE_LIMIT_RESPONSE_CODE = 429; diff --git a/src/test/java/com/sendgrid/SendGridTest.java b/src/test/java/com/sendgrid/SendGridTest.java index b181589d..cd8b1673 100644 --- a/src/test/java/com/sendgrid/SendGridTest.java +++ b/src/test/java/com/sendgrid/SendGridTest.java @@ -43,7 +43,7 @@ public void testConstructWithClient() throws IOException { @Test public void testLibraryVersion() { SendGrid sg = new SendGrid(SENDGRID_API_KEY); - Assert.assertEquals(sg.getLibraryVersion(), "4.7.6"); + Assert.assertEquals(sg.getLibraryVersion(), "4.8.0"); } @Test From 0923ae3ef98517b12e40391ae739446b98dc9f41 Mon Sep 17 00:00:00 2001 From: Jennifer Mah Date: Fri, 19 Nov 2021 13:04:56 -0800 Subject: [PATCH 292/345] chore: add mvn package to the makefile --- Makefile | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Makefile b/Makefile index 82e5c343..ee8f4586 100644 --- a/Makefile +++ b/Makefile @@ -6,6 +6,9 @@ install: mvn clean install -DskipTests=true -Dgpg.skip -Dmaven.javadoc.skip=true -B cp target/sendgrid-java-$(VERSION)-shaded.jar sendgrid-java.jar +package: + mvn package -DskipTests=true -Dgpg.skip -Dmaven.javadoc.skip=true -B + test: mvn test spotbugs:spotbugs checkstyle:check -Dcheckstyle.config.location=google_checks.xml From 9bdebbe2e066f6b3ea80baf3fdbaeda46b9bc56e Mon Sep 17 00:00:00 2001 From: Jennifer Mah Date: Fri, 19 Nov 2021 14:08:01 -0800 Subject: [PATCH 293/345] chore: add jar copying to make package --- Makefile | 1 + 1 file changed, 1 insertion(+) diff --git a/Makefile b/Makefile index ee8f4586..c9d7fc3c 100644 --- a/Makefile +++ b/Makefile @@ -8,6 +8,7 @@ install: package: mvn package -DskipTests=true -Dgpg.skip -Dmaven.javadoc.skip=true -B + cp target/sendgrid-java-$(VERSION)-shaded.jar sendgrid-java.jar test: mvn test spotbugs:spotbugs checkstyle:check -Dcheckstyle.config.location=google_checks.xml From f6b666c016c7a2ebe9835a36398821a596df9a21 Mon Sep 17 00:00:00 2001 From: Jennifer Mah <42650198+JenniferMah@users.noreply.github.com> Date: Sat, 20 Nov 2021 10:55:44 -0800 Subject: [PATCH 294/345] chore: clean up makefile --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index c9d7fc3c..0c93f25f 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -.PHONY: install test test-integ test-docker clean +.PHONY: install package test test-integ test-docker clean VERSION := $(shell mvn help:evaluate -Dexpression=project.version --batch-mode | grep -e '^[^\[]') install: From c655b128c935d0a7a69035954765a5e364640e5d Mon Sep 17 00:00:00 2001 From: Elise Shanholtz Date: Tue, 30 Nov 2021 15:31:08 -0800 Subject: [PATCH 295/345] chore: migrate to github actions (#709) --- .codeclimate.yml | 8 --- .github/workflows/release.yml | 50 +++++++++++++++++++ .github/workflows/test.yml | 42 ++++++++++++++++ .maven.xml | 24 --------- .travis.yml | 34 ------------- README.md | 2 +- src/test/java/com/sendgrid/SendGridTest.java | 8 +-- .../com/sendgrid/TestRequiredFilesExist.java | 12 ----- 8 files changed, 97 insertions(+), 83 deletions(-) delete mode 100644 .codeclimate.yml create mode 100644 .github/workflows/release.yml create mode 100644 .github/workflows/test.yml delete mode 100644 .maven.xml delete mode 100644 .travis.yml diff --git a/.codeclimate.yml b/.codeclimate.yml deleted file mode 100644 index 5b82009c..00000000 --- a/.codeclimate.yml +++ /dev/null @@ -1,8 +0,0 @@ ---- -plugins: - checkstyle: - enabled: true - fixme: - enabled: true - pmd: - enabled: true diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 00000000..d4317b90 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,50 @@ +name: Release +on: + push: + tags: + - '*' + workflow_dispatch: + +jobs: + release: + name: Release + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + + - name: Set up Sonatype Maven + uses: actions/setup-java@v2 + with: + java-version: 8 + distribution: temurin + server-id: ossrh + server-username: MAVEN_USERNAME + server-password: MAVEN_PASSWORD + gpg-private-key: ${{ secrets.GPG_PRIVATE_KEY }} + gpg-passphrase: GPG_PASSPHRASE + + - run: mvn install -DskipTests=true -Dgpg.skip -Dmaven.javadoc.skip=true -B -V + - name: Publish to Maven + env: + MAVEN_USERNAME: ${{ secrets.SONATYPE_USERNAME }} + MAVEN_PASSWORD: ${{ secrets.SONATYPE_PASSWORD }} + GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }} + run: mvn clean deploy -DskipTests=true -B -U -Prelease + + notify-on-failure: + name: Slack notify on failure + if: ${{ failure() }} + needs: [release] + runs-on: ubuntu-latest + steps: + - uses: rtCamp/action-slack-notify@v2 + env: + SLACK_COLOR: 'danger' + SLACK_ICON_EMOJI: ':github:' + SLACK_MESSAGE: ${{ format('Failed to release {1}{3} {0}/{1}/actions/runs/{2}', github.server_url, github.repository, github.run_id, ':') }} + SLACK_TITLE: Release Failure + SLACK_USERNAME: GitHub Actions + SLACK_MSG_AUTHOR: twilio-dx + SLACK_FOOTER: Posted automatically using GitHub Actions + SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }} + MSG_MINIMAL: true diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 00000000..d981dca6 --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,42 @@ +name: Tests +on: + push: + branches: [ '*' ] + pull_request: + branches: [ main ] + schedule: + # Run automatically at 8AM PST Monday-Friday + - cron: '0 15 * * 1-5' + workflow_dispatch: + +jobs: + test: + name: Test + runs-on: ubuntu-latest + timeout-minutes: 20 + strategy: + matrix: + java: [8, 11] + steps: + - uses: actions/checkout@v2 + + - name: Run Unit Tests + run: make test-docker version=${{ matrix.java }} + + notify-on-failure: + name: Slack notify on failure + if: ${{ failure() && github.ref == 'refs/heads/main' && github.event_name != 'pull_request' }} + needs: [test] + runs-on: ubuntu-latest + steps: + - uses: rtCamp/action-slack-notify@v2 + env: + SLACK_COLOR: ${{ needs.test.status }} + SLACK_ICON_EMOJI: ':github:' + SLACK_MESSAGE: ${{ format('Build {2} in {1} failed{3} {0}/{1}/actions/runs/{2}', github.server_url, github.repository, github.run_id, ':') }} + SLACK_TITLE: Build Failure + SLACK_USERNAME: GitHub Actions + SLACK_MSG_AUTHOR: twilio-dx + SLACK_FOOTER: Posted automatically using GitHub Actions + SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }} + MSG_MINIMAL: true diff --git a/.maven.xml b/.maven.xml deleted file mode 100644 index bef1ab68..00000000 --- a/.maven.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - - - ossrh - ${env.SONATYPE_USERNAME} - ${env.SONATYPE_PASSWORD} - - - - - - ossrh - - true - - - ${env.GPG_EXECUTABLE} - ${env.GPG_PASSPHRASE} - - - - diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index d4b2a0ac..00000000 --- a/.travis.yml +++ /dev/null @@ -1,34 +0,0 @@ -language: java -jdk: openjdk8 -before_install: -- curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - -- sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" -- sudo apt-get update -- sudo apt-get -y -o Dpkg::Options::="--force-confnew" install docker-ce -- docker --version -- echo $GPG_SECRET_KEYS | base64 --decode | $GPG_EXECUTABLE --import --batch || true -- echo $GPG_OWNERTRUST | base64 --decode | $GPG_EXECUTABLE --import-ownertrust --batch || true -env: -- version=8 -- version=11 -script: -- if [[ "$TRAVIS_BRANCH" == "main" || "$TRAVIS_BRANCH" == "travis" ]] && [ "$TRAVIS_PULL_REQUEST" == "false" ]; then - echo "${DOCKER_PASSWORD}" | docker login -u "${DOCKER_USERNAME}" --password-stdin; - fi -- make test-docker -deploy: -- provider: script - script: mvn clean deploy --settings .maven.xml -DskipTests=true -B -U -Prelease - edge: true - on: - tags: true - condition: "$version = 8" - branch: main -notifications: - slack: - if: branch = main - on_pull_requests: false - on_success: never - on_failure: change - rooms: - secure: NGGQe8OMWfbAOM6O7odDHtY/UVdqJ6oLQzB96QlTNkGgbyINKdufHxHaiv0SC/w4alUzzs6gw1h2WCpxw1PPl+pnVAeSVLfvRLYQApCGigWF0s5AyfVxtoG7bZOQLhsddC1ldQr12G4zclew+7k+0bgra4ENkbvv1OGiQdPJ08U= diff --git a/README.md b/README.md index d8ac5954..4b140912 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ ![SendGrid Logo](twilio_sendgrid_logo.png) -[![Travis Badge](https://travis-ci.com/sendgrid/sendgrid-java.svg?branch=main)](https://travis-ci.com/sendgrid/sendgrid-java) +[![BuildStatus](https://github.com/sendgrid/sendgrid-java/actions/workflows/test.yml/badge.svg)](https://github.com/sendgrid/sendgrid-java/actions/workflows/test.yml) [![Maven Central](https://img.shields.io/maven-central/v/com.sendgrid/sendgrid-java.svg)](http://mvnrepository.com/artifact/com.sendgrid/sendgrid-java) [![Twitter Follow](https://img.shields.io/twitter/follow/sendgrid.svg?style=social&label=Follow)](https://twitter.com/sendgrid) [![GitHub contributors](https://img.shields.io/github/contributors/sendgrid/sendgrid-java.svg)](https://github.com/sendgrid/sendgrid-java/graphs/contributors) diff --git a/src/test/java/com/sendgrid/SendGridTest.java b/src/test/java/com/sendgrid/SendGridTest.java index cd8b1673..089c4a11 100644 --- a/src/test/java/com/sendgrid/SendGridTest.java +++ b/src/test/java/com/sendgrid/SendGridTest.java @@ -2193,25 +2193,25 @@ public void test_suppression_invalid_emails__email__delete() throws IOException } @Test - public void test_suppression_spam_report__email__get() throws IOException { + public void test_suppression_spam_reports__email__get() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "200"); Request request = new Request(); request.setMethod(Method.GET); - request.setEndpoint("suppression/spam_report/{email}"); + request.setEndpoint("suppression/spam_reports/{email}"); Response response = sg.api(request); Assert.assertEquals(200, response.getStatusCode()); } @Test - public void test_suppression_spam_report__email__delete() throws IOException { + public void test_suppression_spam_reports__email__delete() throws IOException { SendGrid sg = new SendGrid("SENDGRID_API_KEY"); sg.addRequestHeader("X-Mock", "204"); Request request = new Request(); request.setMethod(Method.DELETE); - request.setEndpoint("suppression/spam_report/{email}"); + request.setEndpoint("suppression/spam_reports/{email}"); Response response = sg.api(request); Assert.assertEquals(204, response.getStatusCode()); } diff --git a/src/test/java/com/sendgrid/TestRequiredFilesExist.java b/src/test/java/com/sendgrid/TestRequiredFilesExist.java index d6e000d0..71209ea1 100644 --- a/src/test/java/com/sendgrid/TestRequiredFilesExist.java +++ b/src/test/java/com/sendgrid/TestRequiredFilesExist.java @@ -25,18 +25,6 @@ public void checkGitIgnoreExists() { assertTrue(new File("./.gitignore").exists()); } - // ./.travis.yml - @Test - public void checkTravisExists() { - assertTrue(new File("./.travis.yml").exists()); - } - - // ./.codeclimate.yml - @Test - public void checkCodeClimateExists() { - assertTrue(new File("./.codeclimate.yml").exists()); - } - // ./CHANGELOG.md @Test public void checkChangelogExists() { From 230dfc42dfbbe0be6bacc6ef4bbe53d3454763fe Mon Sep 17 00:00:00 2001 From: Elise Shanholtz Date: Wed, 1 Dec 2021 11:47:20 -0800 Subject: [PATCH 296/345] chore: fix pom for release (#710) --- pom.xml | 42 +++++++++--------------------------------- 1 file changed, 9 insertions(+), 33 deletions(-) diff --git a/pom.xml b/pom.xml index 3b6a9fc1..a4189221 100644 --- a/pom.xml +++ b/pom.xml @@ -29,38 +29,6 @@ 4.8.0 - - gpg - - false - - - - - org.apache.maven.plugins - maven-gpg-plugin - 1.6 - - - sign-artifacts - verify - - sign - - - - - ${gpg.keyname} - ${gpg.passphrase} - - --pinentry-mode - loopback - - - - - - release @@ -118,6 +86,14 @@ sign + + ${gpg.keyname} + ${gpg.passphrase} + + --pinentry-mode + loopback + + @@ -330,4 +306,4 @@ - \ No newline at end of file + From d52063285c7be507c511c101be1826d104ba4b1e Mon Sep 17 00:00:00 2001 From: Twilio Date: Wed, 1 Dec 2021 21:44:52 +0000 Subject: [PATCH 297/345] [Librarian] Version Bump --- CHANGELOG.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index a3110c8b..41ca85ef 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,13 @@ # Change Log All notable changes to this project will be documented in this file. +[2021-12-01] Version 4.8.1 +-------------------------- +**Library - Chore** +- [PR #710](https://github.com/sendgrid/sendgrid-java/pull/710): fix pom for release. Thanks to [@eshanholtz](https://github.com/eshanholtz)! +- [PR #709](https://github.com/sendgrid/sendgrid-java/pull/709): migrate to github actions. Thanks to [@eshanholtz](https://github.com/eshanholtz)! + + [2021-11-03] Version 4.8.0 -------------------------- **Library - Fix** From dd2cc8066575b213a0be5ee548ca58cfe416213e Mon Sep 17 00:00:00 2001 From: Twilio Date: Wed, 1 Dec 2021 22:15:33 +0000 Subject: [PATCH 298/345] Release 4.8.1 --- CONTRIBUTING.md | 2 +- README.md | 4 ++-- pom.xml | 10 +++++----- src/main/java/com/sendgrid/BaseInterface.java | 2 +- src/test/java/com/sendgrid/SendGridTest.java | 2 +- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index f5eeef08..0f00dcd1 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -98,7 +98,7 @@ touch Example.java Add the example you want to test to Example.java, including the headers at the top of the file. ``` bash -javac -classpath ../repo/com/sendgrid/4.8.0/sendgrid-4.8.0-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.8.0/sendgrid-4.8.0-jar.jar:. Example +javac -classpath ../repo/com/sendgrid/4.8.1/sendgrid-4.8.1-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.8.1/sendgrid-4.8.1-jar.jar:. Example ``` diff --git a/README.md b/README.md index 4b140912..500bcf5b 100644 --- a/README.md +++ b/README.md @@ -67,7 +67,7 @@ Add the following to your build.gradle file in the root of your project. ... dependencies { ... - implementation 'com.sendgrid:sendgrid-java:4.8.0' + implementation 'com.sendgrid:sendgrid-java:4.8.1' } repositories { @@ -86,7 +86,7 @@ mvn install You can just drop the jar file in. It's a fat jar - it has all the dependencies built in. -[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.8.0/sendgrid-java.jar) +[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.8.1/sendgrid-java.jar) ## Dependencies diff --git a/pom.xml b/pom.xml index a4189221..875499e4 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ com.sendgrid sendgrid-java Twilio SendGrid Java helper library - 4.8.0 + 4.8.1 This Java module allows you to quickly and easily send emails through Twilio SendGrid using Java. https://github.com/sendgrid/sendgrid-java @@ -26,7 +26,7 @@ https://github.com/sendgrid/sendgrid-java scm:git:git@github.com:sendgrid/sendgrid-java.git scm:git:git@github.com:sendgrid/sendgrid-java.git - 4.8.0 + 4.8.1 @@ -262,7 +262,7 @@ com.sendgrid java-http-client - 4.3.7 + 4.3.8 com.fasterxml.jackson.core @@ -294,7 +294,7 @@ org.bouncycastle bcprov-jdk15on - 1.69 + 1.70 @@ -306,4 +306,4 @@ - + \ No newline at end of file diff --git a/src/main/java/com/sendgrid/BaseInterface.java b/src/main/java/com/sendgrid/BaseInterface.java index 0165c442..e1014b33 100644 --- a/src/main/java/com/sendgrid/BaseInterface.java +++ b/src/main/java/com/sendgrid/BaseInterface.java @@ -11,7 +11,7 @@ */ public abstract class BaseInterface implements SendGridAPI { - private static final String VERSION = "4.8.0"; + private static final String VERSION = "4.8.1"; private static final String USER_AGENT = "sendgrid/" + VERSION + ";java"; private static final int RATE_LIMIT_RESPONSE_CODE = 429; diff --git a/src/test/java/com/sendgrid/SendGridTest.java b/src/test/java/com/sendgrid/SendGridTest.java index 089c4a11..395e360d 100644 --- a/src/test/java/com/sendgrid/SendGridTest.java +++ b/src/test/java/com/sendgrid/SendGridTest.java @@ -43,7 +43,7 @@ public void testConstructWithClient() throws IOException { @Test public void testLibraryVersion() { SendGrid sg = new SendGrid(SENDGRID_API_KEY); - Assert.assertEquals(sg.getLibraryVersion(), "4.8.0"); + Assert.assertEquals(sg.getLibraryVersion(), "4.8.1"); } @Test From c49aa563676bbc4c85eb17791b3fe2214eaf6d76 Mon Sep 17 00:00:00 2001 From: Shwetha Radhakrishna Date: Thu, 16 Dec 2021 14:12:06 -0600 Subject: [PATCH 299/345] chore: update slack notification color --- .github/workflows/release.yml | 2 +- .github/workflows/test.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index d4317b90..eac26805 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -39,7 +39,7 @@ jobs: steps: - uses: rtCamp/action-slack-notify@v2 env: - SLACK_COLOR: 'danger' + SLACK_COLOR: failure SLACK_ICON_EMOJI: ':github:' SLACK_MESSAGE: ${{ format('Failed to release {1}{3} {0}/{1}/actions/runs/{2}', github.server_url, github.repository, github.run_id, ':') }} SLACK_TITLE: Release Failure diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index d981dca6..ba2528f3 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -31,7 +31,7 @@ jobs: steps: - uses: rtCamp/action-slack-notify@v2 env: - SLACK_COLOR: ${{ needs.test.status }} + SLACK_COLOR: failure SLACK_ICON_EMOJI: ':github:' SLACK_MESSAGE: ${{ format('Build {2} in {1} failed{3} {0}/{1}/actions/runs/{2}', github.server_url, github.repository, github.run_id, ':') }} SLACK_TITLE: Build Failure From f461b4d40333cd89038ed4a292037fea5638181b Mon Sep 17 00:00:00 2001 From: Jennifer Mah <42650198+JenniferMah@users.noreply.github.com> Date: Tue, 4 Jan 2022 15:06:31 -0700 Subject: [PATCH 300/345] chore: update license year (#712) --- LICENSE | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/LICENSE b/LICENSE index e5439a92..5db04ff6 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (C) 2021, Twilio SendGrid, Inc. +Copyright (C) 2022, Twilio SendGrid, Inc. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in From 471509748cc81af48dbb2ca49a07276769a95f7e Mon Sep 17 00:00:00 2001 From: Bilal Boussayoud Date: Fri, 7 Jan 2022 10:59:23 -0700 Subject: [PATCH 301/345] fix: fix sendgrid-java unit tests (#713) * switch to non-SAN cert for unit tests --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 0c93f25f..5bd698c8 100644 --- a/Makefile +++ b/Makefile @@ -17,7 +17,7 @@ test-integ: test version ?= latest test-docker: - curl -s https://raw.githubusercontent.com/sendgrid/sendgrid-oai/HEAD/prism/prism.sh -o prism.sh + curl -s https://raw.githubusercontent.com/sendgrid/sendgrid-oai/HEAD/prism/prism-java.sh -o prism.sh version=$(version) bash ./prism.sh clean: From 7ec917cfd88e7834cf30b45f12838fe74dae9a0a Mon Sep 17 00:00:00 2001 From: Twilio Date: Wed, 12 Jan 2022 20:25:58 +0000 Subject: [PATCH 302/345] [Librarian] Version Bump --- CHANGELOG.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 41ca85ef..3f06eeb7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,15 @@ # Change Log All notable changes to this project will be documented in this file. +[2022-01-12] Version 4.8.2 +-------------------------- +**Library - Fix** +- [PR #713](https://github.com/sendgrid/sendgrid-java/pull/713): fix sendgrid-java unit tests. Thanks to [@beebzz](https://github.com/beebzz)! + +**Library - Chore** +- [PR #712](https://github.com/sendgrid/sendgrid-java/pull/712): update license year. Thanks to [@JenniferMah](https://github.com/JenniferMah)! + + [2021-12-01] Version 4.8.1 -------------------------- **Library - Chore** From b91aae4859893636fd4a06593490086c00ae87b9 Mon Sep 17 00:00:00 2001 From: Twilio Date: Wed, 12 Jan 2022 20:30:05 +0000 Subject: [PATCH 303/345] Release 4.8.2 --- CONTRIBUTING.md | 2 +- README.md | 4 ++-- pom.xml | 6 +++--- src/main/java/com/sendgrid/BaseInterface.java | 2 +- src/test/java/com/sendgrid/SendGridTest.java | 2 +- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 0f00dcd1..c229cbe3 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -98,7 +98,7 @@ touch Example.java Add the example you want to test to Example.java, including the headers at the top of the file. ``` bash -javac -classpath ../repo/com/sendgrid/4.8.1/sendgrid-4.8.1-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.8.1/sendgrid-4.8.1-jar.jar:. Example +javac -classpath ../repo/com/sendgrid/4.8.2/sendgrid-4.8.2-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.8.2/sendgrid-4.8.2-jar.jar:. Example ``` diff --git a/README.md b/README.md index 500bcf5b..47542863 100644 --- a/README.md +++ b/README.md @@ -67,7 +67,7 @@ Add the following to your build.gradle file in the root of your project. ... dependencies { ... - implementation 'com.sendgrid:sendgrid-java:4.8.1' + implementation 'com.sendgrid:sendgrid-java:4.8.2' } repositories { @@ -86,7 +86,7 @@ mvn install You can just drop the jar file in. It's a fat jar - it has all the dependencies built in. -[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.8.1/sendgrid-java.jar) +[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.8.2/sendgrid-java.jar) ## Dependencies diff --git a/pom.xml b/pom.xml index 875499e4..fce0c0e8 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ com.sendgrid sendgrid-java Twilio SendGrid Java helper library - 4.8.1 + 4.8.2 This Java module allows you to quickly and easily send emails through Twilio SendGrid using Java. https://github.com/sendgrid/sendgrid-java @@ -26,7 +26,7 @@ https://github.com/sendgrid/sendgrid-java scm:git:git@github.com:sendgrid/sendgrid-java.git scm:git:git@github.com:sendgrid/sendgrid-java.git - 4.8.1 + 4.8.2 @@ -262,7 +262,7 @@ com.sendgrid java-http-client - 4.3.8 + 4.3.9 com.fasterxml.jackson.core diff --git a/src/main/java/com/sendgrid/BaseInterface.java b/src/main/java/com/sendgrid/BaseInterface.java index e1014b33..40ebdf75 100644 --- a/src/main/java/com/sendgrid/BaseInterface.java +++ b/src/main/java/com/sendgrid/BaseInterface.java @@ -11,7 +11,7 @@ */ public abstract class BaseInterface implements SendGridAPI { - private static final String VERSION = "4.8.1"; + private static final String VERSION = "4.8.2"; private static final String USER_AGENT = "sendgrid/" + VERSION + ";java"; private static final int RATE_LIMIT_RESPONSE_CODE = 429; diff --git a/src/test/java/com/sendgrid/SendGridTest.java b/src/test/java/com/sendgrid/SendGridTest.java index 395e360d..d5053449 100644 --- a/src/test/java/com/sendgrid/SendGridTest.java +++ b/src/test/java/com/sendgrid/SendGridTest.java @@ -43,7 +43,7 @@ public void testConstructWithClient() throws IOException { @Test public void testLibraryVersion() { SendGrid sg = new SendGrid(SENDGRID_API_KEY); - Assert.assertEquals(sg.getLibraryVersion(), "4.8.1"); + Assert.assertEquals(sg.getLibraryVersion(), "4.8.2"); } @Test From 3633b3886ffa4a795639547d5304a9e43debdad4 Mon Sep 17 00:00:00 2001 From: Hunga1 Date: Thu, 3 Feb 2022 13:27:27 -0700 Subject: [PATCH 304/345] chore: merge test and deploy workflows (#715) --- .../{release.yml => test-and-deploy.yml} | 40 ++++++++++++++---- .github/workflows/test.yml | 42 ------------------- README.md | 2 +- 3 files changed, 32 insertions(+), 52 deletions(-) rename .github/workflows/{release.yml => test-and-deploy.yml} (55%) delete mode 100644 .github/workflows/test.yml diff --git a/.github/workflows/release.yml b/.github/workflows/test-and-deploy.yml similarity index 55% rename from .github/workflows/release.yml rename to .github/workflows/test-and-deploy.yml index eac26805..8ac8e2c3 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/test-and-deploy.yml @@ -1,15 +1,37 @@ -name: Release +name: Test and Deploy on: push: - tags: - - '*' + branches: [ '*' ] + tags: [ '*' ] + pull_request: + branches: [ main ] + schedule: + # Run automatically at 8AM PST Monday-Friday + - cron: '0 15 * * 1-5' workflow_dispatch: jobs: - release: - name: Release + test: + name: Test runs-on: ubuntu-latest + timeout-minutes: 20 + strategy: + matrix: + java: [8, 11] steps: + - name: Checkout sendgrid-java + - uses: actions/checkout@v2 + + - name: Run Unit Tests + run: make test-docker version=${{ matrix.java }} + + deploy: + name: Deploy + if: success() && github.ref_type == 'tag' + needs: [ test ] + runs-on: ubuntu-latest + steps: + - name: Checkout sendgrid-java - uses: actions/checkout@v2 - name: Set up Sonatype Maven @@ -33,16 +55,16 @@ jobs: notify-on-failure: name: Slack notify on failure - if: ${{ failure() }} - needs: [release] + if: failure() && github.event_name != 'pull_request' && (github.ref == 'refs/heads/main' || github.ref_type == 'tag') + needs: [ test, deploy ] runs-on: ubuntu-latest steps: - uses: rtCamp/action-slack-notify@v2 env: SLACK_COLOR: failure SLACK_ICON_EMOJI: ':github:' - SLACK_MESSAGE: ${{ format('Failed to release {1}{3} {0}/{1}/actions/runs/{2}', github.server_url, github.repository, github.run_id, ':') }} - SLACK_TITLE: Release Failure + SLACK_MESSAGE: ${{ format('Test *{0}*, Deploy *{1}*, {2}/{3}/actions/runs/{4}', needs.test.result, needs.deploy.result, github.server_url, github.repository, github.run_id) }} + SLACK_TITLE: Action Failure - ${{ github.repository }} SLACK_USERNAME: GitHub Actions SLACK_MSG_AUTHOR: twilio-dx SLACK_FOOTER: Posted automatically using GitHub Actions diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml deleted file mode 100644 index ba2528f3..00000000 --- a/.github/workflows/test.yml +++ /dev/null @@ -1,42 +0,0 @@ -name: Tests -on: - push: - branches: [ '*' ] - pull_request: - branches: [ main ] - schedule: - # Run automatically at 8AM PST Monday-Friday - - cron: '0 15 * * 1-5' - workflow_dispatch: - -jobs: - test: - name: Test - runs-on: ubuntu-latest - timeout-minutes: 20 - strategy: - matrix: - java: [8, 11] - steps: - - uses: actions/checkout@v2 - - - name: Run Unit Tests - run: make test-docker version=${{ matrix.java }} - - notify-on-failure: - name: Slack notify on failure - if: ${{ failure() && github.ref == 'refs/heads/main' && github.event_name != 'pull_request' }} - needs: [test] - runs-on: ubuntu-latest - steps: - - uses: rtCamp/action-slack-notify@v2 - env: - SLACK_COLOR: failure - SLACK_ICON_EMOJI: ':github:' - SLACK_MESSAGE: ${{ format('Build {2} in {1} failed{3} {0}/{1}/actions/runs/{2}', github.server_url, github.repository, github.run_id, ':') }} - SLACK_TITLE: Build Failure - SLACK_USERNAME: GitHub Actions - SLACK_MSG_AUTHOR: twilio-dx - SLACK_FOOTER: Posted automatically using GitHub Actions - SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }} - MSG_MINIMAL: true diff --git a/README.md b/README.md index 47542863..f7d63183 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ ![SendGrid Logo](twilio_sendgrid_logo.png) -[![BuildStatus](https://github.com/sendgrid/sendgrid-java/actions/workflows/test.yml/badge.svg)](https://github.com/sendgrid/sendgrid-java/actions/workflows/test.yml) +[![BuildStatus](https://github.com/sendgrid/sendgrid-java/actions/workflows/test-and-deploy.yml/badge.svg)](https://github.com/sendgrid/sendgrid-java/actions/workflows/test-and-deploy.yml) [![Maven Central](https://img.shields.io/maven-central/v/com.sendgrid/sendgrid-java.svg)](http://mvnrepository.com/artifact/com.sendgrid/sendgrid-java) [![Twitter Follow](https://img.shields.io/twitter/follow/sendgrid.svg?style=social&label=Follow)](https://twitter.com/sendgrid) [![GitHub contributors](https://img.shields.io/github/contributors/sendgrid/sendgrid-java.svg)](https://github.com/sendgrid/sendgrid-java/graphs/contributors) From 99028bae4fed2c4c1cc0915f8119327e86c5b41f Mon Sep 17 00:00:00 2001 From: childish-sambino Date: Thu, 3 Feb 2022 14:29:07 -0600 Subject: [PATCH 305/345] fix: correct workflow --- .github/workflows/test-and-deploy.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test-and-deploy.yml b/.github/workflows/test-and-deploy.yml index 8ac8e2c3..6bac4240 100644 --- a/.github/workflows/test-and-deploy.yml +++ b/.github/workflows/test-and-deploy.yml @@ -20,7 +20,7 @@ jobs: java: [8, 11] steps: - name: Checkout sendgrid-java - - uses: actions/checkout@v2 + uses: actions/checkout@v2 - name: Run Unit Tests run: make test-docker version=${{ matrix.java }} @@ -32,7 +32,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout sendgrid-java - - uses: actions/checkout@v2 + uses: actions/checkout@v2 - name: Set up Sonatype Maven uses: actions/setup-java@v2 From 9ca89c8b0ded8471764c744cd09306764b8107d7 Mon Sep 17 00:00:00 2001 From: Shwetha Radhakrishna Date: Thu, 3 Feb 2022 16:57:31 -0600 Subject: [PATCH 306/345] chore: add gh release to workflow (#716) * chore: add gh release to workflow --- .github/workflows/test-and-deploy.yml | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/.github/workflows/test-and-deploy.yml b/.github/workflows/test-and-deploy.yml index 6bac4240..f7bf0466 100644 --- a/.github/workflows/test-and-deploy.yml +++ b/.github/workflows/test-and-deploy.yml @@ -45,7 +45,17 @@ jobs: gpg-private-key: ${{ secrets.GPG_PRIVATE_KEY }} gpg-passphrase: GPG_PASSPHRASE - - run: mvn install -DskipTests=true -Dgpg.skip -Dmaven.javadoc.skip=true -B -V + - name: Install dependencies and Build Release Artifacts + run: make install + + - name: Create GitHub Release + uses: sendgrid/dx-automator/actions/release@main + with: + assets: sendgrid-java.jar + footer: '**[Maven](https://mvnrepository.com/artifact/com.sendgrid/sendgrid-java/${version})**' + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + - name: Publish to Maven env: MAVEN_USERNAME: ${{ secrets.SONATYPE_USERNAME }} From 844318b3e53629b086016cadd184b6a06a894d50 Mon Sep 17 00:00:00 2001 From: Sam Harrison Date: Mon, 7 Feb 2022 12:50:41 -0600 Subject: [PATCH 307/345] fix: only do a Docker Login if the secrets are available --- .github/workflows/test-and-deploy.yml | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/.github/workflows/test-and-deploy.yml b/.github/workflows/test-and-deploy.yml index f7bf0466..b339136c 100644 --- a/.github/workflows/test-and-deploy.yml +++ b/.github/workflows/test-and-deploy.yml @@ -17,11 +17,20 @@ jobs: timeout-minutes: 20 strategy: matrix: - java: [8, 11] + java: [ 8, 11 ] + env: + DOCKER_LOGIN: ${{ secrets.DOCKER_USERNAME && secrets.DOCKER_AUTH_TOKEN }} steps: - name: Checkout sendgrid-java uses: actions/checkout@v2 + - name: Login to Docker Hub + if: env.DOCKER_LOGIN + uses: docker/login-action@v1 + with: + username: ${{ secrets.DOCKER_USERNAME }} + password: ${{ secrets.DOCKER_AUTH_TOKEN }} + - name: Run Unit Tests run: make test-docker version=${{ matrix.java }} From bafc24ca17f4c2533c667e76e3b56776375e3096 Mon Sep 17 00:00:00 2001 From: Twilio Date: Wed, 9 Feb 2022 23:50:25 +0000 Subject: [PATCH 308/345] [Librarian] Version Bump --- CHANGELOG.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3f06eeb7..77196788 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,13 @@ # Change Log All notable changes to this project will be documented in this file. +[2022-02-09] Version 4.8.3 +-------------------------- +**Library - Chore** +- [PR #716](https://github.com/sendgrid/sendgrid-java/pull/716): add gh release to workflow. Thanks to [@shwetha-manvinkurke](https://github.com/shwetha-manvinkurke)! +- [PR #715](https://github.com/sendgrid/sendgrid-java/pull/715): merge test and deploy workflows. Thanks to [@Hunga1](https://github.com/Hunga1)! + + [2022-01-12] Version 4.8.2 -------------------------- **Library - Fix** From 780ca3dbd5372ee9b0e01d0b6bf787dc4e2dcff9 Mon Sep 17 00:00:00 2001 From: Twilio Date: Wed, 9 Feb 2022 23:51:05 +0000 Subject: [PATCH 309/345] Release 4.8.3 --- CONTRIBUTING.md | 2 +- README.md | 4 ++-- pom.xml | 4 ++-- src/main/java/com/sendgrid/BaseInterface.java | 2 +- src/test/java/com/sendgrid/SendGridTest.java | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index c229cbe3..aa3bdabe 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -98,7 +98,7 @@ touch Example.java Add the example you want to test to Example.java, including the headers at the top of the file. ``` bash -javac -classpath ../repo/com/sendgrid/4.8.2/sendgrid-4.8.2-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.8.2/sendgrid-4.8.2-jar.jar:. Example +javac -classpath ../repo/com/sendgrid/4.8.3/sendgrid-4.8.3-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.8.3/sendgrid-4.8.3-jar.jar:. Example ``` diff --git a/README.md b/README.md index f7d63183..28a7e5e9 100644 --- a/README.md +++ b/README.md @@ -67,7 +67,7 @@ Add the following to your build.gradle file in the root of your project. ... dependencies { ... - implementation 'com.sendgrid:sendgrid-java:4.8.2' + implementation 'com.sendgrid:sendgrid-java:4.8.3' } repositories { @@ -86,7 +86,7 @@ mvn install You can just drop the jar file in. It's a fat jar - it has all the dependencies built in. -[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.8.2/sendgrid-java.jar) +[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.8.3/sendgrid-java.jar) ## Dependencies diff --git a/pom.xml b/pom.xml index fce0c0e8..63af227d 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ com.sendgrid sendgrid-java Twilio SendGrid Java helper library - 4.8.2 + 4.8.3 This Java module allows you to quickly and easily send emails through Twilio SendGrid using Java. https://github.com/sendgrid/sendgrid-java @@ -26,7 +26,7 @@ https://github.com/sendgrid/sendgrid-java scm:git:git@github.com:sendgrid/sendgrid-java.git scm:git:git@github.com:sendgrid/sendgrid-java.git - 4.8.2 + 4.8.3 diff --git a/src/main/java/com/sendgrid/BaseInterface.java b/src/main/java/com/sendgrid/BaseInterface.java index 40ebdf75..312225d3 100644 --- a/src/main/java/com/sendgrid/BaseInterface.java +++ b/src/main/java/com/sendgrid/BaseInterface.java @@ -11,7 +11,7 @@ */ public abstract class BaseInterface implements SendGridAPI { - private static final String VERSION = "4.8.2"; + private static final String VERSION = "4.8.3"; private static final String USER_AGENT = "sendgrid/" + VERSION + ";java"; private static final int RATE_LIMIT_RESPONSE_CODE = 429; diff --git a/src/test/java/com/sendgrid/SendGridTest.java b/src/test/java/com/sendgrid/SendGridTest.java index d5053449..a3ddfa0d 100644 --- a/src/test/java/com/sendgrid/SendGridTest.java +++ b/src/test/java/com/sendgrid/SendGridTest.java @@ -43,7 +43,7 @@ public void testConstructWithClient() throws IOException { @Test public void testLibraryVersion() { SendGrid sg = new SendGrid(SENDGRID_API_KEY); - Assert.assertEquals(sg.getLibraryVersion(), "4.8.2"); + Assert.assertEquals(sg.getLibraryVersion(), "4.8.3"); } @Test From 1ca4a0855f9b65d5ff8090fa1b9aef8d0e671667 Mon Sep 17 00:00:00 2001 From: Jennifer Mah <42650198+JenniferMah@users.noreply.github.com> Date: Thu, 24 Feb 2022 14:20:19 -0800 Subject: [PATCH 310/345] feat: add GH action to update dependencies (#717) --- .github/workflows/update-dependencies.yml | 52 +++++++++++++++++++++++ Makefile | 5 ++- 2 files changed, 56 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/update-dependencies.yml diff --git a/.github/workflows/update-dependencies.yml b/.github/workflows/update-dependencies.yml new file mode 100644 index 00000000..d2e4152c --- /dev/null +++ b/.github/workflows/update-dependencies.yml @@ -0,0 +1,52 @@ +name: Update dependencies +on: + schedule: + # Run automatically at 7AM PST Tuesday + - cron: '0 14 * * 2' + workflow_dispatch: + +jobs: + update-dependencies-and-test: + name: Update Dependencies & Test + runs-on: ubuntu-latest + timeout-minutes: 20 + strategy: + max-parallel: 1 + matrix: + java: [ 8, 11 ] + + steps: + - name: Checkout sendgrid-java + uses: actions/checkout@v2 + + - name: Updating semver dependencies + run: make update-deps + + - name: Run Unit Tests + run: make test-docker version=${{ matrix.java }} + + - name: Add & Commit + if: matrix.java == '11' + uses: EndBug/add-and-commit@v8.0.2 + with: + add: 'pom.xml' + default_author: 'github_actions' + message: 'chore: update sendgrid-java dependencies' + + notify-on-failure: + name: Slack notify on failure + if: failure() + needs: [ update-dependencies-and-test ] + runs-on: ubuntu-latest + steps: + - uses: rtCamp/action-slack-notify@v2 + env: + SLACK_COLOR: failure + SLACK_ICON_EMOJI: ':github:' + SLACK_MESSAGE: ${{ format('Update dependencies *{0}*, {1}/{2}/actions/runs/{3}', needs.update-dependencies-and-test.result, github.server_url, github.repository, github.run_id) }} + SLACK_TITLE: Action Failure - ${{ github.repository }} + SLACK_USERNAME: GitHub Actions + SLACK_MSG_AUTHOR: twilio-dx + SLACK_FOOTER: Posted automatically using GitHub Actions + SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }} + MSG_MINIMAL: true diff --git a/Makefile b/Makefile index 5bd698c8..3983b6aa 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -.PHONY: install package test test-integ test-docker clean +.PHONY: install package test test-integ test-docker update-deps clean VERSION := $(shell mvn help:evaluate -Dexpression=project.version --batch-mode | grep -e '^[^\[]') install: @@ -20,5 +20,8 @@ test-docker: curl -s https://raw.githubusercontent.com/sendgrid/sendgrid-oai/HEAD/prism/prism-java.sh -o prism.sh version=$(version) bash ./prism.sh +update-deps: + mvn versions:use-latest-releases versions:commit -DallowMajorUpdates=false + clean: mvn clean From 9a0631828b754d9ecb6155a90baabdd284468918 Mon Sep 17 00:00:00 2001 From: Elise Shanholtz Date: Mon, 28 Feb 2022 12:40:14 -0800 Subject: [PATCH 311/345] chore: push Datadog Release Metric upon deploy success (#721) --- .github/workflows/test-and-deploy.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/workflows/test-and-deploy.yml b/.github/workflows/test-and-deploy.yml index b339136c..b8d847f2 100644 --- a/.github/workflows/test-and-deploy.yml +++ b/.github/workflows/test-and-deploy.yml @@ -72,6 +72,11 @@ jobs: GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }} run: mvn clean deploy -DskipTests=true -B -U -Prelease + - name: Submit metric to Datadog + uses: sendgrid/dx-automator/actions/datadog-release-metric@main + env: + DD_API_KEY: ${{ secrets.DATADOG_API_KEY }} + notify-on-failure: name: Slack notify on failure if: failure() && github.event_name != 'pull_request' && (github.ref == 'refs/heads/main' || github.ref_type == 'tag') From 2e0344acd4348bce5783cc5edad36e8e77eecb6d Mon Sep 17 00:00:00 2001 From: Twilio Date: Wed, 9 Mar 2022 12:21:55 -0800 Subject: [PATCH 312/345] [Librarian] Version Bump --- CHANGELOG.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 77196788..56c2628a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,15 @@ # Change Log All notable changes to this project will be documented in this file. +[2022-03-09] Version 4.9.0 +-------------------------- +**Library - Chore** +- [PR #721](https://github.com/sendgrid/sendgrid-java/pull/721): push Datadog Release Metric upon deploy success. Thanks to [@eshanholtz](https://github.com/eshanholtz)! + +**Library - Feature** +- [PR #717](https://github.com/sendgrid/sendgrid-java/pull/717): add GH action to update dependencies. Thanks to [@JenniferMah](https://github.com/JenniferMah)! + + [2022-02-09] Version 4.8.3 -------------------------- **Library - Chore** From f158675d27e4150311ef370ae30e3a446b67871d Mon Sep 17 00:00:00 2001 From: Twilio Date: Wed, 9 Mar 2022 12:21:55 -0800 Subject: [PATCH 313/345] Release 4.9.0 --- CONTRIBUTING.md | 2 +- README.md | 4 ++-- pom.xml | 4 ++-- src/main/java/com/sendgrid/BaseInterface.java | 2 +- src/test/java/com/sendgrid/SendGridTest.java | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index aa3bdabe..de6286e2 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -98,7 +98,7 @@ touch Example.java Add the example you want to test to Example.java, including the headers at the top of the file. ``` bash -javac -classpath ../repo/com/sendgrid/4.8.3/sendgrid-4.8.3-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.8.3/sendgrid-4.8.3-jar.jar:. Example +javac -classpath ../repo/com/sendgrid/4.9.0/sendgrid-4.9.0-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.9.0/sendgrid-4.9.0-jar.jar:. Example ``` diff --git a/README.md b/README.md index 28a7e5e9..5d9f56e1 100644 --- a/README.md +++ b/README.md @@ -67,7 +67,7 @@ Add the following to your build.gradle file in the root of your project. ... dependencies { ... - implementation 'com.sendgrid:sendgrid-java:4.8.3' + implementation 'com.sendgrid:sendgrid-java:4.9.0' } repositories { @@ -86,7 +86,7 @@ mvn install You can just drop the jar file in. It's a fat jar - it has all the dependencies built in. -[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.8.3/sendgrid-java.jar) +[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.9.0/sendgrid-java.jar) ## Dependencies diff --git a/pom.xml b/pom.xml index 63af227d..e3d792f2 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ com.sendgrid sendgrid-java Twilio SendGrid Java helper library - 4.8.3 + 4.9.0 This Java module allows you to quickly and easily send emails through Twilio SendGrid using Java. https://github.com/sendgrid/sendgrid-java @@ -26,7 +26,7 @@ https://github.com/sendgrid/sendgrid-java scm:git:git@github.com:sendgrid/sendgrid-java.git scm:git:git@github.com:sendgrid/sendgrid-java.git - 4.8.3 + 4.9.0 diff --git a/src/main/java/com/sendgrid/BaseInterface.java b/src/main/java/com/sendgrid/BaseInterface.java index 312225d3..07db9f28 100644 --- a/src/main/java/com/sendgrid/BaseInterface.java +++ b/src/main/java/com/sendgrid/BaseInterface.java @@ -11,7 +11,7 @@ */ public abstract class BaseInterface implements SendGridAPI { - private static final String VERSION = "4.8.3"; + private static final String VERSION = "4.9.0"; private static final String USER_AGENT = "sendgrid/" + VERSION + ";java"; private static final int RATE_LIMIT_RESPONSE_CODE = 429; diff --git a/src/test/java/com/sendgrid/SendGridTest.java b/src/test/java/com/sendgrid/SendGridTest.java index a3ddfa0d..d55ece2b 100644 --- a/src/test/java/com/sendgrid/SendGridTest.java +++ b/src/test/java/com/sendgrid/SendGridTest.java @@ -43,7 +43,7 @@ public void testConstructWithClient() throws IOException { @Test public void testLibraryVersion() { SendGrid sg = new SendGrid(SENDGRID_API_KEY); - Assert.assertEquals(sg.getLibraryVersion(), "4.8.3"); + Assert.assertEquals(sg.getLibraryVersion(), "4.9.0"); } @Test From d86854c296659df53bc809ae04f228a7fa65ef27 Mon Sep 17 00:00:00 2001 From: svcprodsec-sendgrid <70608793+svcprodsec-sendgrid@users.noreply.github.com> Date: Mon, 14 Mar 2022 12:41:06 -0400 Subject: [PATCH 314/345] chore: Security upgrade com.fasterxml.jackson.core:jackson-databind from 2.12.1 to 2.13.0 (#723) --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index e3d792f2..511082f4 100644 --- a/pom.xml +++ b/pom.xml @@ -20,7 +20,7 @@ - 2.12.1 + 2.13.0 https://github.com/sendgrid/sendgrid-java From 599814a9a58da2b7834c6b27a1de9ddc263e7643 Mon Sep 17 00:00:00 2001 From: Twilio Date: Wed, 23 Mar 2022 11:35:53 -0700 Subject: [PATCH 315/345] [Librarian] Version Bump --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 56c2628a..58a316c6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,12 @@ # Change Log All notable changes to this project will be documented in this file. +[2022-03-23] Version 4.9.1 +-------------------------- +**Library - Chore** +- [PR #723](https://github.com/sendgrid/sendgrid-java/pull/723): Security upgrade com.fasterxml.jackson.core:jackson-databind from 2.12.1 to 2.13.0. Thanks to [@svcprodsec-sendgrid](https://github.com/svcprodsec-sendgrid)! + + [2022-03-09] Version 4.9.0 -------------------------- **Library - Chore** From 5015d5343b593080dfb916e29537b6c00982a283 Mon Sep 17 00:00:00 2001 From: Twilio Date: Wed, 23 Mar 2022 11:35:53 -0700 Subject: [PATCH 316/345] Release 4.9.1 --- CONTRIBUTING.md | 2 +- README.md | 4 ++-- pom.xml | 4 ++-- src/main/java/com/sendgrid/BaseInterface.java | 2 +- src/test/java/com/sendgrid/SendGridTest.java | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index de6286e2..73f9578f 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -98,7 +98,7 @@ touch Example.java Add the example you want to test to Example.java, including the headers at the top of the file. ``` bash -javac -classpath ../repo/com/sendgrid/4.9.0/sendgrid-4.9.0-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.9.0/sendgrid-4.9.0-jar.jar:. Example +javac -classpath ../repo/com/sendgrid/4.9.1/sendgrid-4.9.1-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.9.1/sendgrid-4.9.1-jar.jar:. Example ``` diff --git a/README.md b/README.md index 5d9f56e1..090fa97d 100644 --- a/README.md +++ b/README.md @@ -67,7 +67,7 @@ Add the following to your build.gradle file in the root of your project. ... dependencies { ... - implementation 'com.sendgrid:sendgrid-java:4.9.0' + implementation 'com.sendgrid:sendgrid-java:4.9.1' } repositories { @@ -86,7 +86,7 @@ mvn install You can just drop the jar file in. It's a fat jar - it has all the dependencies built in. -[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.9.0/sendgrid-java.jar) +[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.9.1/sendgrid-java.jar) ## Dependencies diff --git a/pom.xml b/pom.xml index 511082f4..ed93d8c9 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ com.sendgrid sendgrid-java Twilio SendGrid Java helper library - 4.9.0 + 4.9.1 This Java module allows you to quickly and easily send emails through Twilio SendGrid using Java. https://github.com/sendgrid/sendgrid-java @@ -26,7 +26,7 @@ https://github.com/sendgrid/sendgrid-java scm:git:git@github.com:sendgrid/sendgrid-java.git scm:git:git@github.com:sendgrid/sendgrid-java.git - 4.9.0 + 4.9.1 diff --git a/src/main/java/com/sendgrid/BaseInterface.java b/src/main/java/com/sendgrid/BaseInterface.java index 07db9f28..74c50fec 100644 --- a/src/main/java/com/sendgrid/BaseInterface.java +++ b/src/main/java/com/sendgrid/BaseInterface.java @@ -11,7 +11,7 @@ */ public abstract class BaseInterface implements SendGridAPI { - private static final String VERSION = "4.9.0"; + private static final String VERSION = "4.9.1"; private static final String USER_AGENT = "sendgrid/" + VERSION + ";java"; private static final int RATE_LIMIT_RESPONSE_CODE = 429; diff --git a/src/test/java/com/sendgrid/SendGridTest.java b/src/test/java/com/sendgrid/SendGridTest.java index d55ece2b..73d1614d 100644 --- a/src/test/java/com/sendgrid/SendGridTest.java +++ b/src/test/java/com/sendgrid/SendGridTest.java @@ -43,7 +43,7 @@ public void testConstructWithClient() throws IOException { @Test public void testLibraryVersion() { SendGrid sg = new SendGrid(SENDGRID_API_KEY); - Assert.assertEquals(sg.getLibraryVersion(), "4.9.0"); + Assert.assertEquals(sg.getLibraryVersion(), "4.9.1"); } @Test From 29b64073c6d94504b63d085bde496e2510663b5a Mon Sep 17 00:00:00 2001 From: Sam Harrison Date: Thu, 24 Mar 2022 10:48:12 -0500 Subject: [PATCH 317/345] chore: remove outdated announcements --- README.md | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/README.md b/README.md index 090fa97d..f9e0ea41 100644 --- a/README.md +++ b/README.md @@ -7,10 +7,6 @@ [![Open Source Helpers](https://www.codetriage.com/sendgrid/sendgrid-java/badges/users.svg)](https://www.codetriage.com/sendgrid/sendgrid-java) [![MIT licensed](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE) -**NEW:** Subscribe to email [notifications](https://dx.sendgrid.com/newsletter/java) for releases and breaking changes. - -**The default branch name for this repository has been changed to `main` as of 07/27/2020.** - **This library allows you to quickly and easily use the Twilio SendGrid Web API v3 via Java.** Version 3.X.X of this library provides full support for all Twilio SendGrid [Web API v3](https://sendgrid.com/docs/API_Reference/Web_API_v3/index.html) endpoints, including the new [v3 /mail/send](https://sendgrid.com/blog/introducing-v3mailsend-sendgrids-new-mail-endpoint). @@ -201,9 +197,7 @@ public class Example { # Announcements -Please see our announcement regarding [breaking changes](https://github.com/sendgrid/sendgrid-java/issues/140). Your support is appreciated! - -All updates to this library are documented in our [CHANGELOG](CHANGELOG.md) and [releases](https://github.com/sendgrid/sendgrid-java/releases). You may also subscribe to email [release notifications](https://dx.sendgrid.com/newsletter/java) for releases and breaking changes. +All updates to this library are documented in our [CHANGELOG](CHANGELOG.md) and [releases](https://github.com/sendgrid/sendgrid-java/releases). # How to Contribute From c868b731e63cdf3b34f4fbaa77a71a5cd7f7f705 Mon Sep 17 00:00:00 2001 From: Sam Harrison Date: Fri, 25 Mar 2022 13:39:51 -0500 Subject: [PATCH 318/345] feat: add PR title validation --- .github/workflows/pr-lint.yml | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 .github/workflows/pr-lint.yml diff --git a/.github/workflows/pr-lint.yml b/.github/workflows/pr-lint.yml new file mode 100644 index 00000000..8388f21e --- /dev/null +++ b/.github/workflows/pr-lint.yml @@ -0,0 +1,15 @@ +name: Lint PR +on: + pull_request_target: + types: [ opened, edited, reopened ] + +jobs: + validate: + name: Validate title + runs-on: ubuntu-latest + steps: + - uses: amannn/action-semantic-pull-request@v4 + with: + types: chore docs fix feat test + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} From ec53072c17fc6c8a2c6664c46025f8c741bbdb41 Mon Sep 17 00:00:00 2001 From: Bilal Boussayoud Date: Fri, 25 Mar 2022 15:27:37 -0600 Subject: [PATCH 319/345] fix: override default gh token (#725) * fix: override default gh token --- .github/workflows/update-dependencies.yml | 2 ++ pom.xml | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/update-dependencies.yml b/.github/workflows/update-dependencies.yml index d2e4152c..eea77a93 100644 --- a/.github/workflows/update-dependencies.yml +++ b/.github/workflows/update-dependencies.yml @@ -28,6 +28,8 @@ jobs: - name: Add & Commit if: matrix.java == '11' uses: EndBug/add-and-commit@v8.0.2 + env: + GITHUB_TOKEN: ${{ secrets.SG_JAVA_GITHUB_TOKEN }} with: add: 'pom.xml' default_author: 'github_actions' diff --git a/pom.xml b/pom.xml index ed93d8c9..3b221e3f 100644 --- a/pom.xml +++ b/pom.xml @@ -262,7 +262,7 @@ com.sendgrid java-http-client - 4.3.9 + 4.5.0 com.fasterxml.jackson.core From f370ca940014d4cc8ef731aaeed98f6e25c9be1b Mon Sep 17 00:00:00 2001 From: tomoyaY Date: Mon, 28 Mar 2022 23:13:44 +0900 Subject: [PATCH 320/345] chore: security upgrade jackson-databind from 2.13.0 to 2.13.2 (#726) --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 3b221e3f..04d0d5bb 100644 --- a/pom.xml +++ b/pom.xml @@ -20,7 +20,7 @@ - 2.13.0 + 2.13.2 https://github.com/sendgrid/sendgrid-java @@ -306,4 +306,4 @@ - \ No newline at end of file + From 87d006f9efc13839d98147a36c6d6ce81a7f02e7 Mon Sep 17 00:00:00 2001 From: Sam Harrison Date: Thu, 21 Apr 2022 14:44:34 -0500 Subject: [PATCH 321/345] test: lint PRs on synchronize events Since synchronize events clears the status checks, it needs to be re-run. --- .github/workflows/pr-lint.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pr-lint.yml b/.github/workflows/pr-lint.yml index 8388f21e..dc7af3d3 100644 --- a/.github/workflows/pr-lint.yml +++ b/.github/workflows/pr-lint.yml @@ -1,7 +1,7 @@ name: Lint PR on: pull_request_target: - types: [ opened, edited, reopened ] + types: [ opened, edited, synchronize, reopened ] jobs: validate: From 4c33cea86b07c1dda49ec10ac92d455a24cb384b Mon Sep 17 00:00:00 2001 From: "Gareth Paul Jones (GPJ)" Date: Mon, 9 May 2022 10:08:59 -0700 Subject: [PATCH 322/345] docs: Modify README.md in alignment with SendGrid Support (#732) --- .github/ISSUE_TEMPLATE/config.yml | 10 ------- CONTRIBUTING.md | 29 ------------------ ISSUE_TEMPLATE.md | 30 ------------------- PULL_REQUEST_TEMPLATE.md | 2 +- README.md | 10 +++---- .../com/sendgrid/TestRequiredFilesExist.java | 6 ---- 6 files changed, 6 insertions(+), 81 deletions(-) delete mode 100644 .github/ISSUE_TEMPLATE/config.yml delete mode 100644 ISSUE_TEMPLATE.md diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml deleted file mode 100644 index b24426d0..00000000 --- a/.github/ISSUE_TEMPLATE/config.yml +++ /dev/null @@ -1,10 +0,0 @@ -contact_links: - - name: Twilio SendGrid Support - url: https://support.sendgrid.com - about: Get Support - - name: Stack Overflow - url: https://stackoverflow.com/questions/tagged/sendgrid-java+or+sendgrid+java - about: Ask questions on Stack Overflow - - name: Documentation - url: https://sendgrid.com/docs/for-developers/ - about: View Reference Documentation diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 73f9578f..d9f0088d 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -3,8 +3,6 @@ Hello! Thank you for choosing to help contribute to one of the Twilio SendGrid o **All third party contributors acknowledge that any contributions they provide will be made under the same open source license that the open source project is provided under.** - [Feature Request](#feature-request) -- [Submit a Bug Report](#submit-a-bug-report) - - [Please use our Bug Report Template](#please-use-our-bug-report-template) - [Improvements to the Codebase](#improvements-to-the-codebase) - [Development Environment](#development-environment) - [Install and Run Locally](#install-and-run-locally) @@ -20,33 +18,6 @@ Hello! Thank you for choosing to help contribute to one of the Twilio SendGrid o There are a few ways to contribute, which we'll enumerate below: - -## Feature Request - -If you'd like to make a feature request, please read this section. - -The GitHub issue tracker is the preferred channel for library feature requests, but please respect the following restrictions: - -- Please **search for existing issues** in order to ensure we don't have duplicate bugs/feature requests. -- Please be respectful and considerate of others when commenting on issues - - -## Submit a Bug Report - -Note: DO NOT include your credentials in ANY code examples, descriptions, or media you make public. - -A software bug is a demonstrable issue in the code base. In order for us to diagnose the issue and respond as quickly as possible, please add as much detail as possible into your bug report. - -Before you decide to create a new issue, please try the following: - -1. Check the GitHub issues tab if the identified issue has already been reported, if so, please add a +1 to the existing post. -2. Update to the latest version of this code and check if the issue has already been fixed -3. Copy and fill in the Bug Report Template we have provided below - -### Please use our Bug Report Template - -In order to make the process easier, we've included a [sample bug report template](ISSUE_TEMPLATE.md). - ## Improvements to the Codebase diff --git a/ISSUE_TEMPLATE.md b/ISSUE_TEMPLATE.md deleted file mode 100644 index 78ecfbd3..00000000 --- a/ISSUE_TEMPLATE.md +++ /dev/null @@ -1,30 +0,0 @@ - - -### Issue Summary -A summary of the issue and the environment in which it occurs. If suitable, include the steps required to reproduce the bug. Please feel free to include screenshots, screencasts, or code examples. - -### Steps to Reproduce -1. This is the first step -2. This is the second step -3. Further steps, etc. - -### Code Snippet -```java -# paste code here -``` - -### Exception/Log -``` -# paste exception/log here -``` - -### Technical details: -* sendgrid-java version: -* java version: - diff --git a/PULL_REQUEST_TEMPLATE.md b/PULL_REQUEST_TEMPLATE.md index a2fca138..52d4bd95 100644 --- a/PULL_REQUEST_TEMPLATE.md +++ b/PULL_REQUEST_TEMPLATE.md @@ -28,4 +28,4 @@ A short description of what this PR does. - [ ] I have added the necessary documentation about the functionality in the appropriate .md file - [ ] I have added inline documentation to the code I modified -If you have questions, please file a [support ticket](https://support.sendgrid.com), or create a GitHub Issue in this repository. +If you have questions, please file a [support ticket](https://support.sendgrid.com). diff --git a/README.md b/README.md index f9e0ea41..e17f6191 100644 --- a/README.md +++ b/README.md @@ -13,9 +13,7 @@ Version 3.X.X of this library provides full support for all Twilio SendGrid [Web This library represents the beginning of a new path for Twilio SendGrid. We want this library to be community driven and Twilio SendGrid led. We need your help to realize this goal. To help make sure we are building the right things in the right order, we ask that you create [issues](https://github.com/sendgrid/sendgrid-java/issues) and [pull requests](CONTRIBUTING.md) or simply upvote or comment on existing issues or pull requests. -Please browse the rest of this README for further details. - -We appreciate your continued support, thank you! +**If you need help using SendGrid, please check the [Twilio SendGrid Support Help Center](https://support.sendgrid.com).** # Table of Contents @@ -27,6 +25,7 @@ We appreciate your continued support, thank you! * [How to Contribute](#contribute) * [Troubleshooting](#troubleshooting) * [About](#about) +* [Support](#support) * [License](#license) @@ -220,9 +219,10 @@ Please see our [troubleshooting guide](TROUBLESHOOTING.md) for common library is sendgrid-java is maintained and funded by Twilio SendGrid, Inc. The names and logos for sendgrid-java are trademarks of Twilio SendGrid, Inc. -If you need help installing or using the library, please check the [Twilio SendGrid Support Help Center](https://support.sendgrid.com). + +# Support -If you've instead found a bug in the library or would like new features added, go ahead and open issues or pull requests against this repo! +If you need help installing or using the library, please check the [Twilio SendGrid Support Help Center](https://support.sendgrid.com). # License diff --git a/src/test/java/com/sendgrid/TestRequiredFilesExist.java b/src/test/java/com/sendgrid/TestRequiredFilesExist.java index 71209ea1..7675c8a2 100644 --- a/src/test/java/com/sendgrid/TestRequiredFilesExist.java +++ b/src/test/java/com/sendgrid/TestRequiredFilesExist.java @@ -43,12 +43,6 @@ public void checkContributingGuideExists() { assertTrue(new File("./CONTRIBUTING.md").exists()); } - // ./ISSUE_TEMPLATE.md - @Test - public void checkIssuesTemplateExists() { - assertTrue(new File("./ISSUE_TEMPLATE.md").exists()); - } - // ./LICENSE @Test public void checkLicenseExists() { From d27207e880c6e60dcdbad668ad2f5e09c38eb81a Mon Sep 17 00:00:00 2001 From: Sam Harrison Date: Thu, 12 May 2022 10:28:28 -0500 Subject: [PATCH 323/345] chore: drop the issue links from FIRST_TIMERS doc --- FIRST_TIMERS.md | 26 -------------------------- 1 file changed, 26 deletions(-) diff --git a/FIRST_TIMERS.md b/FIRST_TIMERS.md index 9db04724..667746df 100644 --- a/FIRST_TIMERS.md +++ b/FIRST_TIMERS.md @@ -51,29 +51,3 @@ git push origin ## Important notice Before creating a pull request, make sure that you respect the repository's constraints regarding contributions. You can find them in the [CONTRIBUTING.md](CONTRIBUTING.md) file. - -## Repositories with Open, Easy, Help Wanted, Issue Filters - -* [Python SDK](https://github.com/sendgrid/sendgrid-python/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) -* [PHP SDK](https://github.com/sendgrid/sendgrid-php/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) -* [C# SDK](https://github.com/sendgrid/sendgrid-csharp/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) -* [Ruby SDK](https://github.com/sendgrid/sendgrid-ruby/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) -* [Node.js SDK](https://github.com/sendgrid/sendgrid-nodejs/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) -* [Java SDK](https://github.com/sendgrid/sendgrid-java/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) -* [Go SDK](https://github.com/sendgrid/sendgrid-go/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) -* [Python SMTPAPI Client](https://github.com/sendgrid/smtpapi-python/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) -* [PHP SMTPAPI Client](https://github.com/sendgrid/smtpapi-php/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) -* [C# SMTPAPI Client](https://github.com/sendgrid/smtpapi-csharp/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) -* [Ruby SMTPAPI Client](https://github.com/sendgrid/smtpapi-ruby/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) -* [Node.js SMTPAPI Client](https://github.com/sendgrid/smtpapi-nodejs/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) -* [Java SMTPAPI Client](https://github.com/sendgrid/smtpapi-java/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) -* [Go SMTPAPI Client](https://github.com/sendgrid/smtpapi-go/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) -* [Python HTTP Client](https://github.com/sendgrid/python-http-client/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) -* [PHP HTTP Client](https://github.com/sendgrid/php-http-client/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) -* [C# HTTP Client](https://github.com/sendgrid/csharp-http-client/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) -* [Java HTTP Client](https://github.com/sendgrid/java-http-client/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) -* [Ruby HTTP Client](https://github.com/sendgrid/ruby-http-client/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) -* [Go HTTP Client](https://github.com/sendgrid/rest/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) -* [Open API Definition](https://github.com/sendgrid/sendgrid-oai/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) -* [DX Automator](https://github.com/sendgrid/dx-automator/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) -* [Documentation](https://github.com/sendgrid/docs/issues?utf8=%E2%9C%93&q=is%3Aopen+label%3A%22difficulty%3A+easy%22+label%3A%22status%3A+help+wanted%22) From 5aa5da2111c886bac0a03e5b4c2c87df63f5e806 Mon Sep 17 00:00:00 2001 From: Twilio Date: Wed, 18 May 2022 13:35:23 -0700 Subject: [PATCH 324/345] [Librarian] Version Bump --- CHANGELOG.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 58a316c6..49c043fa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,18 @@ # Change Log All notable changes to this project will be documented in this file. +[2022-05-18] Version 4.9.2 +-------------------------- +**Library - Docs** +- [PR #732](https://github.com/sendgrid/sendgrid-java/pull/732): Modify README.md in alignment with SendGrid Support. Thanks to [@garethpaul](https://github.com/garethpaul)! + +**Library - Chore** +- [PR #726](https://github.com/sendgrid/sendgrid-java/pull/726): security upgrade jackson-databind from 2.13.0 to 2.13.2. Thanks to [@tomoyaY](https://github.com/tomoyaY)! + +**Library - Fix** +- [PR #725](https://github.com/sendgrid/sendgrid-java/pull/725): override default gh token. Thanks to [@beebzz](https://github.com/beebzz)! + + [2022-03-23] Version 4.9.1 -------------------------- **Library - Chore** From 873f34586d322fd9953edfd46bf41b45787c115b Mon Sep 17 00:00:00 2001 From: Twilio Date: Wed, 18 May 2022 13:35:23 -0700 Subject: [PATCH 325/345] Release 4.9.2 --- CONTRIBUTING.md | 2 +- README.md | 4 ++-- pom.xml | 6 +++--- src/main/java/com/sendgrid/BaseInterface.java | 2 +- src/test/java/com/sendgrid/SendGridTest.java | 2 +- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index d9f0088d..077202cf 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -69,7 +69,7 @@ touch Example.java Add the example you want to test to Example.java, including the headers at the top of the file. ``` bash -javac -classpath ../repo/com/sendgrid/4.9.1/sendgrid-4.9.1-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.9.1/sendgrid-4.9.1-jar.jar:. Example +javac -classpath ../repo/com/sendgrid/4.9.2/sendgrid-4.9.2-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.9.2/sendgrid-4.9.2-jar.jar:. Example ``` diff --git a/README.md b/README.md index e17f6191..94c401cc 100644 --- a/README.md +++ b/README.md @@ -62,7 +62,7 @@ Add the following to your build.gradle file in the root of your project. ... dependencies { ... - implementation 'com.sendgrid:sendgrid-java:4.9.1' + implementation 'com.sendgrid:sendgrid-java:4.9.2' } repositories { @@ -81,7 +81,7 @@ mvn install You can just drop the jar file in. It's a fat jar - it has all the dependencies built in. -[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.9.1/sendgrid-java.jar) +[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.9.2/sendgrid-java.jar) ## Dependencies diff --git a/pom.xml b/pom.xml index 04d0d5bb..df870530 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ com.sendgrid sendgrid-java Twilio SendGrid Java helper library - 4.9.1 + 4.9.2 This Java module allows you to quickly and easily send emails through Twilio SendGrid using Java. https://github.com/sendgrid/sendgrid-java @@ -26,7 +26,7 @@ https://github.com/sendgrid/sendgrid-java scm:git:git@github.com:sendgrid/sendgrid-java.git scm:git:git@github.com:sendgrid/sendgrid-java.git - 4.9.1 + 4.9.2 @@ -306,4 +306,4 @@ - + \ No newline at end of file diff --git a/src/main/java/com/sendgrid/BaseInterface.java b/src/main/java/com/sendgrid/BaseInterface.java index 74c50fec..1c8302ab 100644 --- a/src/main/java/com/sendgrid/BaseInterface.java +++ b/src/main/java/com/sendgrid/BaseInterface.java @@ -11,7 +11,7 @@ */ public abstract class BaseInterface implements SendGridAPI { - private static final String VERSION = "4.9.1"; + private static final String VERSION = "4.9.2"; private static final String USER_AGENT = "sendgrid/" + VERSION + ";java"; private static final int RATE_LIMIT_RESPONSE_CODE = 429; diff --git a/src/test/java/com/sendgrid/SendGridTest.java b/src/test/java/com/sendgrid/SendGridTest.java index 73d1614d..415c7d81 100644 --- a/src/test/java/com/sendgrid/SendGridTest.java +++ b/src/test/java/com/sendgrid/SendGridTest.java @@ -43,7 +43,7 @@ public void testConstructWithClient() throws IOException { @Test public void testLibraryVersion() { SendGrid sg = new SendGrid(SENDGRID_API_KEY); - Assert.assertEquals(sg.getLibraryVersion(), "4.9.1"); + Assert.assertEquals(sg.getLibraryVersion(), "4.9.2"); } @Test From 61c4d5dc4dadfbc0abf8ced5dbd1a66e7bbbb0ae Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 21 Jun 2022 08:51:15 -0500 Subject: [PATCH 326/345] chore: bump jackson-databind from 2.13.2 to 2.13.3 (#727) --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index df870530..b05e4fcf 100644 --- a/pom.xml +++ b/pom.xml @@ -20,7 +20,7 @@ - 2.13.2 + 2.13.3 https://github.com/sendgrid/sendgrid-java From cae0040abebb97f5d37aae60d2687d86118cef25 Mon Sep 17 00:00:00 2001 From: Twilio Date: Wed, 29 Jun 2022 11:49:59 -0700 Subject: [PATCH 327/345] [Librarian] Version Bump --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 49c043fa..6a8840b0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,12 @@ # Change Log All notable changes to this project will be documented in this file. +[2022-06-29] Version 4.9.3 +-------------------------- +**Library - Chore** +- [PR #727](https://github.com/sendgrid/sendgrid-java/pull/727): bump jackson-databind from 2.13.2 to 2.13.3. Thanks to [@dependabot](https://github.com/dependabot)! + + [2022-05-18] Version 4.9.2 -------------------------- **Library - Docs** From 6b7fd6226e2e734ae05c69762528bc00d7ac4377 Mon Sep 17 00:00:00 2001 From: Twilio Date: Wed, 29 Jun 2022 11:49:59 -0700 Subject: [PATCH 328/345] Release 4.9.3 --- CONTRIBUTING.md | 2 +- README.md | 4 ++-- pom.xml | 4 ++-- src/main/java/com/sendgrid/BaseInterface.java | 2 +- src/test/java/com/sendgrid/SendGridTest.java | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 077202cf..139b3656 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -69,7 +69,7 @@ touch Example.java Add the example you want to test to Example.java, including the headers at the top of the file. ``` bash -javac -classpath ../repo/com/sendgrid/4.9.2/sendgrid-4.9.2-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.9.2/sendgrid-4.9.2-jar.jar:. Example +javac -classpath ../repo/com/sendgrid/4.9.3/sendgrid-4.9.3-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.9.3/sendgrid-4.9.3-jar.jar:. Example ``` diff --git a/README.md b/README.md index 94c401cc..fc60fb70 100644 --- a/README.md +++ b/README.md @@ -62,7 +62,7 @@ Add the following to your build.gradle file in the root of your project. ... dependencies { ... - implementation 'com.sendgrid:sendgrid-java:4.9.2' + implementation 'com.sendgrid:sendgrid-java:4.9.3' } repositories { @@ -81,7 +81,7 @@ mvn install You can just drop the jar file in. It's a fat jar - it has all the dependencies built in. -[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.9.2/sendgrid-java.jar) +[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.9.3/sendgrid-java.jar) ## Dependencies diff --git a/pom.xml b/pom.xml index b05e4fcf..ef5d65c2 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ com.sendgrid sendgrid-java Twilio SendGrid Java helper library - 4.9.2 + 4.9.3 This Java module allows you to quickly and easily send emails through Twilio SendGrid using Java. https://github.com/sendgrid/sendgrid-java @@ -26,7 +26,7 @@ https://github.com/sendgrid/sendgrid-java scm:git:git@github.com:sendgrid/sendgrid-java.git scm:git:git@github.com:sendgrid/sendgrid-java.git - 4.9.2 + 4.9.3 diff --git a/src/main/java/com/sendgrid/BaseInterface.java b/src/main/java/com/sendgrid/BaseInterface.java index 1c8302ab..0a812c19 100644 --- a/src/main/java/com/sendgrid/BaseInterface.java +++ b/src/main/java/com/sendgrid/BaseInterface.java @@ -11,7 +11,7 @@ */ public abstract class BaseInterface implements SendGridAPI { - private static final String VERSION = "4.9.2"; + private static final String VERSION = "4.9.3"; private static final String USER_AGENT = "sendgrid/" + VERSION + ";java"; private static final int RATE_LIMIT_RESPONSE_CODE = 429; diff --git a/src/test/java/com/sendgrid/SendGridTest.java b/src/test/java/com/sendgrid/SendGridTest.java index 415c7d81..2ac11fdb 100644 --- a/src/test/java/com/sendgrid/SendGridTest.java +++ b/src/test/java/com/sendgrid/SendGridTest.java @@ -43,7 +43,7 @@ public void testConstructWithClient() throws IOException { @Test public void testLibraryVersion() { SendGrid sg = new SendGrid(SENDGRID_API_KEY); - Assert.assertEquals(sg.getLibraryVersion(), "4.9.2"); + Assert.assertEquals(sg.getLibraryVersion(), "4.9.3"); } @Test From 12a2ce039559a9568908314802f21ba55123e649 Mon Sep 17 00:00:00 2001 From: Raghav Katyal Date: Wed, 6 Jul 2022 16:15:04 -0700 Subject: [PATCH 329/345] Adding misc as PR type (#735) --- .github/workflows/pr-lint.yml | 2 +- PULL_REQUEST_TEMPLATE.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/pr-lint.yml b/.github/workflows/pr-lint.yml index dc7af3d3..2f5232b0 100644 --- a/.github/workflows/pr-lint.yml +++ b/.github/workflows/pr-lint.yml @@ -10,6 +10,6 @@ jobs: steps: - uses: amannn/action-semantic-pull-request@v4 with: - types: chore docs fix feat test + types: chore docs fix feat test misc env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/PULL_REQUEST_TEMPLATE.md b/PULL_REQUEST_TEMPLATE.md index 52d4bd95..c15ea433 100644 --- a/PULL_REQUEST_TEMPLATE.md +++ b/PULL_REQUEST_TEMPLATE.md @@ -3,7 +3,7 @@ We appreciate the effort for this pull request but before that please make sure Please format the PR title appropriately based on the type of change: [!]: -Where is one of: docs, chore, feat, fix, test. +Where is one of: docs, chore, feat, fix, test, misc. Add a '!' after the type for breaking changes (e.g. feat!: new breaking feature). **All third-party contributors acknowledge that any contributions they provide will be made under the same open-source license that the open-source project is provided under.** From 146bfee5b200d2658206b09ff2a0f4f1c6e2e55c Mon Sep 17 00:00:00 2001 From: Sam Harrison Date: Tue, 3 Jan 2023 09:09:34 -0600 Subject: [PATCH 330/345] docs: updated the year in the license --- LICENSE | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/LICENSE b/LICENSE index 5db04ff6..3154774a 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (C) 2022, Twilio SendGrid, Inc. +Copyright (C) 2023, Twilio SendGrid, Inc. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in From 040d916d6b8cb2adf106ab6b910a1e00a85112af Mon Sep 17 00:00:00 2001 From: shrutiburman <87537688+shrutiburman@users.noreply.github.com> Date: Fri, 3 Nov 2023 00:22:24 +0530 Subject: [PATCH 331/345] feat: Add data residency for eu and global regions (#743) --- examples/dataresidency/setregion.java | 77 +++++++++++++++++++ src/main/java/com/sendgrid/BaseInterface.java | 25 ++++++ src/test/java/com/sendgrid/SendGridTest.java | 46 +++++++++++ 3 files changed, 148 insertions(+) create mode 100644 examples/dataresidency/setregion.java diff --git a/examples/dataresidency/setregion.java b/examples/dataresidency/setregion.java new file mode 100644 index 00000000..5dc42150 --- /dev/null +++ b/examples/dataresidency/setregion.java @@ -0,0 +1,77 @@ +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +import com.sendgrid.*; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +////////////////////////////////////////////////////////////////// +// Set data residency to navigate to a region/edge. +// Currently supported: "global", "eu" + + +public class Example { + public static void main(String[] args) throws IOException { + try { + + final Mail helloWorld = buildHelloEmail(); + + Request request = new Request(); + request.setEndpoint("mail/send"); + request.setBody(helloWorld.build()); + request.setMethod(Method.POST); + + // sending to global data residency + Sendgrid sg = buildSendgridObj("global"); + Response response = sg.api(request); + System.out.println("Sending to hostname: " + sg.getHost()); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + + // sending to EU data residency + Sendgrid sg = buildSendgridObj("eu"); + Response response = sg.api(request); + System.out.println("Sending to hostname: " + sg.getHost()); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + + // not configuring any region defaults to global + Sendgrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + Response response = sg.api(request); + System.out.println("Sending to hostname: " + sg.getHost()); + System.out.println(response.getStatusCode()); + System.out.println(response.getBody()); + System.out.println(response.getHeaders()); + + } catch (IOException ex) { + throw ex; + } + } + + public static Mail buildHelloEmail() { + Email from = new Email("test@example.com"); + String subject = "Hello World from the Twilio SendGrid Java Library"; + Email to = new Email("test@example.com"); + Content content = new Content("text/plain", "some text here"); + // Note that when you use this constructor an initial personalization object + // is created for you. It can be accessed via + // mail.personalization.get(0) as it is a List object + Mail mail = new Mail(from, subject, to, content); + Email email = new Email("test2@example.com"); + mail.personalization.get(0).addTo(email); + + return mail; + } + + public static Sendgrid buildSendgridObj(String region){ + SendGrid sg = new SendGrid(System.getenv("SENDGRID_API_KEY")); + sg.setDataResidency(region); + return sg; + + } +} + diff --git a/src/main/java/com/sendgrid/BaseInterface.java b/src/main/java/com/sendgrid/BaseInterface.java index 0a812c19..bef1814f 100644 --- a/src/main/java/com/sendgrid/BaseInterface.java +++ b/src/main/java/com/sendgrid/BaseInterface.java @@ -17,6 +17,13 @@ public abstract class BaseInterface implements SendGridAPI { private static final int RATE_LIMIT_RESPONSE_CODE = 429; private static final int THREAD_POOL_SIZE = 8; + private static final Map allowedRegionsHostMap; + static { + //todo: change this to Map.of() when we've moved on from Java 8 + allowedRegionsHostMap = new HashMap<>(); + allowedRegionsHostMap.put("eu", "api.eu.sendgrid.com"); + allowedRegionsHostMap.put("global", "api.sendgrid.com"); + } private ExecutorService pool; /** @@ -336,4 +343,22 @@ public void run() { } }); } + + /* + * Client libraries contain setters for specifying region/edge. + * This allows support global and eu regions only. This set will likely expand in the future. + * Global should be the default + * Global region means the message should be sent through: + * HTTP: api.sendgrid.com + * EU region means the message should be sent through: + * HTTP: api.eu.sendgrid.com +*/ + public void setDataResidency(String region){ + if (allowedRegionsHostMap.containsKey(region)){ + this.host = allowedRegionsHostMap.get(region); + } + else{ + throw new IllegalArgumentException("region can only be \"eu\" or \"global\""); + } + } } diff --git a/src/test/java/com/sendgrid/SendGridTest.java b/src/test/java/com/sendgrid/SendGridTest.java index 2ac11fdb..00f66799 100644 --- a/src/test/java/com/sendgrid/SendGridTest.java +++ b/src/test/java/com/sendgrid/SendGridTest.java @@ -3242,4 +3242,50 @@ public void test_request_headers_override_sendgrid_object_headers() throws IOExc sg.api(request); verify(client).api(argThat((Request req) -> req.getHeaders().get("set-on-both").equals("456"))); } + + @Test + public void testSetResidency_happy_path_eu() { + SendGrid sg = new SendGrid(SENDGRID_API_KEY); + sg.setDataResidency("eu"); + Assert.assertEquals(sg.getHost(), "api.eu.sendgrid.com"); + } + @Test + public void testSetResidency_happy_path_global() { + SendGrid sg = new SendGrid(SENDGRID_API_KEY); + sg.setDataResidency("global"); + Assert.assertEquals(sg.getHost(), "api.sendgrid.com"); + } + + + @Test + public void testSetResidency_override_host() { + SendGrid sg = new SendGrid(SENDGRID_API_KEY); + sg.setHost("api.new.com"); + sg.setDataResidency("eu"); + Assert.assertEquals(sg.getHost(), "api.eu.sendgrid.com"); + } + + @Test + public void testsetResidency_override_data_residency() { + SendGrid sg = new SendGrid(SENDGRID_API_KEY); + sg.setDataResidency("eu"); + sg.setHost("api.new.com"); + Assert.assertEquals(sg.getHost(), "api.new.com"); + } + + @Test (expected = IllegalArgumentException.class) + public void testsetResidency_incorrect_region() { + SendGrid sg = new SendGrid(SENDGRID_API_KEY); + sg.setDataResidency("foo"); + } + @Test (expected = IllegalArgumentException.class) + public void testsetResidency_null_region(){ + SendGrid sg = new SendGrid(SENDGRID_API_KEY); + sg.setDataResidency(""); + } + @Test + public void testsetResidency_default_region() { + SendGrid sg = new SendGrid(SENDGRID_API_KEY); + Assert.assertEquals(sg.getHost(), "api.sendgrid.com"); + } } From c81da35c271eab19f2cf63d7d8560926dc045a10 Mon Sep 17 00:00:00 2001 From: Twilio Date: Mon, 6 Nov 2023 14:44:09 +0000 Subject: [PATCH 332/345] [Librarian] Version Bump --- CHANGELOG.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6a8840b0..a7293f35 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,15 @@ # Change Log All notable changes to this project will be documented in this file. +[2023-11-06] Version 4.10.0 +--------------------------- +**Library - Feature** +- [PR #743](https://github.com/sendgrid/sendgrid-java/pull/743): Add data residency for eu and global regions. Thanks to [@shrutiburman](https://github.com/shrutiburman)! + +**Library - Test** +- [PR #735](https://github.com/sendgrid/sendgrid-java/pull/735): Adding misc as PR type. Thanks to [@rakatyal](https://github.com/rakatyal)! + + [2022-06-29] Version 4.9.3 -------------------------- **Library - Chore** From 1ed873276731f12a71d0011dcf88804dca97e8ea Mon Sep 17 00:00:00 2001 From: Twilio Date: Mon, 6 Nov 2023 14:44:09 +0000 Subject: [PATCH 333/345] Release 4.10.0 --- CONTRIBUTING.md | 2 +- README.md | 4 ++-- pom.xml | 4 ++-- src/main/java/com/sendgrid/BaseInterface.java | 2 +- src/test/java/com/sendgrid/SendGridTest.java | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 139b3656..77fc2389 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -69,7 +69,7 @@ touch Example.java Add the example you want to test to Example.java, including the headers at the top of the file. ``` bash -javac -classpath ../repo/com/sendgrid/4.9.3/sendgrid-4.9.3-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.9.3/sendgrid-4.9.3-jar.jar:. Example +javac -classpath ../repo/com/sendgrid/4.10.0/sendgrid-4.10.0-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.10.0/sendgrid-4.10.0-jar.jar:. Example ``` diff --git a/README.md b/README.md index fc60fb70..64a8aee5 100644 --- a/README.md +++ b/README.md @@ -62,7 +62,7 @@ Add the following to your build.gradle file in the root of your project. ... dependencies { ... - implementation 'com.sendgrid:sendgrid-java:4.9.3' + implementation 'com.sendgrid:sendgrid-java:4.10.0' } repositories { @@ -81,7 +81,7 @@ mvn install You can just drop the jar file in. It's a fat jar - it has all the dependencies built in. -[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.9.3/sendgrid-java.jar) +[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.10.0/sendgrid-java.jar) ## Dependencies diff --git a/pom.xml b/pom.xml index ef5d65c2..bb404261 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ com.sendgrid sendgrid-java Twilio SendGrid Java helper library - 4.9.3 + 4.10.0 This Java module allows you to quickly and easily send emails through Twilio SendGrid using Java. https://github.com/sendgrid/sendgrid-java @@ -26,7 +26,7 @@ https://github.com/sendgrid/sendgrid-java scm:git:git@github.com:sendgrid/sendgrid-java.git scm:git:git@github.com:sendgrid/sendgrid-java.git - 4.9.3 + 4.10.0 diff --git a/src/main/java/com/sendgrid/BaseInterface.java b/src/main/java/com/sendgrid/BaseInterface.java index bef1814f..163490a9 100644 --- a/src/main/java/com/sendgrid/BaseInterface.java +++ b/src/main/java/com/sendgrid/BaseInterface.java @@ -11,7 +11,7 @@ */ public abstract class BaseInterface implements SendGridAPI { - private static final String VERSION = "4.9.3"; + private static final String VERSION = "4.10.0"; private static final String USER_AGENT = "sendgrid/" + VERSION + ";java"; private static final int RATE_LIMIT_RESPONSE_CODE = 429; diff --git a/src/test/java/com/sendgrid/SendGridTest.java b/src/test/java/com/sendgrid/SendGridTest.java index 00f66799..6e137eb8 100644 --- a/src/test/java/com/sendgrid/SendGridTest.java +++ b/src/test/java/com/sendgrid/SendGridTest.java @@ -43,7 +43,7 @@ public void testConstructWithClient() throws IOException { @Test public void testLibraryVersion() { SendGrid sg = new SendGrid(SENDGRID_API_KEY); - Assert.assertEquals(sg.getLibraryVersion(), "4.9.3"); + Assert.assertEquals(sg.getLibraryVersion(), "4.10.0"); } @Test From d4d332faa34abf02c657c74842e496a8024a865a Mon Sep 17 00:00:00 2001 From: kebeda Date: Wed, 8 Nov 2023 06:21:13 -0600 Subject: [PATCH 334/345] =?UTF-8?q?=F0=9F=93=A6=EF=B8=8F=20chore(deps):=20?= =?UTF-8?q?updates=20bouncy=20castle=20to=201.75=20(latest=201.7x)=20(#741?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This mitigates CVE-2023-33201. ref. https://github.com/bcgit/bc-java/wiki/CVE-2023-33201 Co-authored-by: shrutiburman <87537688+shrutiburman@users.noreply.github.com> --- pom.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index bb404261..ee6657ae 100644 --- a/pom.xml +++ b/pom.xml @@ -293,8 +293,8 @@
org.bouncycastle - bcprov-jdk15on - 1.70 + bcprov-jdk18on + 1.75 @@ -306,4 +306,4 @@ - \ No newline at end of file + From 8c5607f9dc1d566956d2d1ecea3738feb4549283 Mon Sep 17 00:00:00 2001 From: Matt Dziuban Date: Wed, 8 Nov 2023 08:44:57 -0500 Subject: [PATCH 335/345] Update bouncycastle to latest 1.76 (#744) --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index ee6657ae..c131cfa5 100644 --- a/pom.xml +++ b/pom.xml @@ -294,7 +294,7 @@ org.bouncycastle bcprov-jdk18on - 1.75 + 1.76 From 1692a4ed9115af6de0c4dcb055370931b2fe4ebe Mon Sep 17 00:00:00 2001 From: Twilio Date: Fri, 17 Nov 2023 10:32:39 +0000 Subject: [PATCH 336/345] [Librarian] Version Bump --- CHANGELOG.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index a7293f35..50e27d1f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,13 @@ # Change Log All notable changes to this project will be documented in this file. +[2023-11-17] Version 4.10.1 +--------------------------- +**Library - Chore** +- [PR #744](https://github.com/sendgrid/sendgrid-java/pull/744): updates bouncy castle to 1.76 (latest 1.7x). Thanks to [@mrdziuban](https://github.com/mrdziuban)! +- [PR #741](https://github.com/sendgrid/sendgrid-java/pull/741): updates bouncy castle to 1.75 (latest 1.7x). Thanks to [@kebeda](https://github.com/kebeda)! + + [2023-11-06] Version 4.10.0 --------------------------- **Library - Feature** From 511e7f7f09db9fdaed832b49f779d53a7f54781f Mon Sep 17 00:00:00 2001 From: Twilio Date: Fri, 17 Nov 2023 10:32:39 +0000 Subject: [PATCH 337/345] Release 4.10.1 --- CONTRIBUTING.md | 2 +- README.md | 4 ++-- pom.xml | 6 +++--- src/main/java/com/sendgrid/BaseInterface.java | 2 +- src/test/java/com/sendgrid/SendGridTest.java | 2 +- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 77fc2389..78483f31 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -69,7 +69,7 @@ touch Example.java Add the example you want to test to Example.java, including the headers at the top of the file. ``` bash -javac -classpath ../repo/com/sendgrid/4.10.0/sendgrid-4.10.0-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.10.0/sendgrid-4.10.0-jar.jar:. Example +javac -classpath ../repo/com/sendgrid/4.10.1/sendgrid-4.10.1-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.10.1/sendgrid-4.10.1-jar.jar:. Example ``` diff --git a/README.md b/README.md index 64a8aee5..b3a3851b 100644 --- a/README.md +++ b/README.md @@ -62,7 +62,7 @@ Add the following to your build.gradle file in the root of your project. ... dependencies { ... - implementation 'com.sendgrid:sendgrid-java:4.10.0' + implementation 'com.sendgrid:sendgrid-java:4.10.1' } repositories { @@ -81,7 +81,7 @@ mvn install You can just drop the jar file in. It's a fat jar - it has all the dependencies built in. -[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.10.0/sendgrid-java.jar) +[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.10.1/sendgrid-java.jar) ## Dependencies diff --git a/pom.xml b/pom.xml index c131cfa5..742055bb 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ com.sendgrid sendgrid-java Twilio SendGrid Java helper library - 4.10.0 + 4.10.1 This Java module allows you to quickly and easily send emails through Twilio SendGrid using Java. https://github.com/sendgrid/sendgrid-java @@ -26,7 +26,7 @@ https://github.com/sendgrid/sendgrid-java scm:git:git@github.com:sendgrid/sendgrid-java.git scm:git:git@github.com:sendgrid/sendgrid-java.git - 4.10.0 + 4.10.1 @@ -306,4 +306,4 @@ - + \ No newline at end of file diff --git a/src/main/java/com/sendgrid/BaseInterface.java b/src/main/java/com/sendgrid/BaseInterface.java index 163490a9..9be558c4 100644 --- a/src/main/java/com/sendgrid/BaseInterface.java +++ b/src/main/java/com/sendgrid/BaseInterface.java @@ -11,7 +11,7 @@ */ public abstract class BaseInterface implements SendGridAPI { - private static final String VERSION = "4.10.0"; + private static final String VERSION = "4.10.1"; private static final String USER_AGENT = "sendgrid/" + VERSION + ";java"; private static final int RATE_LIMIT_RESPONSE_CODE = 429; diff --git a/src/test/java/com/sendgrid/SendGridTest.java b/src/test/java/com/sendgrid/SendGridTest.java index 6e137eb8..84d4c19d 100644 --- a/src/test/java/com/sendgrid/SendGridTest.java +++ b/src/test/java/com/sendgrid/SendGridTest.java @@ -43,7 +43,7 @@ public void testConstructWithClient() throws IOException { @Test public void testLibraryVersion() { SendGrid sg = new SendGrid(SENDGRID_API_KEY); - Assert.assertEquals(sg.getLibraryVersion(), "4.10.0"); + Assert.assertEquals(sg.getLibraryVersion(), "4.10.1"); } @Test From e5443e3213fcfa982bf56365fc7511afe58af9ea Mon Sep 17 00:00:00 2001 From: Shubham Date: Thu, 18 Jan 2024 14:04:18 +0530 Subject: [PATCH 338/345] chore: update jackson version and licence year (#745) * chore: upgraded the jackson version to 2.14.0 * chore: changed licence year to 2024 --- LICENSE | 2 +- pom.xml | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/LICENSE b/LICENSE index 3154774a..d703157e 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (C) 2023, Twilio SendGrid, Inc. +Copyright (C) 2024, Twilio SendGrid, Inc. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in diff --git a/pom.xml b/pom.xml index 742055bb..ca72a7aa 100644 --- a/pom.xml +++ b/pom.xml @@ -20,7 +20,7 @@
- 2.13.3 + 2.14.0 https://github.com/sendgrid/sendgrid-java @@ -306,4 +306,4 @@ - \ No newline at end of file + From e9d0e9d4f475630b2a734afdc307484dbb283c0d Mon Sep 17 00:00:00 2001 From: Twilio Date: Wed, 14 Feb 2024 08:35:49 +0000 Subject: [PATCH 339/345] [Librarian] Version Bump --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 50e27d1f..0afa2205 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,12 @@ # Change Log All notable changes to this project will be documented in this file. +[2024-02-14] Version 4.10.2 +--------------------------- +**Library - Chore** +- [PR #745](https://github.com/sendgrid/sendgrid-java/pull/745): update jackson version and licence year. Thanks to [@tiwarishubham635](https://github.com/tiwarishubham635)! + + [2023-11-17] Version 4.10.1 --------------------------- **Library - Chore** From 472b4df35a719b99db96e8e0a8bf1ea552feb686 Mon Sep 17 00:00:00 2001 From: Twilio Date: Wed, 14 Feb 2024 08:35:49 +0000 Subject: [PATCH 340/345] Release 4.10.2 --- CONTRIBUTING.md | 2 +- README.md | 4 ++-- pom.xml | 6 +++--- src/main/java/com/sendgrid/BaseInterface.java | 2 +- src/test/java/com/sendgrid/SendGridTest.java | 2 +- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 78483f31..a5973600 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -69,7 +69,7 @@ touch Example.java Add the example you want to test to Example.java, including the headers at the top of the file. ``` bash -javac -classpath ../repo/com/sendgrid/4.10.1/sendgrid-4.10.1-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.10.1/sendgrid-4.10.1-jar.jar:. Example +javac -classpath ../repo/com/sendgrid/4.10.2/sendgrid-4.10.2-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.10.2/sendgrid-4.10.2-jar.jar:. Example ``` diff --git a/README.md b/README.md index b3a3851b..f1f3a0b8 100644 --- a/README.md +++ b/README.md @@ -62,7 +62,7 @@ Add the following to your build.gradle file in the root of your project. ... dependencies { ... - implementation 'com.sendgrid:sendgrid-java:4.10.1' + implementation 'com.sendgrid:sendgrid-java:4.10.2' } repositories { @@ -81,7 +81,7 @@ mvn install You can just drop the jar file in. It's a fat jar - it has all the dependencies built in. -[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.10.1/sendgrid-java.jar) +[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.10.2/sendgrid-java.jar) ## Dependencies diff --git a/pom.xml b/pom.xml index ca72a7aa..541f1964 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ com.sendgrid sendgrid-java Twilio SendGrid Java helper library - 4.10.1 + 4.10.2 This Java module allows you to quickly and easily send emails through Twilio SendGrid using Java. https://github.com/sendgrid/sendgrid-java @@ -26,7 +26,7 @@ https://github.com/sendgrid/sendgrid-java scm:git:git@github.com:sendgrid/sendgrid-java.git scm:git:git@github.com:sendgrid/sendgrid-java.git - 4.10.1 + 4.10.2 @@ -306,4 +306,4 @@ - + \ No newline at end of file diff --git a/src/main/java/com/sendgrid/BaseInterface.java b/src/main/java/com/sendgrid/BaseInterface.java index 9be558c4..100f235c 100644 --- a/src/main/java/com/sendgrid/BaseInterface.java +++ b/src/main/java/com/sendgrid/BaseInterface.java @@ -11,7 +11,7 @@ */ public abstract class BaseInterface implements SendGridAPI { - private static final String VERSION = "4.10.1"; + private static final String VERSION = "4.10.2"; private static final String USER_AGENT = "sendgrid/" + VERSION + ";java"; private static final int RATE_LIMIT_RESPONSE_CODE = 429; diff --git a/src/test/java/com/sendgrid/SendGridTest.java b/src/test/java/com/sendgrid/SendGridTest.java index 84d4c19d..9c0d3063 100644 --- a/src/test/java/com/sendgrid/SendGridTest.java +++ b/src/test/java/com/sendgrid/SendGridTest.java @@ -43,7 +43,7 @@ public void testConstructWithClient() throws IOException { @Test public void testLibraryVersion() { SendGrid sg = new SendGrid(SENDGRID_API_KEY); - Assert.assertEquals(sg.getLibraryVersion(), "4.10.1"); + Assert.assertEquals(sg.getLibraryVersion(), "4.10.2"); } @Test From 8e59d61b8778b975129261075efe69022415bb9c Mon Sep 17 00:00:00 2001 From: Shubham Date: Tue, 10 Sep 2024 10:33:34 +0530 Subject: [PATCH 341/345] chore: move Bouncy Castle dependency to test scope (#767) * chore: install docker-compose * make bouncycastle test scope --- .github/workflows/test-and-deploy.yml | 5 +++++ pom.xml | 5 +++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test-and-deploy.yml b/.github/workflows/test-and-deploy.yml index b8d847f2..111591a6 100644 --- a/.github/workflows/test-and-deploy.yml +++ b/.github/workflows/test-and-deploy.yml @@ -31,6 +31,11 @@ jobs: username: ${{ secrets.DOCKER_USERNAME }} password: ${{ secrets.DOCKER_AUTH_TOKEN }} + - name: Install Docker Compose + run: | + sudo apt-get update + sudo apt-get install -y docker-compose + - name: Run Unit Tests run: make test-docker version=${{ matrix.java }} diff --git a/pom.xml b/pom.xml index 541f1964..ea11d878 100644 --- a/pom.xml +++ b/pom.xml @@ -294,7 +294,8 @@ org.bouncycastle bcprov-jdk18on - 1.76 + 1.78.1 + test @@ -306,4 +307,4 @@ - \ No newline at end of file + From ff848fb6f1f001dffc582c9aff2cd2ce2e571eef Mon Sep 17 00:00:00 2001 From: Twilio Date: Wed, 18 Sep 2024 13:17:43 +0000 Subject: [PATCH 342/345] [Librarian] Version Bump --- CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0afa2205..0419d039 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,12 @@ # Change Log All notable changes to this project will be documented in this file. +[2024-09-18] Version 4.10.3 +--------------------------- +**Library - Chore** +- [PR #767](https://github.com/sendgrid/sendgrid-java/pull/767): move Bouncy Castle dependency to test scope. Thanks to [@tiwarishubham635](https://github.com/tiwarishubham635)! + + [2024-02-14] Version 4.10.2 --------------------------- **Library - Chore** From 352d3538b187b76ba227ad1968fafbe20469e187 Mon Sep 17 00:00:00 2001 From: Twilio Date: Wed, 18 Sep 2024 13:17:43 +0000 Subject: [PATCH 343/345] Release 4.10.3 --- CONTRIBUTING.md | 2 +- README.md | 4 ++-- pom.xml | 6 +++--- src/main/java/com/sendgrid/BaseInterface.java | 2 +- src/test/java/com/sendgrid/SendGridTest.java | 2 +- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index a5973600..c97a921f 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -69,7 +69,7 @@ touch Example.java Add the example you want to test to Example.java, including the headers at the top of the file. ``` bash -javac -classpath ../repo/com/sendgrid/4.10.2/sendgrid-4.10.2-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.10.2/sendgrid-4.10.2-jar.jar:. Example +javac -classpath ../repo/com/sendgrid/4.10.3/sendgrid-4.10.3-jar.jar:. Example.java && java -classpath ../repo/com/sendgrid/4.10.3/sendgrid-4.10.3-jar.jar:. Example ``` diff --git a/README.md b/README.md index f1f3a0b8..090a0536 100644 --- a/README.md +++ b/README.md @@ -62,7 +62,7 @@ Add the following to your build.gradle file in the root of your project. ... dependencies { ... - implementation 'com.sendgrid:sendgrid-java:4.10.2' + implementation 'com.sendgrid:sendgrid-java:4.10.3' } repositories { @@ -81,7 +81,7 @@ mvn install You can just drop the jar file in. It's a fat jar - it has all the dependencies built in. -[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.10.2/sendgrid-java.jar) +[sendgrid-java.jar](https://github.com/sendgrid/sendgrid-java/releases/download/4.10.3/sendgrid-java.jar) ## Dependencies diff --git a/pom.xml b/pom.xml index ea11d878..dad3a41a 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ com.sendgrid sendgrid-java Twilio SendGrid Java helper library - 4.10.2 + 4.10.3 This Java module allows you to quickly and easily send emails through Twilio SendGrid using Java. https://github.com/sendgrid/sendgrid-java @@ -26,7 +26,7 @@ https://github.com/sendgrid/sendgrid-java scm:git:git@github.com:sendgrid/sendgrid-java.git scm:git:git@github.com:sendgrid/sendgrid-java.git - 4.10.2 + 4.10.3 @@ -307,4 +307,4 @@ - + \ No newline at end of file diff --git a/src/main/java/com/sendgrid/BaseInterface.java b/src/main/java/com/sendgrid/BaseInterface.java index 100f235c..7a45cda4 100644 --- a/src/main/java/com/sendgrid/BaseInterface.java +++ b/src/main/java/com/sendgrid/BaseInterface.java @@ -11,7 +11,7 @@ */ public abstract class BaseInterface implements SendGridAPI { - private static final String VERSION = "4.10.2"; + private static final String VERSION = "4.10.3"; private static final String USER_AGENT = "sendgrid/" + VERSION + ";java"; private static final int RATE_LIMIT_RESPONSE_CODE = 429; diff --git a/src/test/java/com/sendgrid/SendGridTest.java b/src/test/java/com/sendgrid/SendGridTest.java index 9c0d3063..8737cbb2 100644 --- a/src/test/java/com/sendgrid/SendGridTest.java +++ b/src/test/java/com/sendgrid/SendGridTest.java @@ -43,7 +43,7 @@ public void testConstructWithClient() throws IOException { @Test public void testLibraryVersion() { SendGrid sg = new SendGrid(SENDGRID_API_KEY); - Assert.assertEquals(sg.getLibraryVersion(), "4.10.2"); + Assert.assertEquals(sg.getLibraryVersion(), "4.10.3"); } @Test From fa9bb12f73d2dfc10c7ea5a41bc2850be6fdd962 Mon Sep 17 00:00:00 2001 From: sbansla <104902068+sbansla@users.noreply.github.com> Date: Mon, 30 Jun 2025 13:19:45 +0530 Subject: [PATCH 344/345] chore: migrate ossrh to central publishing repo (#777) * chore: migrate ossrh to central publishing repo * updated license versiob --- LICENSE | 2 +- pom.xml | 16 +++++----------- 2 files changed, 6 insertions(+), 12 deletions(-) diff --git a/LICENSE b/LICENSE index d703157e..126ceb1a 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (C) 2024, Twilio SendGrid, Inc. +Copyright (C) 2025, Twilio SendGrid, Inc. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in diff --git a/pom.xml b/pom.xml index dad3a41a..0d8ec8ef 100644 --- a/pom.xml +++ b/pom.xml @@ -1,11 +1,6 @@ 4.0.0 - - org.sonatype.oss - oss-parent - 7 - com.sendgrid sendgrid-java Twilio SendGrid Java helper library @@ -39,14 +34,13 @@ - org.sonatype.plugins - nexus-staging-maven-plugin - 1.6.8 + org.sonatype.central + central-publishing-maven-plugin + 0.8.0 true - ossrh - https://oss.sonatype.org/ - true + central + true From 9f65fcf2109ca7860d6b8a1428da346fec555413 Mon Sep 17 00:00:00 2001 From: sbansla <104902068+sbansla@users.noreply.github.com> Date: Mon, 30 Jun 2025 15:53:01 +0530 Subject: [PATCH 345/345] chore: Migrate ossrh to central (#778) * changing server-id to central --- .github/workflows/test-and-deploy.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test-and-deploy.yml b/.github/workflows/test-and-deploy.yml index 111591a6..0a31274e 100644 --- a/.github/workflows/test-and-deploy.yml +++ b/.github/workflows/test-and-deploy.yml @@ -53,7 +53,7 @@ jobs: with: java-version: 8 distribution: temurin - server-id: ossrh + server-id: central server-username: MAVEN_USERNAME server-password: MAVEN_PASSWORD gpg-private-key: ${{ secrets.GPG_PRIVATE_KEY }}