JSON-RPC
This manual will give you a walk-through on how to use JSON-RPC.
Introduction
Marvin supports the versions 1.0 and 1.1. of the JSON Schema Service Descriptor. The available operations and parameters of the service are discovered during the run-time.
As the JSON calls are based on the HTTP protocol, the calls can be POST or GET methods. Both are supported by Marvin. Answers of JSON RPC call must be JSON text answers, or the RPC will not work.
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.
Results are handled similarly as described at WSDL/SOAP RPC services.
Calling JSON-RPC Service from API
This is an example of how to handle JSON services via the 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"
);