Hey,
I think you have to call claim using passing the groups of john.. it will check if john is part of potential owners. If you don't pass it, it will not find john as potential owner:
client.claim(3, "john", groupsJohn, taskOperationResponseHandler );
Demian