blob: ed67cf41d332521aec392887259a29bbaee7e99a [file]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.qetest;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.xml.XMLConstants;
import javax.xml.transform.sax.SAXSource;
import javax.xml.validation.Schema;
import javax.xml.validation.SchemaFactory;
import javax.xml.validation.Validator;
import org.xml.sax.ErrorHandler;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;
/**
* A utility class, to do XML Schema 1.0 validation.
*
* @author mukulg@apache.org
* @version $Id$
*/
public class XSValidate implements ErrorHandler {
private String xmlFilePath = null;
private String xsdFilePath = null;
private List validationMessages = null;
private static final String SCHEMA_FULL_CHECKING_FEATURE_ID =
"http://apache.org/xml/features/validation/schema-full-checking";
public XSValidate(String xmlFilePath, String xsdFilePath) {
this.xmlFilePath = xmlFilePath;
this.xsdFilePath = xsdFilePath;
validationMessages = new ArrayList();
}
public List validate() {
try {
SchemaFactory sfFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
sfFactory.setFeature(SCHEMA_FULL_CHECKING_FEATURE_ID, true);
sfFactory.setErrorHandler(this);
Schema schema = sfFactory.newSchema(new SAXSource(new InputSource(xsdFilePath)));
Validator validator = schema.newValidator();
validator.setErrorHandler(this);
validator.validate(new SAXSource(new InputSource(xmlFilePath)));
}
catch (SAXException ex) {
validationMessages.add("SAXException: " + ex.getMessage());
}
catch (IOException ex) {
validationMessages.add("IOException: " + ex.getMessage());
}
return validationMessages;
}
public void error(SAXParseException saxParseEx) throws SAXException {
String systemId = saxParseEx.getSystemId();
String[] sysIdParts = systemId.split("/");
String saxParseMesg = saxParseEx.getMessage();
validationMessages.add("[Error] " + sysIdParts[sysIdParts.length - 1] + ":" + saxParseEx.getLineNumber() + ":" +
saxParseEx.getColumnNumber() + ":" + saxParseMesg);
}
public void fatalError(SAXParseException saxParseEx) throws SAXException {
String systemId = saxParseEx.getSystemId();
String[] sysIdParts = systemId.split("/");
validationMessages.add("[Fatal Error] " + sysIdParts[sysIdParts.length - 1] + ":" + saxParseEx.getLineNumber() +
":" + saxParseEx.getColumnNumber() + ":" + saxParseEx.getMessage());
}
public void warning(SAXParseException saxParseEx) throws SAXException {
// NO OP
}
}