in src/main/java/org/apache/jackrabbit/filevault/maven/packaging/mojo/ValidatePackageMojo.java [190:228]
private void validateInputStream(ValidationMessagePrinter validationHelper, @Nullable InputStream inputStream, Path entryPath, Path packagePath, ArchiveValidationContext context,
ValidationExecutor executor) throws IOException, SAXException, ParserConfigurationException, MojoFailureException {
Collection<ValidationViolation> messages = new LinkedList<>();
if (entryPath.startsWith(Constants.META_INF)) {
messages.addAll(executor.validateMetaInf(inputStream, Paths.get(Constants.META_INF).relativize(entryPath), packagePath.resolve(Constants.META_INF)));
} else if (entryPath.startsWith(Constants.ROOT_DIR)) {
// strip off jcr_root
Path relativeJcrPath = Paths.get(Constants.ROOT_DIR).relativize(entryPath);
messages.addAll(executor.validateJcrRoot(inputStream, relativeJcrPath, packagePath.resolve(Constants.ROOT_DIR)));
// in case this is a subpackage
if (inputStream != null && entryPath.getFileName().toString().endsWith(VaultMojo.PACKAGE_EXT) && !skipSubPackageValidation) {
Path subPackagePath = context.getPackageRootPath().resolve(entryPath);
// can't use archive.getSubArchive because that holds the wrong metadata
try (Archive subArchive = new ZipStreamArchive(inputStream)) {
subArchive.open(true);
// assure this is a real content package
if (subArchive.getJcrRoot() == null) {
getLog().debug("ZIP entry " + subPackagePath + " is no subpackage as it is lacking the mandatory jcr_root entry");
} else {
getLog().info("Start validating sub package '" + subPackagePath + "'...");
SubPackageInArchiveValidationContext subPackageValidationContext = new SubPackageInArchiveValidationContext(context, subArchive, subPackagePath, resolver);
ValidationExecutor subPackageValidationExecutor = validationExecutorFactory
.createValidationExecutor(subPackageValidationContext, true, enforceRecursiveSubpackageValidation, getEffectiveValidatorSettingsForPackage(subPackageValidationContext.getProperties().getId(), true));
if (subPackageValidationExecutor != null) {
validationHelper.printUsedValidators(getLog(), executor, subPackageValidationContext, false);
validateArchive(validationHelper, subArchive, subPackagePath, subPackageValidationContext, subPackageValidationExecutor);
} else {
getLog().debug("Skip validating sub package as no validator is interested in it.");
}
getLog().info("End validating sub package.");
}
}
}
} else {
messages.add(new ValidationViolation(ValidationMessageSeverity.WARN, "Found unexpected file outside of " + Constants.ROOT_DIR + " and " + Constants.META_INF, entryPath, packagePath, null, 0,0, null));
}
validationHelper.printMessages(messages, buildContext, packagePath);
}