code: public void addFiles(Map<String, Object> zipEntries) throws IOException {
  		logger.debug("adding {} entries to the ZIP file", zipEntries.size());
  		for (String zipEntry : zipEntries.keySet()) {
  			Object value = zipEntries.get(zipEntry);
  			if(value instanceof byte[]) {
  				logger.debug("adding '{}' defined as byte[]", zipEntry);
  				addFile(zipEntry, (byte[])value);
  			} else if(value instanceof InputStream) {
  				logger.debug("adding '{}', defined as InputStream", zipEntry);
  				addFile(zipEntry, (InputStream)value);
  			} else if(value instanceof ByteArrayOutputStream) {
  				logger.debug("adding '{}', defined as ByteArrayOutputStream", zipEntry);
  				addFile(zipEntry, (ByteArrayOutputStream)value);
  			} else if(value instanceof File) {
  				logger.debug("adding '{}', defined as File", zipEntry);
  				addFile(zipEntry, (File)value);
  			} else if(value instanceof String) {
  				logger.debug("adding '{}', defined as String (path)", zipEntry);
  				addFile(zipEntry, (String)value);
  			} else {
  				logger.error("unsupported data type for {}", zipEntry);
  			}
  		}
docs: Adds multiple entries to the ZIP archive, given their names and
  data in a map. The data can be stored as a byte array, as a
  File object, as a ByteArrayOutputStream or as a String (the file
  path), and even be of mixed types: the method will automatically
  switch to the most proper behaviour depending on the object type.
  
  @param zipEntries
  A Map containing zipEntry names and data.
  @throws IOException