I have a java webservice, with some method.
The webservice methods are in this form:
@Webservice(paramNames = {"email", "password", "stayLogged", "idClient"},
public Response startSession(String email, String password, Boolean stayLogged, String idClient) throws Exception {
boolean rC = stayLogged != null && stayLogged.booleanValue();
UserService us = new UserService();
User u = us.getUsersernamePassword(email, password);
if (u == null || u.getActive() != null && !u.getActive().booleanValue()) {
return ErrorResponse.getAccessDenied(id, logger);
}
InfoSession is = null;
String newKey = null;
while (newKey == null) {
newKey = UserService.md5(Math.random() + " " + new Date().getTime());
if (SessionManager.get(newKey) != null) {
newKey = null;
} else {
is = new InfoSession(u, rC, newKey);
if (idClient != null && idClient.toUpperCase().equals("ANDROID")) {
is.setClient("ANDROID");
}
SessionManager.add(newKey, is);
}
}
logger.log(Level.INFO, "New session started: " + newKey + " - User: " + u.getEmail());
return new Response(new InfoSessionJson(newKey, is), null, id);
}
The webservice can receive json-rpc calls,
and the client-side code that can invoke the methods of the webservice, in iOS has this form:
-(void)asynchronousRPCWithMethod:(NSString *)method andParams:(NSArray *)params{
NSLog(@"REMOTE PROCEDURE CALL ON %@", method);
self.rpcMethod = method;
NSMutableString *requestString = [[NSMutableString alloc] init];
//setting method
[requestString appendFormat:@"{\"method\":\"%@\"", method];
//setting params
[requestString appendString:@", \"params\":["];
int max = [params count];
int c = 0;
for (NSString *str in params){
c++;
[requestString appendFormat:@"\"%@\"", str];
if (c==max){
}
else{
[requestString appendString:@", "];
}
}
[requestString appendFormat:@"], \"id\":1}"];
NSLog(@"Request:\n%@", requestString);
NSData *requestData = [NSData dataWithBytes:[requestString UTF8String] length:[requestString length]];
[requestString release];
NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:WEBSITELINK]] autorelease];
[request setHTTPMethod:@"POST"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:requestData];
NSURLConnection *conn = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:NO];
[conn scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSRunLoopCommonModes];
[conn start];
UIApplication *app = [UIApplication sharedApplication];
app.networkActivityIndicatorVisible = YES;
if (conn) {
NSMutableData *data = [[NSMutableData alloc] init];
self.receivedData = data;
[data release];
}
else {
NSError *error = [NSError errorWithDomain:RPCErrorDomain
code:RPCErrorNoConnection
userInfo:nil];
NSLog(@"*** error ***\n%@", error);
/**
* SENT A MESSAGE WITH A ERROR
*/
if ([self.delegate respondsToSelector:@selector(rpcDidFailWithError:)])
[delegate rpcDidFailWithError:error];
}
}
How can I implement the same client side method on Android???
You have to make JSON in the appropriate form with something like
and send it to the server with
HttpPost httppostandIf you need more info about JSON request there are many tutorials.