Interface ChecksumPolicy
public interface ChecksumPolicy
A checksum policy gets employed by repository connectors to validate the integrity of a downloaded file. For each
downloaded file, a checksum policy instance is obtained and presented with the available checksums to conclude
whether the download is valid or not. The following pseudo-code illustrates the usage of a checksum policy by a
repository connector in some more detail (the retry logic has been omitted for the sake of brevity):
void validateChecksums() throws ChecksumFailureException {
for (checksum : checksums) {
switch (checksum.state) {
case MATCH:
if (policy.onChecksumMatch(...)) {
return;
}
break;
case MISMATCH:
policy.onChecksumMismatch(...);
break;
case ERROR:
policy.onChecksumError(...);
break;
}
}
policy.onNoMoreChecksums();
}
void downloadFile() throws Exception {
...
policy = newChecksumPolicy();
try {
validateChecksums();
} catch (ChecksumFailureException e) {
if (!policy.onTransferChecksumFailure(...)) {
throw e;
}
}
}
Checksum policies might be stateful and are generally not thread-safe.
-
Nested Class Summary
Nested ClassesModifier and TypeInterfaceDescriptionstatic enumEnum denoting origin of checksum. -
Method Summary
Modifier and TypeMethodDescriptionvoidonChecksumError(String algorithm, ChecksumPolicy.ChecksumKind kind, org.eclipse.aether.transfer.ChecksumFailureException exception) Signals an error while computing the local checksum value or retrieving the checksum value from the remote repository.booleanonChecksumMatch(String algorithm, ChecksumPolicy.ChecksumKind kind) Signals a match between the locally computed checksum value and the checksum value declared by the remote repository.voidonChecksumMismatch(String algorithm, ChecksumPolicy.ChecksumKind kind, org.eclipse.aether.transfer.ChecksumFailureException exception) Signals a mismatch between the locally computed checksum value and the checksum value declared by the remote repository.voidSignals that all available checksums have been processed.booleanonTransferChecksumFailure(org.eclipse.aether.transfer.ChecksumFailureException exception) Signals that (even after a potential retry) checksum validation has failed.voidSignals that the download is being retried after a previously thrownChecksumFailureExceptionthat isretry-worthy.
-
Method Details
-
onChecksumMatch
Signals a match between the locally computed checksum value and the checksum value declared by the remote repository.- Parameters:
algorithm- The name of the checksum algorithm being used, must not benull.kind- A field providing further details about the checksum.- Returns:
trueto accept the download as valid and stop further validation,falseto continue validation with the next checksum.
-
onChecksumMismatch
void onChecksumMismatch(String algorithm, ChecksumPolicy.ChecksumKind kind, org.eclipse.aether.transfer.ChecksumFailureException exception) throws org.eclipse.aether.transfer.ChecksumFailureException Signals a mismatch between the locally computed checksum value and the checksum value declared by the remote repository. A simple policy would just rethrow the provided exception. More sophisticated policies could update their internal state and defer a conclusion until all available checksums have been processed.- Parameters:
algorithm- The name of the checksum algorithm being used, must not benull.kind- A field providing further details about the checksum.exception- The exception describing the checksum mismatch, must not benull.- Throws:
org.eclipse.aether.transfer.ChecksumFailureException- If the checksum validation is to be failed. If the method returns normally, validation continues with the next checksum.
-
onChecksumError
void onChecksumError(String algorithm, ChecksumPolicy.ChecksumKind kind, org.eclipse.aether.transfer.ChecksumFailureException exception) throws org.eclipse.aether.transfer.ChecksumFailureException Signals an error while computing the local checksum value or retrieving the checksum value from the remote repository.- Parameters:
algorithm- The name of the checksum algorithm being used, must not benull.kind- A field providing further details about the checksum.exception- The exception describing the checksum error, must not benull.- Throws:
org.eclipse.aether.transfer.ChecksumFailureException- If the checksum validation is to be failed. If the method returns normally, validation continues with the next checksum.
-
onNoMoreChecksums
Signals that all available checksums have been processed.- Throws:
org.eclipse.aether.transfer.ChecksumFailureException- If the checksum validation is to be failed. If the method returns normally, the download is assumed to be valid.
-
onTransferRetry
void onTransferRetry()Signals that the download is being retried after a previously thrownChecksumFailureExceptionthat isretry-worthy. Policies that maintain internal state will usually have to reset some of this state at this point to prepare for a new round of validation. -
onTransferChecksumFailure
Signals that (even after a potential retry) checksum validation has failed. A policy could opt to merely log this issue or insist on rejecting the downloaded file as unusable.- Parameters:
exception- The exception that was thrown from a prior call toonChecksumMismatch(String, ChecksumKind, ChecksumFailureException),onChecksumError(String, ChecksumKind, ChecksumFailureException)oronNoMoreChecksums().- Returns:
trueto accept the download nevertheless and let artifact resolution succeed,falseto reject the transferred file as unusable.
-