package org.keycloak.protocol.cas;
|
|
import org.glassfish.jaxb.runtime.v2.util.FatalAdapter;
|
import org.w3c.dom.Document;
|
import org.xml.sax.InputSource;
|
import org.xml.sax.SAXException;
|
import org.xml.sax.helpers.DefaultHandler;
|
|
import javax.xml.XMLConstants;
|
import javax.xml.parsers.DocumentBuilder;
|
import javax.xml.parsers.DocumentBuilderFactory;
|
import javax.xml.validation.Schema;
|
import javax.xml.validation.SchemaFactory;
|
import java.io.StringReader;
|
|
public abstract class XMLValidator {
|
private XMLValidator(){}
|
|
public static Schema schemaFromClassPath(String path) throws SAXException {
|
return SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI)
|
.newSchema(XMLValidator.class.getResource(path));
|
}
|
|
/**
|
* Parse XML document and validate against CAS schema
|
*/
|
public static Document parseAndValidate(String xml, Schema schema) throws Exception {
|
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
|
factory.setSchema(schema);
|
factory.setNamespaceAware(true);
|
DocumentBuilder builder = factory.newDocumentBuilder();
|
builder.setErrorHandler(new FatalAdapter(new DefaultHandler()));
|
return builder.parse(new InputSource(new StringReader(xml)));
|
}
|
}
|