Buggy code:
public class JspReader { protected Mark current = null ; String master = null ; Vector sourceFiles = new Vector ( ) ; int currFileId = 0 ; int size = 0 ; private JspCompilationContext context ; public String getFile ( int fileid ) { } protected int registerSourceFile ( String file ) { } protected int unregisterSourceFile ( String file ) { } public void pushFile ( String name , String encoding ) throws FileNotFoundException , ParseException { } private void pushFile ( File file , String encoding ) throws FileNotFoundException , ParseException { if ( encoding == null ) { encoding = "8859_1" ; } String longName = ( ( context ) == null ) ? file . getAbsolutePath ( ) : context . getRealPath ( file . toString ( ) ) ; int fileid = registerSourceFile ( longName ) ; if ( fileid == ( - 1 ) ) throw new ParseException ( Constants . getString ( "jsp.error.file.already.registered" , new Object [ ] { file } ) ) ; currFileId = fileid ; InputStreamReader reader = null ; try { if ( ( context ) == null ) reader = new InputStreamReader ( new FileInputStream ( file ) , encoding ) ; else { String fileName = context . getRealPath ( file . toString ( ) ) ; <START_BUG> InputStream in = new FileInputStream ( fileName ) ; <END_BUG> if ( in == null ) throw new FileNotFoundException ( fileName ) ; try { reader = new InputStreamReader ( in , encoding ) ; } catch ( Throwable ex ) { throw new FileNotFoundException ( ( ( fileName + ":<seq2seq4repair_space>" ) + ( ex . getMessage ( ) ) ) ) ; } } CharArrayWriter caw = new CharArrayWriter ( ) ; char [ ] buf = new char [ 1024 ] ; for ( int i = 0 ; ( i = reader . read ( buf ) ) != ( - 1 ) ; ) caw . write ( buf , 0 , i ) ; caw . close ( ) ; if ( ( current ) == null ) { current = new Mark ( this , caw . toCharArray ( ) , fileid , getFile ( fileid ) , file . getParent ( ) , encoding ) ; } else { current . pushStream ( caw . toCharArray ( ) , fileid , getFile ( fileid ) , file . getParent ( ) , encoding ) ; } } catch ( FileNotFoundException fnfe ) { throw fnfe ; } catch ( Throwable ex ) { System . err . println ( "STACK<seq2seq4repair_space>TRACE:<seq2seq4repair_space>" ) ; ex . printStackTrace ( ) ; popFile ( ) ; throw new ParseException ( Constants . getString ( "jsp.error.file.cannot.read" , new Object [ ] { file } ) ) ; } finally { if ( reader != null ) { try { reader . close ( ) ; } catch ( Exception any ) { } } } } public boolean popFile ( ) throws ParseException { } protected JspReader ( String file , JspCompilationContext ctx , String encoding ) throws FileNotFoundException , ParseException { } public static JspReader createJspReader ( String file , JspCompilationContext ctx , String encoding ) throws FileNotFoundException , ParseException { } public boolean hasMoreInput ( ) throws ParseException { } public int nextChar ( ) throws ParseException { } String nextContent ( ) { } char [ ] getChars ( Mark start , Mark stop ) throws ParseException { } public int peekChar ( ) { } public Mark mark ( ) { } public void reset ( Mark mark ) { } public boolean matchesIgnoreCase ( String string ) throws ParseException { } public boolean matches ( String string ) throws ParseException { } public void advance ( int n ) throws ParseException { } public int skipSpaces ( ) throws ParseException { } public Mark skipUntil ( String limit ) throws ParseException { } final boolean isSpace ( ) { } public String parseToken ( boolean quoted ) throws ParseException { } private void parseAttributeValue ( Hashtable into ) throws ParseException { } public Hashtable parseTagAttributesBean ( ) throws ParseException { } public Hashtable parseTagAttributes ( ) throws ParseException { } public void parseParamTag ( Hashtable into ) throws ParseException { } public void parsePluginParamTag ( Hashtable into ) throws ParseException { } private void parseParams ( Hashtable into ) throws ParseException { } private boolean isDelimiter ( ) throws ParseException { } }

Fix:
InputStream in = context . getResourceAsStream ( file . toString ( ) ) ;