Skip to content

Commit 75a1ef6

Browse files
authored
Merge pull request #49 from dhis2/configurable-object-mapper
feat: parameterise timeout values and object mapper
2 parents d8e5190 + 8cbd369 commit 75a1ef6

9 files changed

Lines changed: 63 additions & 31 deletions

File tree

android-jackson-model/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<parent>
66
<artifactId>dhis2-java-sdk-pom</artifactId>
77
<groupId>org.hisp.dhis.integration.sdk</groupId>
8-
<version>1.0.0-RC2</version>
8+
<version>1.0.0-RC3-SNAPSHOT</version>
99
</parent>
1010

1111
<modelVersion>4.0.0</modelVersion>

jackson-model/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<parent>
66
<artifactId>dhis2-java-sdk-pom</artifactId>
77
<groupId>org.hisp.dhis.integration.sdk</groupId>
8-
<version>1.0.0-RC2</version>
8+
<version>1.0.0-RC3-SNAPSHOT</version>
99
</parent>
1010

1111
<modelVersion>4.0.0</modelVersion>

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
<groupId>org.hisp.dhis.integration.sdk</groupId>
88
<artifactId>dhis2-java-sdk-pom</artifactId>
99
<packaging>pom</packaging>
10-
<version>1.0.0-RC2</version>
10+
<version>1.0.0-RC3-SNAPSHOT</version>
1111

1212
<name>DHIS2 Java SDK</name>
1313
<url>https://github.com/dhis2/dhis2-java-sdk</url>

sdk/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<parent>
66
<artifactId>dhis2-java-sdk-pom</artifactId>
77
<groupId>org.hisp.dhis.integration.sdk</groupId>
8-
<version>1.0.0-RC2</version>
8+
<version>1.0.0-RC3-SNAPSHOT</version>
99
</parent>
1010
<modelVersion>4.0.0</modelVersion>
1111
<artifactId>dhis2-java-sdk</artifactId>

sdk/src/main/java/org/hisp/dhis/integration/sdk/DefaultDhis2Client.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,11 +54,15 @@ public class DefaultDhis2Client implements Dhis2Client
5454
private final ConverterFactory converterFactory;
5555

5656
DefaultDhis2Client( String apiUrl, SecurityContext securityContext, ConverterFactory converterFactory,
57-
int maxIdleConnections, long keepAliveDuration )
57+
int maxIdleConnections, long keepAliveDuration, long callTimeout, long readTimeout, long writeTimeout,
58+
long connectTimeout )
5859
{
5960
this.apiUrl = apiUrl;
6061
OkHttpClient.Builder httpClientBuilder = new OkHttpClient.Builder()
61-
.connectionPool( new ConnectionPool( maxIdleConnections, keepAliveDuration, TimeUnit.MILLISECONDS ) );
62+
.connectionPool( new ConnectionPool( maxIdleConnections, keepAliveDuration, TimeUnit.MILLISECONDS ) )
63+
.callTimeout( callTimeout, TimeUnit.MILLISECONDS ).readTimeout( readTimeout, TimeUnit.MILLISECONDS )
64+
.writeTimeout( writeTimeout, TimeUnit.MILLISECONDS )
65+
.connectTimeout( connectTimeout, TimeUnit.MILLISECONDS );
6266
httpClient = httpClientBuilder.addInterceptor(
6367
chain -> chain.proceed( securityContext.apply( chain.request() ) ) ).build();
6468
this.converterFactory = converterFactory;

sdk/src/main/java/org/hisp/dhis/integration/sdk/Dhis2ClientBuilder.java

Lines changed: 25 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,15 @@ public class Dhis2ClientBuilder
4242

4343
private final int maxIdleConnections;
4444

45-
private final long keepAliveDuration;
45+
private final long keepAliveDurationMs;
46+
47+
private final long callTimeoutMs;
48+
49+
private final long readTimeoutMs;
50+
51+
private final long writeTimeoutMs;
52+
53+
private final long connectTimeoutMs;
4654

4755
private ConverterFactory converterFactory = new JacksonConverterFactory();
4856

@@ -53,36 +61,42 @@ public static Dhis2ClientBuilder newClient( String baseApiUrl, String username,
5361

5462
public static Dhis2ClientBuilder newClient( String baseApiUrl, String personalAccessToken )
5563
{
56-
return newClient( baseApiUrl, personalAccessToken, 5, 300000 );
64+
return newClient( baseApiUrl, personalAccessToken, 5, 300000, 0, 10000, 10000, 10000 );
5765
}
5866

5967
public static Dhis2ClientBuilder newClient( String baseApiUrl, String username, String password,
60-
int maxIdleConnections, long keepAliveDuration )
68+
int maxIdleConnections, long keepAliveDurationMs )
6169
{
6270
return new Dhis2ClientBuilder( baseApiUrl, new BasicCredentialsSecurityContext( username, password ),
63-
maxIdleConnections, keepAliveDuration );
71+
maxIdleConnections, keepAliveDurationMs, 0, 10000, 10000, 10000 );
6472
}
6573

