MarvinSketch : JSON-RPC

Marvin supports protocol versions 1.0 and 1.1. JSON Schema Service Descriptor can also be used for runtime parameter discovery.

The response MUST be a textual representation of any finite combinations of java.lang.Boolean, java.lang.Number, java.lang.String, java.lang.Object[], java.util.Map<java.lang.String, java.lang.Object>, and null

Calling JSON-RPC Service from API
	JsonServiceDescriptor descriptor = new JsonServiceDescriptor();
    descriptor.setURL("http://api.geonames.org/");
    descriptor.setMethodName("citiesJSON");
    
    descriptor.addArgument(ServiceArgument.createArgument("north", new Double(0)));
    descriptor.addArgument(ServiceArgument.createArgument("south", new Double(0)));
    descriptor.addArgument(ServiceArgument.createArgument("east", new Double(0)));
    descriptor.addArgument(ServiceArgument.createArgument("west", new Double(0)));
    descriptor.addArgument(ServiceArgument.createArgument("language", ""));
    descriptor.addArgument(ServiceArgument.createArgument("username", ""));

    Object result = null;
    try {
        result = descriptor.getServiceHandler().callService(descriptor, 44.1, -9.9, 22.4, 55.2, "en", "demo");
    } catch (ServiceException e) {
        System.err.println("Service call failed.");
    }
    StringBuilder builder = new StringBuilder();
    Object[] array = (Object[]) ((Map<String, Object>)result).get("geonames");
    for(Object obj : array) {
        builder.append("Synchronized call returned: " + ((Map<String, Object>)obj).get("name") + "\n");
    }
    System.out.println(builder.toString());

    descriptor.getServiceHandler().callService(descriptor, new AsyncCallback<Map<String, Object>>() {

        @Override
        public void onSuccess(Map<String, Object> result) {
            StringBuilder builder = new StringBuilder();
            Object[] array = (Object[]) result.get("geonames");
            for(Object obj : array) {
                builder.append("Asynchronous call returned: " + ((Map<String, Object>)obj).get("name") + "\n");
            }
            System.out.println(builder.toString());
        }

        @Override
        public void onFailure(ServiceException caught) {
            System.err.println("Asynchronous call failed.");
        }
        
    }, 44.1, -9.9, 22.4, 55.2, "en", "demo");