private void validateInputStream()

in src/main/java/org/apache/jackrabbit/filevault/maven/packaging/mojo/ValidatePackageMojo.java [183:221]


    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);
    }