6674
public static Dhis2ClientBuilder newClient( String baseApiUrl, String personalAccessToken, int maxIdleConnections,
67-
long keepAliveDuration )
75+
long keepAliveDurationMs, long callTimeoutMs, long readTimeoutMs, long writeTimeoutMs, long connectTimeoutMs )
6876
{
6977
return new Dhis2ClientBuilder( baseApiUrl, new PersonalAccessTokenSecurityContext( personalAccessToken ),
70-
maxIdleConnections, keepAliveDuration );
78+
maxIdleConnections, keepAliveDurationMs, callTimeoutMs, readTimeoutMs, writeTimeoutMs, connectTimeoutMs );
7179
}
7280

7381
public static Dhis2ClientBuilder newClient( String baseApiUrl, SecurityContext securityContext,
74-
int maxIdleConnections, long keepAliveDuration )
82+
int maxIdleConnections, long keepAliveDurationMs, long callTimeoutMs, long readTimeoutMs, long writeTimeoutMs,
83+
long connectTimeoutMs )
7584
{
76-
return new Dhis2ClientBuilder( baseApiUrl, securityContext, maxIdleConnections, keepAliveDuration );
85+
return new Dhis2ClientBuilder( baseApiUrl, securityContext, maxIdleConnections, keepAliveDurationMs, callTimeoutMs,
86+
readTimeoutMs, writeTimeoutMs, connectTimeoutMs );
7787
}
7888

7989
private Dhis2ClientBuilder( String baseApiUrl, SecurityContext securityContext, int maxIdleConnections,
80-
long keepAliveDuration )
90+
long keepAliveDurationMs, long callTimeoutMs, long readTimeoutMs, long writeTimeoutMs, long connectTimeout )
8191
{
8292
this.baseApiUrl = baseApiUrl.trim();
8393
this.securityContext = securityContext;
8494
this.maxIdleConnections = maxIdleConnections;
85-
this.keepAliveDuration = keepAliveDuration;
95+
this.keepAliveDurationMs = keepAliveDurationMs;
96+
this.callTimeoutMs = callTimeoutMs;
97+
this.readTimeoutMs = readTimeoutMs;
98+
this.writeTimeoutMs = writeTimeoutMs;
99+
this.connectTimeoutMs = connectTimeout;
86100
}
87101

88102
public Dhis2ClientBuilder withConverterFactory( ConverterFactory converterFactory )
@@ -100,6 +114,6 @@ public Dhis2Client build()
100114
apiPathStringBuilder.append( "/" );
101115
}
102116
return new DefaultDhis2Client( apiPathStringBuilder.toString(), securityContext, converterFactory,
103-
maxIdleConnections, keepAliveDuration );
117+
maxIdleConnections, keepAliveDurationMs, callTimeoutMs, readTimeoutMs, writeTimeoutMs, connectTimeoutMs );
104118
}
105119
}

sdk/src/main/java/org/hisp/dhis/integration/sdk/internal/converter/JacksonConverterFactory.java

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,21 +27,35 @@
2727
*/
2828
package org.hisp.dhis.integration.sdk.internal.converter;
2929

