Buggy code:
public final class CatalogueClient { private final Map < String , Downloader > downloaders = new HashMap < String , Downloader > ( ) ; private final DigesterLoader descriptionDigesterLoader ; private final DigesterLoader catalogueDigesterLoader ; private final DigesterLoader serieDigesterLoader ; private final DigesterLoader singleDataSetDigesterLoader ; private final AsyncHttpClient httpClient ; public CatalogueClient ( ) { } public void registerDownloader ( Downloader downloader ) { } public void registerDownloader ( String protocol , Downloader downloader ) { } public < D extends Downloader > D lookupDownloader ( String protocol ) { } public CatalogueDescription discover ( String uri , Parameter ... parameters ) { } public CatalogueDescription discover ( URI uri , Parameter ... parameters ) { } public Catalogue getCatalogue ( String uri , Parameter ... parameters ) { } public Catalogue getCatalogue ( URI uri , Parameter ... parameters ) { } public Serie getSerie ( String uri , Parameter ... parameters ) { } public Serie getSerie ( URI uri , Parameter ... parameters ) { } public DataSet getDataSet ( String uri , Parameter ... parameters ) { } public DataSet getDataSet ( URI uri , Parameter ... parameters ) { } < CE extends CatalogueEntity > CE invoke ( final DigesterLoader digesterLoader , String uri , Parameter ... parameters ) { } < CE extends CatalogueEntity > CE invoke ( final DigesterLoader digesterLoader , URI uri , Parameter ... parameters ) { } void downloadFile ( File targetDir , List < URI > fileUris , final DownloadHandler handler ) { if ( ! ( targetDir . exists ( ) ) ) { if ( ! ( targetDir . mkdirs ( ) ) ) { throw new RuntimeException ( String . format ( "Impossible<seq2seq4repair_space>to<seq2seq4repair_space>create<seq2seq4repair_space>'%s'<seq2seq4repair_space>directory,<seq2seq4repair_space>please<seq2seq4repair_space>make<seq2seq4repair_space>sure<seq2seq4repair_space>you<seq2seq4repair_space>have<seq2seq4repair_space>enough<seq2seq4repair_space>permissions" , targetDir ) ) ; } } CallbackDownloadHandler callback = new CallbackDownloadHandler ( handler ) ; Iterator < URI > fileUrisIterator = fileUris . iterator ( ) ; while ( ! ( callback . isDownloaded ( ) ) ) { if ( ! ( fileUrisIterator . hasNext ( ) ) ) { <START_BUG> callback . onFatal ( "Download<seq2seq4repair_space>not<seq2seq4repair_space>possible,<seq2seq4repair_space>none<seq2seq4repair_space>of<seq2seq4repair_space>the<seq2seq4repair_space>submitted<seq2seq4repair_space>URIs<seq2seq4repair_space>succeeded" ) ; <END_BUG> return ; } URI fileUri = fileUrisIterator . next ( ) ; Downloader downloader = lookupDownloader ( fileUri . getScheme ( ) ) ; if ( downloader != null ) { downloader . download ( targetDir , fileUri , callback ) ; } else { callback . onWarning ( String . format ( "'%s'<seq2seq4repair_space>protocol<seq2seq4repair_space>is<seq2seq4repair_space>not<seq2seq4repair_space>supported,<seq2seq4repair_space>impossible<seq2seq4repair_space>to<seq2seq4repair_space>download<seq2seq4repair_space>%s" , fileUri . getScheme ( ) , fileUri ) ) ; } } } }

Fix:
callback . onFatal ( "DataSet<seq2seq4repair_space>media<seq2seq4repair_space>file<seq2seq4repair_space>download<seq2seq4repair_space>not<seq2seq4repair_space>possible,<seq2seq4repair_space>none<seq2seq4repair_space>of<seq2seq4repair_space>the<seq2seq4repair_space>submitted<seq2seq4repair_space>URIs<seq2seq4repair_space>succeeded" ) ;