Source:
@Override public ClientResponse process(ClientConnectionContext ctx) { if (F.isEmpty(name)) throw new IgniteException("Service name can't be empty"); if (F.isEmpty(methodName)) throw new IgniteException("Method name can't be empty"); ServiceDescriptor desc = null; for (ServiceDescriptor desc0 : ctx.kernalContext().service().serviceDescriptors()) { if (name.equals(desc0.name())) { desc = desc0; break; } } if (desc == null) throw new IgniteException("Service not found: " + name); Class<?> svcCls = desc.serviceClass(); ClusterGroupAdapter grp = ctx.kernalContext().cluster().get(); if (ctx.securityContext() != null) grp = (ClusterGroupAdapter)grp.forSubjectId(ctx.securityContext().subject().id()); grp = (ClusterGroupAdapter)(nodeIds.isEmpty() ? grp.forServers() : grp.forNodeIds(nodeIds)); IgniteServices services = grp.services(); if (!keepBinary() && args.length > 0) { for (int i = 0; i < args.length; i++) args[i] = reader.readObject(); } try { Object res; if (PlatformService.class.isAssignableFrom(svcCls)) { PlatformService proxy = services.serviceProxy(name, PlatformService.class, false, timeout); res = proxy.invokeMethod(methodName, keepBinary(), !keepBinary(), args); } else { GridServiceProxy<?> proxy = new GridServiceProxy<>(grp, name, Service.class, false, timeout, ctx.kernalContext()); Method method = resolveMethod(ctx, svcCls); res = proxy.invokeMethod(method, args); } return new ClientObjectResponse(requestId(), res); } catch (PlatformNativeException e) { ctx.kernalContext().log(getClass()).error("Failed to invoke platform service", e); throw new IgniteException("Failed to invoke platform service, see server logs for details"); } catch (Throwable e) { throw new IgniteException(e); } }

Target:
@Override public ClientResponse process(ClientConnectionContext ctx) { if (F.isEmpty(name)) throw new IgniteException("Service name can't be empty"); if (F.isEmpty(methodName)) throw new IgniteException("Method name can't be empty"); ServiceDescriptor desc = findServiceDescriptor(ctx, name); Class<?> svcCls = desc.serviceClass(); ClusterGroupAdapter grp = ctx.kernalContext().cluster().get(); if (ctx.securityContext() != null) grp = (ClusterGroupAdapter)grp.forSubjectId(ctx.securityContext().subject().id()); grp = (ClusterGroupAdapter)(nodeIds.isEmpty() ? grp.forServers() : grp.forNodeIds(nodeIds)); IgniteServices services = grp.services(); if (!keepBinary() && args.length > 0) { for (int i = 0; i < args.length; i++) { if (paramTypeIds != null) reader.readInt(); args[i] = reader.readObject(); } } try { Object res; if (PlatformService.class.isAssignableFrom(svcCls)) { PlatformService proxy = services.serviceProxy(name, PlatformService.class, false, timeout); res = proxy.invokeMethod(methodName, keepBinary(), !keepBinary(), args); } else { GridServiceProxy<?> proxy = new GridServiceProxy<>(grp, name, Service.class, false, timeout, ctx.kernalContext()); Method method = resolveMethod(ctx, svcCls); res = proxy.invokeMethod(method, args); } return new ClientObjectResponse(requestId(), res); } catch (PlatformNativeException e) { ctx.kernalContext().log(getClass()).error("Failed to invoke platform service", e); throw new IgniteException("Failed to invoke platform service, see server logs for details"); } catch (Throwable e) { throw new IgniteException(e); } }