* @return a T object.
*/
public <T> T send(Request<T> request) {
if (request == null) {
throw new CommunicationErrorException("Request cannot be null.");
}
RequestUtil.validate(request);
@SuppressWarnings("unchecked")
T response = (T) dispatchByMethod(request);