private void setMetaData(String msg) { IRequestablePage responsePage = getResponsePage(); if (responsePage instanceof Page) { ((Page) responsePage).setMetaData(HtmlValidationResultKey.KEY, msg); } }
/** * Called when no known {@link DocType} could be determined from the * {@code responseBuffer}. The markup is not validated. * * @param responseBuffer * the response markup that could not be validated. */ protected void onUnknownDocType(AppendingStringBuffer response) { IRequestablePage responsePage = getResponsePage(); String detectionString = getFirstCharacters(response, 128); if (responsePage != null) { log.info("No or unknown DOCTYPE detected for page {}: {}", responsePage.getClass().getName(), detectionString); } else { log.info("No or unknown DOCTYPE detected: {}", detectionString); } }
private ValidationReport validateMarkup(String response, DocType docType) throws Exception { IRequestablePage responsePage = getResponsePage(); ValidationReport report = new ValidationReport(configuration, responsePage, response, docType); PropertyMapBuilder properties = new PropertyMapBuilder(); properties.put(ValidateProperty.ERROR_HANDLER, report); Schema schema = docType.createSchema(); Validator validator = schema .createValidator(properties.toPropertyMap()); XMLReader reader = docType.createParser(); reader.setContentHandler(validator.getContentHandler()); try { reader.parse(new InputSource(new StringReader(response))); } catch (SAXParseException parseError) { report.fatalError(parseError); } return report; }
/** * Called when the validated markup does not contain any errors. * * @param responseBuffer * the validated response markup * @param report * the validation report */ protected void onValidMarkup(AppendingStringBuffer responseBuffer, ValidationReport report) { IRequestablePage responsePage = getResponsePage(); DocType doctype = getDocType(responseBuffer); log.info("Markup for {} is valid {}", responsePage != null ? responsePage.getClass().getName() : "<unable to determine page class>", doctype.name()); String head = report.getHeadMarkup(); String body = report.getBodyMarkup(); int indexOfHeadClose = responseBuffer.lastIndexOf("</head>"); responseBuffer.insert(indexOfHeadClose, head); int indexOfBodyClose = responseBuffer.lastIndexOf("</body>"); responseBuffer.insert(indexOfBodyClose, body); }
public AppendingStringBuffer filter(AppendingStringBuffer responseBuffer) { IRequestablePage responsePage = getResponsePage(); if (responsePage != null && !(responsePage instanceof Page) || RequestCycle.get().find(AjaxRequestTarget.class) != null) { return responseBuffer; } DocType docType = getDocType(responseBuffer); if (docType == null) { setMetaData("Unknown doctype"); onUnknownDocType(responseBuffer); return responseBuffer; } try { ValidationReport report = validateMarkup(responseBuffer.toString(), docType); if (report.isValid()) { setMetaData("Markup is valid " + docType); onValidMarkup(responseBuffer, report); } else { setMetaData("Markup is invalid " + docType); onInvalidMarkup(responseBuffer, report); } } catch (Exception e) { log.error(e.toString(), e); } return responseBuffer; }