code: public AsperaTransaction processTransfer(String transferSpecStr, String bucketName, String key, String fileName, ProgressListener progressListener) {
  		// Generate session id
  		String xferId = UUID.randomUUID().toString();
  	
  		AsperaTransactionImpl asperaTransaction = null;
  
  		try {
  			TransferProgress transferProgress = new TransferProgress();
  
  	        S3ProgressListenerChain listenerChain = new S3ProgressListenerChain(
  	                new TransferProgressUpdatingListener(transferProgress),
  	                progressListener);
  	        
  	        log.trace("AsperaTransferManager.processTransfer >> creating AsperaTransactionImpl " + System.nanoTime());
  	        asperaTransaction = new AsperaTransactionImpl(xferId, bucketName, key, fileName, transferProgress, listenerChain);
  	        log.trace("AsperaTransferManager.processTransfer << creating AsperaTransactionImpl " + System.nanoTime());
  	        asperaFaspManagerWrapper.setAsperaTransaction(asperaTransaction);
  	        
  	        log.trace("AsperaTransferManager.processTransfer >> start transfer " + System.nanoTime());
  			asperaFaspManagerWrapper.startTransfer(xferId, transferSpecStr);
  			log.trace("AsperaTransferManager.processTransfer >> end transfer " + System.nanoTime());
  	
  		} catch (IllegalArgumentException e) {
  			// TODO Auto-generated catch block
  			e.printStackTrace();
  		} catch (SecurityException e1) {
  			// TODO Auto-generated catch block
  			e1.printStackTrace();
  		}
  		
  		return asperaTransaction;
  	}
docs: Process the transfer spec to call the underlying Aspera libraries to begin the transfer
  
  @param transferSpecStr
  @param bucketName
  @param key
  @param fileName
  @return