Skip to content

Commit 3e25c46

Browse files
committed
Add support for sending IReturnVoid API's sync
1 parent 7421b34 commit 3e25c46

File tree

3 files changed

+73
-26
lines changed

3 files changed

+73
-26
lines changed

src/AndroidClient/client/src/androidTest/java/net/servicestack/client/tests/TestServiceTests.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88

99
import net.servicestack.client.ConnectionFilter;
1010
import net.servicestack.client.ExceptionFilter;
11+
import net.servicestack.client.HttpMethods;
1112
import net.servicestack.client.JsonServiceClient;
1213
import net.servicestack.client.Log;
1314
import net.servicestack.client.MimeTypes;
@@ -233,6 +234,22 @@ public void test_does_handle_auth_failure() {
233234
assertEquals(errorCode,401);
234235
}
235236

237+
public void test_Can_send_ReturnVoid(){
238+
final List<String> sentMethods = new ArrayList<>();
239+
client.RequestFilter = new ConnectionFilter() {
240+
@Override
241+
public void exec(HttpURLConnection conn) {
242+
sentMethods.add(conn.getRequestMethod());
243+
}
244+
};
245+
246+
client.send(new HelloReturnVoid().setId(1));
247+
assertEquals(HttpMethods.Post, sentMethods.get(sentMethods.size() - 1));
248+
client.post(new HelloReturnVoid().setId(3));
249+
assertEquals(HttpMethods.Post, sentMethods.get(sentMethods.size() - 1));
250+
client.put(new HelloReturnVoid().setId(2));
251+
assertEquals(HttpMethods.Put, sentMethods.get(sentMethods.size() - 1));
252+
}
236253
/* TEST HELPERS */
237254

238255
public static HelloAllTypes createHelloAllTypes(){

src/AndroidClient/client/src/main/java/net/servicestack/client/JsonServiceClient.java

Lines changed: 31 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -264,6 +264,13 @@ public <TResponse> TResponse send(IReturn<TResponse> request) {
264264
request.getResponseType());
265265
}
266266

