Source:
<code>public static FileObject getFileObject( String vfsFilename, VariableSpace space, FileSystemOptions fsOptions ) throws KettleFileException { try { FileSystemManager fsManager = getInstance().getFileSystemManager(); boolean relativeFilename = true; String[] initialSchemes = fsManager.getSchemes(); relativeFilename = checkForScheme( initialSchemes, relativeFilename, vfsFilename, space, fsOptions ); int timeOut = timeOutLimit; boolean hasScheme = vfsFilename != null && vfsFilename.contains( "://" ); while ( relativeFilename && hasScheme && timeOut > 0 ) { String[] schemes = fsManager.getSchemes(); try { Thread.sleep( timeToSleepStep ); timeOut -= timeToSleepStep; <START> relativeFilename = checkForScheme( schemes, relativeFilename, vfsFilename, space, fsOptions ); <END> } catch ( InterruptedException e ) { relativeFilename = false; Thread.currentThread().interrupt(); break; } } String filename; if ( vfsFilename.startsWith( "\\\\" ) ) { File file = new File( vfsFilename ); filename = file.toURI().toString(); } else { if ( relativeFilename ) { File file = new File( vfsFilename ); filename = file.getAbsolutePath(); } else { filename = vfsFilename; } } if ( fsOptions != null ) { return fsManager.resolveFile( filename, fsOptions ); } else { return fsManager.resolveFile( filename ); } } catch ( IOException e ) { throw new KettleFileException( "Unable to get VFS File object for filename '" + cleanseFilename( vfsFilename ) + "' : " + e.getMessage(), e ); } }</code><technical_language>this while loop check repeatedly for scheme is fsManager.getSchemes()? .checkForSchemes() me-- looping time find scheme is present, calling buildFsOptions</technical_language>

Target:
public static FileObject getFileObject( String vfsFilename, VariableSpace space, FileSystemOptions fsOptions ) throws KettleFileException { try { fsOptionsForScheme = fsOptions; FileSystemManager fsManager = getInstance().getFileSystemManager(); boolean relativeFilename = true; String[] initialSchemes = fsManager.getSchemes(); relativeFilename = checkForScheme( initialSchemes, relativeFilename, vfsFilename, space, fsOptionsForScheme ); int timeOut = TIMEOUT_LIMIT; boolean hasScheme = vfsFilename != null && vfsFilename.contains( "://" ); while ( relativeFilename && hasScheme && timeOut > 0 ) { String[] schemes = fsManager.getSchemes(); try { Thread.sleep( TIME_TO_SLEEP_STEP ); timeOut -= TIME_TO_SLEEP_STEP; relativeFilename = checkForScheme( schemes, relativeFilename, vfsFilename, space, fsOptionsForScheme ); } catch ( InterruptedException e ) { relativeFilename = false; Thread.currentThread().interrupt(); break; } } String filename; if ( vfsFilename.startsWith( "\\\\" ) ) { File file = new File( vfsFilename ); filename = file.toURI().toString(); } else { if ( relativeFilename ) { File file = new File( vfsFilename ); filename = file.getAbsolutePath(); } else { filename = vfsFilename; } } if ( fsOptionsForScheme != null ) { return fsManager.resolveFile( filename, fsOptionsForScheme ); } else { return fsManager.resolveFile( filename ); } } catch ( IOException e ) { throw new KettleFileException( "Unable to get VFS File object for filename '" + cleanseFilename( vfsFilename ) + "' : " + e.getMessage(), e ); } }