in src/main/java/org/apache/tomcat/jakartaee/Migration.java [302:344]
private void migrateArchiveStreaming(InputStream src, OutputStream dest) throws IOException {
try (ZipArchiveInputStream srcZipStream = new ZipArchiveInputStream(CloseShieldInputStream.wrap(src));
ZipArchiveOutputStream destZipStream = new ZipArchiveOutputStream(CloseShieldOutputStream.wrap(dest))) {
ZipArchiveEntry srcZipEntry;
CRC32 crc32 = new CRC32();
while ((srcZipEntry = srcZipStream.getNextZipEntry()) != null) {
String srcName = srcZipEntry.getName();
if (isSignatureFile(srcName)) {
logger.log(Level.WARNING, sm.getString("migration.skipSignatureFile", srcName));
continue;
}
if (srcZipEntry.getSize() > ZIP64_THRESHOLD_LENGTH ||
srcZipEntry.getCompressedSize() > ZIP64_THRESHOLD_LENGTH) {
logger.log(Level.WARNING, sm.getString("migration.jdk8303866", srcName));
} else {
// Avoid JDK bug - https://bugs.openjdk.org/browse/JDK-8303866
if (srcZipEntry.getExtraField(EXTRA_FIELD_ZIP64) != null) {
srcZipEntry.removeExtraField(EXTRA_FIELD_ZIP64);
}
}
String destName = profile.convert(srcName);
if (srcZipEntry.getMethod() == ZipEntry.STORED) {
ByteArrayOutputStream tempBuffer = new ByteArrayOutputStream((int) (srcZipEntry.getSize() * 1.05));
migrateStream(srcName, srcZipStream, tempBuffer);
crc32.update(tempBuffer.toByteArray(), 0, tempBuffer.size());
MigrationZipArchiveEntry destZipEntry = new MigrationZipArchiveEntry(srcZipEntry);
destZipEntry.setName(destName);
destZipEntry.setSize(tempBuffer.size());
destZipEntry.setCrc(crc32.getValue());
destZipStream.putArchiveEntry(destZipEntry);
tempBuffer.writeTo(destZipStream);
destZipStream.closeArchiveEntry();
crc32.reset();
} else {
MigrationZipArchiveEntry destZipEntry = new MigrationZipArchiveEntry(srcZipEntry);
destZipEntry.setName(destName);
destZipStream.putArchiveEntry(destZipEntry);
migrateStream(srcName, srcZipStream, destZipStream);
destZipStream.closeArchiveEntry();
}
}
}
}