267+
@Override
268+
public void send(IReturnVoid request) {
269+
String httpMethod = GetSendMethod(request);
270+
send(createRequest(Utils.combinePath(replyUrl, typeName(request)), httpMethod, request),
271+
IReturnVoid.class);
272+
}
273+
267274
public <TResponse> TResponse send(HttpURLConnection req, Object responseClass) {
268275
try {
269276
Class resClass = responseClass instanceof Class ? (Class)responseClass : null;
@@ -286,12 +293,20 @@ public <TResponse> TResponse send(HttpURLConnection req, Object responseClass) {
286293

287294
InputStream is = req.getInputStream();
288295

289-
if (ResponseFilter != null) {
290-
ResponseFilter.exec(req);
296+
if (resClass == IReturnVoid.class){
297+
Utils.readBytesToEnd(is);
298+
return null;
291299
}
292-
if (GlobalResponseFilter != null) {
300+
301+
if (ResponseFilter != null)
302+
ResponseFilter.exec(req);
303+
if (GlobalResponseFilter != null)
293304
GlobalResponseFilter.exec(req);
294-
}
305+
306+
if (resClass == byte[].class)
307+
return (TResponse)Utils.readBytesToEnd(req);
308+
if (resClass == String.class)
309+
return (TResponse)Utils.readToEnd(is, UTF8.name());
295310

296311
if (Log.isDebugEnabled()) {
297312
String json = Utils.readToEnd(is, UTF8.name());
@@ -371,6 +386,12 @@ public <TResponse> TResponse post(IReturn<TResponse> request) {
371386
request.getResponseType());
372387
}
373388

389+
@Override
390+
public void post(IReturnVoid request) {
391+
send(createRequest(Utils.combinePath(replyUrl, typeName(request)), HttpMethods.Post, request),
392+
IReturnVoid.class);
393+
}
394+
374395
@Override
375396
public <TResponse> TResponse post(String path, Object request, Class responseType) {
376397
return send(
@@ -411,6 +432,12 @@ public <TResponse> TResponse put(IReturn<TResponse> request) {
411432
request.getResponseType());
412433
}
413434

435+
@Override
436+
public void put(IReturnVoid request) {
437+
send(createRequest(Utils.combinePath(replyUrl, typeName(request)), HttpMethods.Put, request),
438+
IReturnVoid.class);
439+
}
440+
414441
@Override
415442
public <TResponse> TResponse put(String path, Object request, Class responseType) {
416443
return send(

src/AndroidClient/client/src/main/java/net/servicestack/client/ServiceClient.java

Lines changed: 25 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -9,30 +9,33 @@
99

1010
public interface ServiceClient {
1111
<TResponse> TResponse send(IReturn<TResponse> request);
12+
void send(IReturnVoid request);
1213

13-
public <TResponse> TResponse get(IReturn<TResponse> request);
14-
public <TResponse> TResponse get(IReturn<TResponse> request, Map<String,String> queryParams);
15-
public <TResponse> TResponse get(String path, Class responseType);
16-
public <TResponse> TResponse get(String path, Type responseType);
17-
public HttpURLConnection get(String path);
14+
<TResponse> TResponse get(IReturn<TResponse> request);
15+
<TResponse> TResponse get(IReturn<TResponse> request, Map<String,String> queryParams);
16+
<TResponse> TResponse get(String path, Class responseType);
17+
<TResponse> TResponse get(String path, Type responseType);
18+
HttpURLConnection get(String path);
1819

19-
public <TResponse> TResponse post(IReturn<TResponse> request);
20-
public <TResponse> TResponse post(String path, Object request, Class responseType);
21-
public <TResponse> TResponse post(String path, Object request, Type responseType);
22-
public <TResponse> TResponse post(String path, byte[] requestBody, String contentType, Class responseType);
23-
public <TResponse> TResponse post(String path, byte[] requestBody, String contentType, Type responseType);
24-
public HttpURLConnection post(String path, byte[] requestBody, String contentType);
20+
<TResponse> TResponse post(IReturn<TResponse> request);
21+
void post(IReturnVoid request);
22+
<TResponse> TResponse post(String path, Object request, Class responseType);
23+
<TResponse> TResponse post(String path, Object request, Type responseType);
24+
<TResponse> TResponse post(String path, byte[] requestBody, String contentType, Class responseType);
25+
<TResponse> TResponse post(String path, byte[] requestBody, String contentType, Type responseType);
26+
HttpURLConnection post(String path, byte[] requestBody, String contentType);
2527

26-
public <TResponse> TResponse put(IReturn<TResponse> request);
27-
public <TResponse> TResponse put(String path, Object request, Class responseType);
28-
public <TResponse> TResponse put(String path, Object request, Type responseType);
29-
public <TResponse> TResponse put(String path, byte[] requestBody, String contentType, Class responseType);
30-
public <TResponse> TResponse put(String path, byte[] requestBody, String contentType, Type responseType);
31-
public HttpURLConnection put(String path, byte[] requestBody, String contentType);
28+
<TResponse> TResponse put(IReturn<TResponse> request);
29+
void put(IReturnVoid request);
30+
<TResponse> TResponse put(String path, Object request, Class responseType);
31+
<TResponse> TResponse put(String path, Object request, Type responseType);
32+
<TResponse> TResponse put(String path, byte[] requestBody, String contentType, Class responseType);
33+
<TResponse> TResponse put(String path, byte[] requestBody, String contentType, Type responseType);
34+
HttpURLConnection put(String path, byte[] requestBody, String contentType);
3235

33-
public <TResponse> TResponse delete(IReturn<TResponse> request);
34-
public <TResponse> TResponse delete(IReturn<TResponse> request, Map<String,String> queryParams);
35-
public <TResponse> TResponse delete(String path, Class responseType);
36-
public <TResponse> TResponse delete(String path, Type responseType);
37-
public HttpURLConnection delete(String path);
36+
<TResponse> TResponse delete(IReturn<TResponse> request);
37+
<TResponse> TResponse delete(IReturn<TResponse> request, Map<String,String> queryParams);
38+
<TResponse> TResponse delete(String path, Class responseType);
39+
<TResponse> TResponse delete(String path, Type responseType);
40+
HttpURLConnection delete(String path);
3841
}

0 commit comments

Comments
 (0)