protected void doProcessElements() throws IOException {
JarInputStream jis;
try {
jis = new JarInputStream( jarUrl.openStream() );
}
catch (Exception ze) {
//really should catch IOException but Eclipse is buggy and raise NPE...
log.warn( "Unable to find file (ignored): " + jarUrl, ze );
return;
}
JarEntry entry;
while ( ( entry = jis.getNextJarEntry() ) != null ) {
if ( !entry.isDirectory() ) {
int size;
byte[] tmpByte = new byte[ 4096 ];
byte[] entryBytes = new byte[0];
for ( ; ; ) {
size = jis.read( tmpByte );
if ( size == -1 ) break;
byte[] current = new byte[ entryBytes.length + size ];
System.arraycopy( entryBytes, 0, current, 0, entryBytes.length );
System.arraycopy( tmpByte, 0, current, entryBytes.length, size );
entryBytes = current;
}
//this is bad cause we actually read everything instead of walking it lazily
addElement(
entry.getName(),
new ByteArrayInputStream( entryBytes ),
new ByteArrayInputStream( entryBytes )
);
}
}
jis.close();
}
|