@Override
public <T, S> ServiceClient<T, S> newServiceClient(GraphName serviceName, String serviceType)
throws ServiceNotFoundException {
GraphName resolvedServiceName = resolveName(serviceName);
URI uri = lookupServiceUri(resolvedServiceName);
if (uri == null) {
throw new ServiceNotFoundException("No such service " + resolvedServiceName + " of type "
+ serviceType);
}
ServiceDescription serviceDescription =
nodeConfiguration.getServiceDescriptionFactory().newFromType(serviceType);
ServiceIdentifier serviceIdentifier = new ServiceIdentifier(resolvedServiceName, uri);
ServiceDeclaration definition = new ServiceDeclaration(serviceIdentifier, serviceDescription);
MessageSerializer<T> requestSerializer = newServiceRequestSerializer(serviceType);
MessageDeserializer<S> responseDeserializer = newServiceResponseDeserializer(serviceType);
return serviceFactory.newClient(definition, requestSerializer, responseDeserializer,
nodeConfiguration.getServiceRequestMessageFactory());
}