|
XSD Validation in Java
Part:
1
2
3
(Continued from previous part...)
Using SAXParserFactory to Load Parsers
Xerces-J package can also be loaded by the SAXParserFactory.newInstance()
method. Here is my SAXValidator.java:
/**
* SAXValidator.java
* Copyright (c) 2002 by Dr. Herong Yang
*/
import java.io.File;
import java.io.IOException;
import javax.xml.parsers.SAXParserFactory;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.ParserConfigurationException;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;
import org.xml.sax.helpers.DefaultHandler;
class SAXValidator {
public static void main(String[] args) {
String schemaFeature
= "http://apache.org/xml/features/validation/schema";
try {
File x = new File(args[0]);
SAXParserFactory f = SAXParserFactory.newInstance();
System.out.println(f.toString());
f.setValidating(true);
f.setFeature(schemaFeature,true);
SAXParser p = f.newSAXParser();
System.out.println(p.toString());
DefaultHandler h = new MyErrorHandler();
p.parse(x,h);
} catch (ParserConfigurationException e) {
System.out.println(e.toString());
} catch (SAXException e) {
System.out.println(e.toString());
} catch (IOException e) {
System.out.println(e.toString());
}
}
private static class MyErrorHandler extends DefaultHandler {
public void warning(SAXParseException e) throws SAXException {
System.out.println("Warning: ");
printInfo(e);
}
public void error(SAXParseException e) throws SAXException {
System.out.println("Error: ");
printInfo(e);
}
public void fatalError(SAXParseException e) throws SAXException {
System.out.println("Fattal error: ");
printInfo(e);
}
private void printInfo(SAXParseException e) {
System.out.println(" Public ID: "+e.getPublicId());
System.out.println(" System ID: "+e.getSystemId());
System.out.println(" Line number: "+e.getLineNumber());
System.out.println(" Column number: "+e.getColumnNumber());
System.out.println(" Message: "+e.getMessage());
}
}
}
Note that the schema feature to the SAXParserFactory object.
Now if you run the program with:
java -cp . SAXValidator dictrionary_invalid_xsd.xml
You will get:
org.apache.crimson.jaxp.SAXParserFactoryImpl@1004901
org.xml.sax.SAXNotRecognizedException: Feature: http://apache.org/xml
/features/validation/schema
Note that the crimson package was loaded from the J2SDK library, and it
doesn't support XSD validation.
But if you run the program with:
java -cp .;\local\xerces-2_3_0\xercesImpl.jar SAXValidator
dictrionary_invalid_xsd.xml
you will get:
org.apache.xerces.jaxp.SAXParserFactoryImpl@f72617
org.apache.xerces.jaxp.SAXParserImpl@173831b
...
Note that the xerces package was loaded, and XSD validation was performed.
Source: Herong's Notes on XML.
Part:
1
2
3
|