protected void doPost()

in src/main/java/org/apache/sling/distribution/servlet/DistributionPackageImporterServlet.java [70:139]


    protected void doPost(SlingHttpServletRequest request, SlingHttpServletResponse response)
            throws ServletException, IOException {

        DistributionPackageImporter distributionPackageImporter = request
                .getResource()
                .adaptTo(DistributionPackageImporter.class);

        String digestAlgorithm = null;
        String digestMessage = null;
        String digestHeader = request.getHeader(DIGEST_HEADER);
        if (isNotEmpty(digestHeader)) {
            log.debug("Found Digest header {}, extracting algorithm and message...", digestHeader);

            Matcher matcher = digestHeaderRegex.matcher(digestHeader);
            if (matcher.matches()) {
                digestAlgorithm = matcher.group(1);
                digestMessage = matcher.group(2);
            } else {
                log.debug("Digest header {} not supported, it doesn't match with expected pattern {}", digestHeader, digestHeaderRegex.pattern());
            }
        }

        final long start = System.currentTimeMillis();
        response.setContentType("application/json");

        InputStream stream;
        if (isNotEmpty(digestAlgorithm) && isNotEmpty(digestMessage)) {
            stream = openDigestInputStream(request.getInputStream(), digestAlgorithm);
        } else {
            stream = request.getInputStream();
        }

        ResourceResolver resourceResolver = request.getResourceResolver();
        try {
            if (request.getParameter("forceError") != null) {
                throw new Exception("manually forced error");
            }

            DistributionPackageInfo distributionPackageInfo = distributionPackageImporter.importStream(resourceResolver, stream);

            long end = System.currentTimeMillis();

            if (isNotEmpty(digestAlgorithm) && isNotEmpty(digestMessage)) {
                String receivedDigestMessage = readDigestMessage((DigestInputStream) stream);
                if (!digestMessage.equalsIgnoreCase(receivedDigestMessage)) {
                    log.error("Error during distribution import: received distribution package is corrupted, expected [{}] but received [{}]",
                            digestMessage, receivedDigestMessage);
                    Map<String, String> kv = new HashMap<String, String>();
                    kv.put("digestAlgorithm", digestAlgorithm);
                    kv.put("expected", digestMessage);
                    kv.put("received", receivedDigestMessage);
                    ServletJsonUtils.writeJson(response, SC_BAD_REQUEST, "Received distribution package is corrupted", kv);
                    return;
                }
            }

            log.info("Package {} imported successfully in {}ms", distributionPackageInfo, end - start);
            ServletJsonUtils.writeJson(response, SC_OK, "package imported successfully", null);

        } catch (final Throwable e) {
            String msg = format("an unexpected error has occurred during distribution import. " +
                            "Error: %s",
                    e.getMessage());
            log.error(msg, e);
            ServletJsonUtils.writeJson(response, SC_INTERNAL_SERVER_ERROR, msg, null);
        } finally {
            long end = System.currentTimeMillis();
            log.debug("Processed package import request in {} ms", end - start);
        }
    }