private boolean isTransportImplementingService(Class<?> transportClass, Class<?> service) {
		for (Type genericInterface : transportClass.getGenericInterfaces()) {
			// Transport has to be declared as parametrised type
			if (genericInterface instanceof ParameterizedType) {
				ParameterizedType parameterizedType = (ParameterizedType) genericInterface;
				if (Transport.class.equals(parameterizedType.getRawType())) {
					//Check that it has exactly one generic type and it is required class
					Type[] actualTypeArguments = resolveTypes(parameterizedType.getActualTypeArguments());
					if (actualTypeArguments.length == 1 && actualTypeArguments[0].equals(service)) {
						return true;
					}
				}
			}
		}
		if (transportClass.getSuperclass() != null) {
			processAndResolveType(transportClass.getGenericSuperclass(), transportClass.getSuperclass());
			return isTransportImplementingService(transportClass.getSuperclass(), service);
		} else {
			return false;
		}
	}