001 package org.kuali.ole.ingest;
002
003 import org.apache.commons.io.IOUtils;
004 import org.kuali.ole.exception.ParseException;
005 import org.kuali.ole.exception.XmlErrorHandler;
006 import org.xml.sax.SAXException;
007
008 import javax.xml.XMLConstants;
009 import javax.xml.transform.Source;
010 import javax.xml.transform.stream.StreamSource;
011 import javax.xml.validation.Schema;
012 import javax.xml.validation.SchemaFactory;
013 import javax.xml.validation.Validator;
014 import java.io.ByteArrayInputStream;
015 import java.io.IOException;
016 import java.io.InputStream;
017
018 /**
019 * ProfileXMLSchemaValidator is for validating ProfileAttributeSchema against W3C Xml Schema standards
020 */
021 public class ProfileXMLSchemaValidator {
022
023 private static final String PROFILE_SCHEMA_FILE = "profileBuilder.xsd";
024
025 /**
026 * This method returns True/False
027 * This method check the ProfileAttributeSchema against W3C Xml Schema,If it matches it return True else return False.
028 * @param inputStream
029 * @return boolean
030 * @throws ParseException
031 * @throws IOException
032 * @throws SAXException
033 */
034 public boolean validateContentsAgainstSchema(InputStream inputStream)
035 throws ParseException, IOException, SAXException {
036 try {
037 SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
038 Source schemaSource = null;
039 schemaSource = new StreamSource(getFileContents());
040 Schema schema = null;
041 schema = factory.newSchema(schemaSource);
042 Validator validator = schema.newValidator();
043 validator.setErrorHandler(new XmlErrorHandler());
044 validator.validate(new StreamSource(inputStream));
045 return true;
046 }
047 catch(Exception ex){
048 //TODO: logging required
049 }
050 return false;
051 }
052
053 /**
054 * This method returns fileContent as InputStream.
055 * This method get the fileContent based on Profile schema file.
056 * @return profileXmlFile
057 */
058 private InputStream getFileContents(){
059 byte[] profileByteArray;
060 ByteArrayInputStream profileXmlFile=null;
061 try{
062 profileByteArray = IOUtils.toByteArray(getClass().getResourceAsStream(PROFILE_SCHEMA_FILE));
063 profileXmlFile = new ByteArrayInputStream(profileByteArray);
064 }
065 catch(Exception e){
066 //TODO: logging required
067 }
068 return profileXmlFile;
069 }
070 }