protected Insight doEvaluateRequest()

in core/src/main/java/org/apache/sling/cms/core/insights/impl/providers/HTMLValdiatorInsightProvider.java [85:138]


    protected Insight doEvaluateRequest(InsightRequest request) throws Exception {
        Insight insight = new Insight(this, request);
        insight.setScored(true);
        PageInsightRequest pageRequest = (PageInsightRequest) request;

        String html = pageRequest.getPageHtml();

        HttpPost httpPost = new HttpPost("http://validator.w3.org/nu/?out=json&showsource=no&level=all");
        httpPost.addHeader("Content-type", "text/html; charset=utf-8");
        HttpEntity htmlEntity = new ByteArrayEntity(html.getBytes(StandardCharsets.UTF_8));
        httpPost.setEntity(htmlEntity);

        I18NDictionary dictionary = i18nProvider.getDictionary(request.getResource().getResourceResolver());

        CloseableHttpResponse response = null;
        JsonReader reader = null;
        try (CloseableHttpClient client = HttpClients.createDefault()) {
            response = client.execute(httpPost);
            HttpEntity entity = response.getEntity();
            reader = Json.createReader(new StringReader(EntityUtils.toString(entity)));
            JsonObject json = reader.readObject();
            log.debug("Loaded response: {}", json);
            JsonArray messages = json.getJsonArray("messages");
            int errors = 0;
            int warnings = 0;
            Set<String> msgSet = new HashSet<>();
            for (int i = 0; i < messages.size(); i++) {
                JsonObject message = messages.getJsonObject(i);
                if ("error".equals(message.getString("type"))) {
                    errors++;
                    String messageStr = message.getString("message");
                    if (!msgSet.contains(messageStr)) {
                        insight.addMessage(Message.danger(messageStr));
                        msgSet.add(messageStr);
                    }
                } else if ("info".equals(message.getString("type")) && message.containsKey("subtype")
                        && "warning".equals(message.getString("subtype"))) {
                    warnings++;
                    String messageStr = message.getString("message");
                    if (!msgSet.contains(messageStr)) {
                        insight.addMessage(Message.warn(messageStr));
                        msgSet.add(messageStr);
                    }
                }
            }
            updateInsight(insight, pageRequest, dictionary, errors, warnings);
        } finally {
            if (reader != null) {
                reader.close();
            }
        }

        return insight;
    }