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