Skip to content

Commit fbdac1a

Browse files
chore: handle any Type with object datatype (#858)
* chore: handle free form with object datatype * chore: handle mapToJson() for free form objects * chore: handle mapToJson() for free form objects * fix: handle only any type objects * fix: handle Object.toJson() * fix: add comments * fix: enum changes * fix: add object to json converter * fix: add test for objectToJson * fix: add test for different arrays
1 parent 0700c0f commit fbdac1a

File tree

11 files changed

+212
-42
lines changed

11 files changed

+212
-42
lines changed

src/main/java/com/twilio/converter/Converter.java

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,61 @@
55
import com.fasterxml.jackson.databind.ObjectMapper;
66

77
import java.io.IOException;
8+
import java.util.Arrays;
9+
import java.util.Collection;
810
import java.util.HashMap;
911
import java.util.Map;
1012

1113
public class Converter {
1214

1315
private static final ObjectMapper MAPPER = new ObjectMapper();
1416

17+
/**
18+
* Convert a generic object to a JSON String.
19+
*
20+
* @param value object to convert
21+
* @return converted JSON string
22+
*/
23+
public static String objectToJson(Object value) {
24+
if (value == null) {
25+
return "null";
26+
}
27+
28+
// Primitive wrappers
29+
if (value instanceof String || value instanceof Number || value instanceof Boolean || value instanceof Character) {
30+
return value.toString();
31+
}
32+
// Arrays: handle any arrays (primitive or object)
33+
if (value.getClass().isArray()) {
34+
// For primitive arrays, handle differently
35+
if (value instanceof int[]) return Arrays.toString((int[]) value);
36+
if (value instanceof long[]) return Arrays.toString((long[]) value);
37+
if (value instanceof double[]) return Arrays.toString((double[]) value);
38+
if (value instanceof float[]) return Arrays.toString((float[]) value);
39+
if (value instanceof boolean[]) return Arrays.toString((boolean[]) value);
40+
if (value instanceof byte[]) return Arrays.toString((byte[]) value);
41+
if (value instanceof short[]) return Arrays.toString((short[]) value);
42+
if (value instanceof char[]) return Arrays.toString((char[]) value);
43+
// Object array
44+
return Arrays.deepToString((Object[]) value);
45+
}
46+
47+
// Collection (List, Set, etc.)
48+
if (value instanceof Collection || value instanceof Map) {
49+
try {
50+
return MAPPER.writeValueAsString(value);
51+
} catch (JsonProcessingException e) {
52+
return value.toString();
53+
}
54+
}
55+
// Fallback: Try JSON, else toString
56+
try {
57+
return MAPPER.writeValueAsString(value);
58+
} catch (JsonProcessingException e) {
59+
return value.toString();
60+
}
61+
}
62+
1563
/**
1664
* Convert a map to a JSON String.
1765
*

src/main/java/com/twilio/rest/assistants/v1/Knowledge.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,10 +69,10 @@ public static class AssistantsV1ServiceCreatePolicyRequest {
6969
@JsonProperty("policy_details")
7070
@Getter
7171
@Setter
72-
private Map<String, Object> policyDetails;
72+
private Object policyDetails;
7373

7474
public String getPolicyDetails() {
75-
return Converter.mapToJson(policyDetails);
75+
return Converter.objectToJson(policyDetails);
7676
}
7777

7878
@JsonInclude(JsonInclude.Include.NON_EMPTY)

src/main/java/com/twilio/rest/assistants/v1/Tool.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,10 +70,10 @@ public static class AssistantsV1ServiceCreatePolicyRequest {
7070
@JsonProperty("policy_details")
7171
@Getter
7272
@Setter
73-
private Map<String, Object> policyDetails;
73+
private Object policyDetails;
7474

7575
public String getPolicyDetails() {
76-
return Converter.mapToJson(policyDetails);
76+
return Converter.objectToJson(policyDetails);
7777
}
7878

7979
@JsonInclude(JsonInclude.Include.NON_EMPTY)

src/main/java/com/twilio/rest/content/v1/Content.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,7 @@ public static class CallToActionAction {
191191
@JsonProperty("type")
192192
@Getter
193193
@Setter
194-
private Content.CallToActionActionType type;
194+
private CallToActionActionType type;
195195

196196
@JsonInclude(JsonInclude.Include.NON_EMPTY)
197197
@JsonProperty("title")
@@ -261,7 +261,7 @@ public static class QuickReplyAction {
261261
@JsonProperty("type")
262262
@Getter
263263
@Setter
264-
private Content.QuickReplyActionType type;
264+
private QuickReplyActionType type;
265265

266266
@JsonInclude(JsonInclude.Include.NON_EMPTY)
267267
@JsonProperty("title")
@@ -313,7 +313,7 @@ public static class CardAction {
313313
@JsonProperty("type")
314314
@Getter
315315
@Setter
316-
private Content.CardActionType type;
316+
private CardActionType type;
317317

318318
@JsonInclude(JsonInclude.Include.NON_EMPTY)
319319
@JsonProperty("title")
@@ -489,7 +489,7 @@ public static class CarouselAction {
489489
@JsonProperty("type")
490490
@Getter
491491
@Setter
492-
private Content.CarouselActionType type;
492+
private CarouselActionType type;
493493

494494
@JsonInclude(JsonInclude.Include.NON_EMPTY)
495495
@JsonProperty("title")
@@ -769,7 +769,7 @@ public static class AuthenticationAction {
769769
@JsonProperty("type")
770770
@Getter
771771
@Setter
772-
private Content.AuthenticationActionType type;
772+
private AuthenticationActionType type;
773773

774774
@JsonInclude(JsonInclude.Include.NON_EMPTY)
775775
@JsonProperty("copy_code_text")

src/main/java/com/twilio/rest/iam/v1/ApiKeyUpdater.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,12 @@
2525
import com.twilio.http.Response;
2626
import com.twilio.http.TwilioRestClient;
2727
import com.twilio.rest.Domains;
28-
import java.util.Map;
2928

3029
public class ApiKeyUpdater extends Updater<ApiKey> {
3130

3231
private String pathSid;
3332
private String friendlyName;
34-
private Map<String, Object> policy;
33+
private Object policy;
3534

3635
public ApiKeyUpdater(final String pathSid) {
3736
this.pathSid = pathSid;
@@ -42,7 +41,7 @@ public ApiKeyUpdater setFriendlyName(final String friendlyName) {
4241
return this;
4342
}
4443

45-
public ApiKeyUpdater setPolicy(final Map<String, Object> policy) {
44+
public ApiKeyUpdater setPolicy(final Object policy) {
4645
this.policy = policy;
4746
return this;
4847
}
@@ -87,7 +86,7 @@ private void addPostParams(final Request request) {
8786
request.addPostParam("FriendlyName", friendlyName);
8887
}
8988
if (policy != null) {
90-
request.addPostParam("Policy", Converter.mapToJson(policy));
89+
request.addPostParam("Policy", Converter.objectToJson(policy));
9190
}
9291
}
9392
}

src/main/java/com/twilio/rest/iam/v1/NewApiKeyCreator.java

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,15 +26,13 @@
2626
import com.twilio.http.Response;
2727
import com.twilio.http.TwilioRestClient;
2828
import com.twilio.rest.Domains;
29-
import java.util.Map;
30-
import java.util.Map;
3129

3230
public class NewApiKeyCreator extends Creator<NewApiKey> {
3331

3432
private String accountSid;
3533
private String friendlyName;
3634
private NewApiKey.Keytype keyType;
37-
private Map<String, Object> policy;
35+
private Object policy;
3836

3937
public NewApiKeyCreator(final String accountSid) {
4038
this.accountSid = accountSid;
@@ -55,7 +53,7 @@ public NewApiKeyCreator setKeyType(final NewApiKey.Keytype keyType) {
5553
return this;
5654
}
5755

58-
public NewApiKeyCreator setPolicy(final Map<String, Object> policy) {
56+
public NewApiKeyCreator setPolicy(final Object policy) {
5957
this.policy = policy;
6058
return this;
6159
}
@@ -110,7 +108,7 @@ private void addPostParams(final Request request) {
110108
request.addPostParam("KeyType", keyType.toString());
111109
}
112110
if (policy != null) {
113-
request.addPostParam("Policy", Converter.mapToJson(policy));
111+
request.addPostParam("Policy", Converter.objectToJson(policy));
114112
}
115113
}
116114
}

src/main/java/com/twilio/rest/knowledge/v1/Knowledge.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,10 +69,10 @@ public static class KnowledgeV1ServiceCreatePolicyRequest {
6969
@JsonProperty("policy_details")
7070
@Getter
7171
@Setter
72-
private Map<String, Object> policyDetails;
72+
private Object policyDetails;
7373

7474
public String getPolicyDetails() {
75-
return Converter.mapToJson(policyDetails);
75+
return Converter.objectToJson(policyDetails);
7676
}
7777

7878
@JsonInclude(JsonInclude.Include.NON_EMPTY)

src/main/java/com/twilio/rest/marketplace/v1/InstalledAddOnCreator.java

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -26,14 +26,12 @@
2626
import com.twilio.http.Response;
2727
import com.twilio.http.TwilioRestClient;
2828
import com.twilio.rest.Domains;
29-
import java.util.Map;
30-
import java.util.Map;
3129

3230
public class InstalledAddOnCreator extends Creator<InstalledAddOn> {
3331

3432
private String availableAddOnSid;
3533
private Boolean acceptTermsOfService;
36-
private Map<String, Object> configuration;
34+
private Object configuration;
3735
private String uniqueName;
3836

3937
public InstalledAddOnCreator(
@@ -58,9 +56,7 @@ public InstalledAddOnCreator setAcceptTermsOfService(
5856
return this;
5957
}
6058

61-
public InstalledAddOnCreator setConfiguration(
62-
final Map<String, Object> configuration
63-
) {
59+
public InstalledAddOnCreator setConfiguration(final Object configuration) {
6460
this.configuration = configuration;
6561
return this;
6662
}
@@ -130,7 +126,7 @@ private void addPostParams(final Request request) {
130126
if (configuration != null) {
131127
request.addPostParam(
132128
"Configuration",
133-
Converter.mapToJson(configuration)
129+
Converter.objectToJson(configuration)
134130
);
135131
}
136132
if (uniqueName != null) {

src/main/java/com/twilio/rest/marketplace/v1/InstalledAddOnUpdater.java

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,21 +25,18 @@
2525
import com.twilio.http.Response;
2626
import com.twilio.http.TwilioRestClient;
2727
import com.twilio.rest.Domains;
28-
import java.util.Map;
2928

3029
public class InstalledAddOnUpdater extends Updater<InstalledAddOn> {
3130

3231
private String pathSid;
33-
private Map<String, Object> configuration;
32+
private Object configuration;
3433
private String uniqueName;
3534

3635
public InstalledAddOnUpdater(final String pathSid) {
3736
this.pathSid = pathSid;
3837
}
3938

40-
public InstalledAddOnUpdater setConfiguration(
41-
final Map<String, Object> configuration
42-
) {
39+
public InstalledAddOnUpdater setConfiguration(final Object configuration) {
4340
this.configuration = configuration;
4441
return this;
4542
}
@@ -91,7 +88,7 @@ private void addPostParams(final Request request) {
9188
if (configuration != null) {
9289
request.addPostParam(
9390
"Configuration",
94-
Converter.mapToJson(configuration)
91+
Converter.objectToJson(configuration)
9592
);
9693
}
9794
if (uniqueName != null) {

src/main/java/com/twilio/rest/messaging/v2/ChannelsSender.java

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,6 @@
3131
import java.io.InputStream;
3232
import java.net.URI;
3333
import java.util.List;
34-
import java.util.Map;
35-
import java.util.Map;
3634
import java.util.Objects;
3735
import lombok.Getter;
3836
import lombok.Setter;
@@ -58,7 +56,7 @@ public static class MessagingV2ChannelsSenderConfiguration {
5856
@JsonProperty("verification_method")
5957
@Getter
6058
@Setter
61-
private ChannelsSender.VerificationMethodEnum verificationMethod;
59+
private VerificationMethodEnum verificationMethod;
6260

6361
@JsonInclude(JsonInclude.Include.NON_EMPTY)
6462
@JsonProperty("verification_code")
@@ -96,7 +94,7 @@ public static class MessagingV2ChannelsSenderWebhook {
9694
@JsonProperty("callback_method")
9795
@Getter
9896
@Setter
99-
private ChannelsSender.CallbackMethodEnum callbackMethod;
97+
private CallbackMethodEnum callbackMethod;
10098

10199
@JsonInclude(JsonInclude.Include.NON_EMPTY)
102100
@JsonProperty("fallback_url")
@@ -108,7 +106,7 @@ public static class MessagingV2ChannelsSenderWebhook {
108106
@JsonProperty("fallback_method")
109107
@Getter
110108
@Setter
111-
private ChannelsSender.FallbackMethodEnum fallbackMethod;
109+
private FallbackMethodEnum fallbackMethod;
112110

113111
@JsonInclude(JsonInclude.Include.NON_EMPTY)
114112
@JsonProperty("status_callback_url")
@@ -164,10 +162,10 @@ public static class MessagingV2ChannelsSenderProfile {
164162
@JsonProperty("emails")
165163
@Getter
166164
@Setter
167-
private Map<String, Object> emails;
165+
private Object emails;
168166

169167
public String getEmails() {
170-
return Converter.mapToJson(emails);
168+
return Converter.objectToJson(emails);
171169
}
172170

173171
@JsonInclude(JsonInclude.Include.NON_EMPTY)
@@ -186,10 +184,10 @@ public String getEmails() {
186184
@JsonProperty("websites")
187185
@Getter
188186
@Setter
189-
private Map<String, Object> websites;
187+
private Object websites;
190188

191189
public String getWebsites() {
192-
return Converter.mapToJson(websites);
190+
return Converter.objectToJson(websites);
193191
}
194192

195193
public static MessagingV2ChannelsSenderProfile fromJson(

0 commit comments

Comments
 (0)