docs: public InputStream get(String resource, CacheMissHandler ... handlers) throws CacheException {
  		InputStream stream = null;
  		if(Strings.isValid(resource)) {
  			stream = storage.retrieve(resource);		
  			if(stream == null) {
  				logger.trace("cache miss for resource '{}'...", resource);
  				if(handlers != null) {				
  					lookup:
  					for(CacheMissHandler handler : handlers) {
  						logger.trace("... attempting retrieval of '{}' using handler of class '{}'", resource, handler.getClass().getSimpleName());
  						try (InputStream input = handler.getAsStream(); OutputStream output = storage.store(resource)) {
  							if(input != null) {
  								long copied = Streams.copy(input,  output);
  								logger.trace("... stored {} bytes for resource '{}'", copied, resource);
  								break lookup;
  							} else {
  								logger.trace("... resource '{}' not found", resource);
  								continue lookup;
  							}
  						} catch (IOException e) {
  							logger.warn("I/O error trying to retrieve resource '" + resource + "' with handler of class '" + handler.getClass().getSimpleName() +"'", e);
  						}					
  					}
  				}
  				logger.trace("retrieving resource from storage");
  				stream = storage.retrieve(resource);			
  			}
  		}
  		return stream;
  	}