30+
import com.fasterxml.jackson.databind.ObjectMapper;
31+
import com.fasterxml.jackson.datatype.jdk8.Jdk8Module;
3032
import org.hisp.dhis.integration.sdk.api.converter.ConverterFactory;
3133
import org.hisp.dhis.integration.sdk.api.converter.RequestConverter;
3234
import org.hisp.dhis.integration.sdk.api.converter.ResponseConverter;
3335

3436
public class JacksonConverterFactory implements ConverterFactory
3537
{
38+
private final ObjectMapper objectMapper;
39+
40+
public JacksonConverterFactory( ObjectMapper objectMapper )
41+
{
42+
this.objectMapper = objectMapper;
43+
}
44+
45+
public JacksonConverterFactory()
46+
{
47+
this.objectMapper = new ObjectMapper().registerModule( new Jdk8Module().configureAbsentsAsNulls( true ) );
48+
}
49+
3650
@Override
3751
public <T> RequestConverter<T> createRequestConverter( Class<T> requestType )
3852
{
39-
return new JacksonRequestConverter<>(requestType);
53+
return new JacksonRequestConverter<>( requestType, objectMapper );
4054
}
4155

4256
@Override
4357
public <T> ResponseConverter<T> createResponseConverter( Class<T> responseType )
4458
{
45-
return new JacksonResponseConverter<>( responseType );
59+
return new JacksonResponseConverter<>( responseType, objectMapper );
4660
}
4761
}

sdk/src/main/java/org/hisp/dhis/integration/sdk/internal/converter/JacksonRequestConverter.java

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -28,29 +28,28 @@
2828
package org.hisp.dhis.integration.sdk.internal.converter;
2929

3030
import com.fasterxml.jackson.databind.ObjectMapper;
31-
import com.fasterxml.jackson.datatype.jdk8.Jdk8Module;
3231
import org.hisp.dhis.integration.sdk.api.converter.RequestConverter;
3332

3433
import java.io.IOException;
3534

3635
public class JacksonRequestConverter<T> implements RequestConverter<T>
3736
{
38-
private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper().registerModule(
39-
new Jdk8Module().configureAbsentsAsNulls( true ) );
40-
4137
private final Class<T> requestType;
4238

43-
public JacksonRequestConverter( Class<T> requestType )
39+
private final ObjectMapper objectMapper;
40+
41+
public JacksonRequestConverter( Class<T> requestType, ObjectMapper objectMapper )
4442
{
4543
this.requestType = requestType;
44+
this.objectMapper = objectMapper;
4645
}
4746

4847
@Override
4948
public String convert( T requestBody )
5049
{
5150
try
5251
{
53-
return OBJECT_MAPPER.writeValueAsString( requestBody );
52+
return objectMapper.writeValueAsString( requestBody );
5453
}
5554
catch ( IOException e )
5655
{

sdk/src/main/java/org/hisp/dhis/integration/sdk/internal/converter/JacksonResponseConverter.java

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -39,21 +39,22 @@
3939

4040
public class JacksonResponseConverter<T> implements ResponseConverter<T>
4141
{
42-
private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
43-
4442
private final Class<T> returnType;
4543

46-
public JacksonResponseConverter( Class<T> returnType )
44+
private final ObjectMapper objectMapper;
45+
46+
public JacksonResponseConverter( Class<T> returnType, ObjectMapper objectMapper )
4747
{
4848
this.returnType = returnType;
49+
this.objectMapper = objectMapper;
4950
}
5051

5152
@Override
5253
public T convert( ResponseBody responseBody )
5354
{
5455
try
5556
{
56-
return OBJECT_MAPPER.readValue( responseBody.charStream(), returnType );
57+
return objectMapper.readValue( responseBody.charStream(), returnType );
5758
}
5859
catch ( IOException e )
5960
{
@@ -68,7 +69,7 @@ public T convert( ResponseBody responseBody )
6869
@Override
6970
public T convert( List<Map<String, Object>> responseBody )
7071
{
71-
return OBJECT_MAPPER.convertValue( responseBody,
72-
OBJECT_MAPPER.getTypeFactory().constructCollectionLikeType( List.class, returnType ) );
72+
return objectMapper.convertValue( responseBody,
73+
objectMapper.getTypeFactory().constructCollectionLikeType( List.class, returnType ) );
7374
}
7475
}

0 commit comments

Comments
 (0)