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

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
53 changes: 46 additions & 7 deletions src/main/java/org/zendesk/client/v2/Zendesk.java
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@
import org.asynchttpclient.Response;
import org.asynchttpclient.request.body.multipart.FilePart;
import org.asynchttpclient.request.body.multipart.StringPart;
import org.jetbrains.annotations.VisibleForTesting;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.zendesk.client.v2.model.AgentRole;
Expand Down Expand Up @@ -165,7 +166,8 @@ private Zendesk(
String username,
String password,
Map<String, String> headers,
int cbpPageSize) {
int cbpPageSize,
Function<ObjectMapper, ObjectMapper> objectMapperCustomizer) {
this.logger = LoggerFactory.getLogger(Zendesk.class);
this.closeClient = client == null;
this.oauthToken = null;
Expand All @@ -188,15 +190,16 @@ private Zendesk(
headers.putIfAbsent(USER_AGENT_HEADER, new DefaultUserAgent().toString());
this.headers = Collections.unmodifiableMap(headers);
this.cbpPageSize = cbpPageSize;
this.mapper = createMapper();
this.mapper = createMapper(objectMapperCustomizer);
}

private Zendesk(
AsyncHttpClient client,
String url,
String oauthToken,
Map<String, String> headers,
int cbpPageSize) {
int cbpPageSize,
Function<ObjectMapper, ObjectMapper> objectMapperCustomizer) {
this.logger = LoggerFactory.getLogger(Zendesk.class);
this.closeClient = client == null;
this.realm = null;
Expand All @@ -212,7 +215,7 @@ private Zendesk(
headers.putIfAbsent(USER_AGENT_HEADER, new DefaultUserAgent().toString());
this.headers = Collections.unmodifiableMap(headers);
this.cbpPageSize = cbpPageSize;
this.mapper = createMapper();
this.mapper = createMapper(objectMapperCustomizer);
}

//////////////////////////////////////////////////////////////////////
Expand Down Expand Up @@ -4206,7 +4209,19 @@ private TemplateUri getSearchUri(Map<String, Object> params, String query, Strin
return templateUri;
}

/**
* This method did not allow for any customization and its public visibility was likely only for
* tests. If you rely on it for some reason, please report a new issue to discuss options. To
* customize the ObjectMapper, use the {@link Builder#customizeObjectMapper(Function)} method.
*/
@Deprecated(since = "1.3.0", forRemoval = true)
public static ObjectMapper createMapper() {
return createMapper(Function.identity());
}

@VisibleForTesting
public static ObjectMapper createMapper(
Function<ObjectMapper, ObjectMapper> objectMapperCustomizer) {
ObjectMapper mapper = new ObjectMapper();
mapper.enable(SerializationFeature.WRITE_ENUMS_USING_TO_STRING);
mapper.enable(DeserializationFeature.READ_ENUMS_USING_TO_STRING);
Expand All @@ -4215,6 +4230,11 @@ public static ObjectMapper createMapper() {
mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
mapper.setDateFormat(new StdDateFormat());
mapper.enable(DeserializationFeature.USE_LONG_FOR_INTS);
return objectMapperCustomizer.apply(mapper);
}

@VisibleForTesting
ObjectMapper getMapper() {
return mapper;
}

Expand Down Expand Up @@ -4279,11 +4299,13 @@ public static class Builder {
private String token = null;
private String oauthToken = null;
private int cbpPageSize = DEFAULT_CBP_PAGE_SIZE;
private Function<ObjectMapper, ObjectMapper> objectMapperCustomizer;
private final Map<String, String> headers;

public Builder(String url) {
this.url = url;
this.headers = new HashMap<>();
objectMapperCustomizer = Function.identity();
}

public Builder setClient(AsyncHttpClient client) {
Expand Down Expand Up @@ -4339,13 +4361,30 @@ public Builder setCbpPageSize(int cbpPageSize) {
return this;
}

/**
* Customize the ObjectMapper used by this Zendesk client. Careful, the customizer function will
* be applied after the default configuration for this library.
*
* @param customizer a function that takes an ObjectMapper and returns a customized ObjectMapper
* @return this builder instance
* @since 1.3.0
*/
public Builder customizeObjectMapper(Function<ObjectMapper, ObjectMapper> customizer) {
if (customizer != null) {
this.objectMapperCustomizer = customizer;
}
return this;
}

public Zendesk build() {
if (token != null) {
return new Zendesk(client, url, username + "/token", token, headers, cbpPageSize);
return new Zendesk(
client, url, username + "/token", token, headers, cbpPageSize, objectMapperCustomizer);
} else if (oauthToken != null) {
return new Zendesk(client, url, oauthToken, headers, cbpPageSize);
return new Zendesk(client, url, oauthToken, headers, cbpPageSize, objectMapperCustomizer);
}
return new Zendesk(client, url, username, password, headers, cbpPageSize);
return new Zendesk(
client, url, username, password, headers, cbpPageSize, objectMapperCustomizer);
}
}
}
3 changes: 2 additions & 1 deletion src/test/java/org/zendesk/client/v2/SearchTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
import java.io.UnsupportedEncodingException;
import java.util.Arrays;
import java.util.Random;
import java.util.function.Function;
import org.apache.commons.text.RandomStringGenerator;
import org.junit.After;
import org.junit.Before;
Expand Down Expand Up @@ -46,7 +47,7 @@ public class SearchTest {

private Zendesk client;
// use a mapper that is identical to what the client will use
private ObjectMapper objectMapper = Zendesk.createMapper();
private ObjectMapper objectMapper = Zendesk.createMapper(Function.identity());

@Before
public void setUp() throws Exception {
Expand Down
3 changes: 2 additions & 1 deletion src/test/java/org/zendesk/client/v2/UserTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.function.Function;
import org.apache.commons.text.RandomStringGenerator;
import org.junit.After;
import org.junit.Before;
Expand Down Expand Up @@ -50,7 +51,7 @@ public class UserTest {

private Zendesk client;
// use a mapper that is identical to what the client will use
private ObjectMapper objectMapper = Zendesk.createMapper();
private ObjectMapper objectMapper = Zendesk.createMapper(Function.identity());

@Before
public void setUp() throws Exception {
Expand Down
26 changes: 26 additions & 0 deletions src/test/java/org/zendesk/client/v2/ZendeskTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package org.zendesk.client.v2;

import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.MatcherAssert.assertThat;

import com.fasterxml.jackson.annotation.JsonInclude;
import org.junit.Test;

public class ZendeskTest {

@Test
public void customizeMapper() {
var builder = new Zendesk.Builder("dummy");
builder.customizeObjectMapper(
om -> om.setSerializationInclusion(JsonInclude.Include.NON_EMPTY));

try (var zd = builder.build()) {
var mapper = zd.getMapper();
assertThat(
mapper.getSerializationConfig().getDefaultPropertyInclusion(),
is(
JsonInclude.Value.construct(
JsonInclude.Include.NON_EMPTY, JsonInclude.Include.NON_EMPTY)));
}
}
}
3 changes: 2 additions & 1 deletion src/test/java/org/zendesk/client/v2/model/LocaleTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.MatcherAssert.assertThat;

import java.util.function.Function;
import org.junit.Test;
import org.zendesk.client.v2.Zendesk;

Expand All @@ -19,7 +20,7 @@ public void testLocaleDeserialization() throws Exception {
+ "\"updated_at\": \"2023-09-21T19:23:16Z\""
+ "}";

Locale locale = Zendesk.createMapper().readValue(json, Locale.class);
Locale locale = Zendesk.createMapper(Function.identity()).readValue(json, Locale.class);

assertThat(locale.getUrl(), is("https://acme.zendesk.com/api/v2/locales/en-US.json"));
assertThat(locale.getId(), is(1L));
Expand Down
5 changes: 3 additions & 2 deletions src/test/java/org/zendesk/client/v2/model/StatusTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.ObjectReader;
import java.util.function.Function;
import org.junit.Test;
import org.zendesk.client.v2.Zendesk;

Expand All @@ -15,15 +16,15 @@
public class StatusTest {
@Test
public void serializeAsLowercase() throws Exception {
ObjectMapper mapper = Zendesk.createMapper();
ObjectMapper mapper = Zendesk.createMapper(Function.identity());
assertThat(
mapper.writeValueAsString(Status.PENDING),
is("\"" + Status.PENDING.name().toLowerCase() + "\""));
}

@Test
public void deserializeFromLowercase() throws Exception {
ObjectMapper mapper = Zendesk.createMapper();
ObjectMapper mapper = Zendesk.createMapper(Function.identity());
ObjectReader reader = mapper.readerFor(Status.class);
assertThat(
reader.readValue("\"" + Status.PENDING.name().toLowerCase() + "\""),
Expand Down
7 changes: 4 additions & 3 deletions src/test/java/org/zendesk/client/v2/model/TicketTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import java.util.Calendar;
import java.util.Date;
import java.util.Random;
import java.util.function.Function;
import org.junit.Test;
import org.zendesk.client.v2.Zendesk;

Expand All @@ -17,7 +18,7 @@ public class TicketTest {

@Test
public void serializeWithNullSafeUpdate() throws Exception {
ObjectMapper mapper = Zendesk.createMapper();
ObjectMapper mapper = Zendesk.createMapper(Function.identity());
Ticket ticket = createSampleTicket();
assertThat(mapper.writeValueAsString(ticket))
.doesNotContain("\"safe_update\"")
Expand All @@ -26,7 +27,7 @@ public void serializeWithNullSafeUpdate() throws Exception {

@Test
public void serializeWithFalseSafeUpdate() throws Exception {
ObjectMapper mapper = Zendesk.createMapper();
ObjectMapper mapper = Zendesk.createMapper(Function.identity());
Ticket ticket = createSampleTicket();
ticket.setSafeUpdate(false);
assertThat(mapper.writeValueAsString(ticket))
Expand All @@ -36,7 +37,7 @@ public void serializeWithFalseSafeUpdate() throws Exception {

@Test
public void serializeWithSafeUpdate() throws Exception {
ObjectMapper mapper = Zendesk.createMapper();
ObjectMapper mapper = Zendesk.createMapper(Function.identity());
Ticket ticket = createSampleTicket();
ticket.setSafeUpdate(true);
assertThat(mapper.writeValueAsString(ticket))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.function.Function;
import org.apache.commons.text.RandomStringGenerator;
import org.junit.*;
import org.zendesk.client.v2.Zendesk;
Expand All @@ -31,7 +32,7 @@ public class TimeZoneTest {
@Rule public WireMockClassRule zendeskApiMock = zendeskApiClass;

private Zendesk client;
private final ObjectMapper objectMapper = Zendesk.createMapper();
private final ObjectMapper objectMapper = Zendesk.createMapper(Function.identity());

@Before
public void setUp() {
Expand Down