I tried out the MSV cookbook example and it seems that the Verifier
constructor has changed to use the SAX ErrorHandler instead of 
VerificationERrorHandler.  Attached is a working one.  Hope this helps!


-- 
Miguel A Paraz             <http://mparaz.com>  Mobile: +63-916-423-7922
Imperium Technology, Inc.  <[EMAIL PROTECTED]>    Office: +63-2-812-3155

import com.sun.msv.grammar.Grammar;
import com.sun.msv.reader.util.GrammarLoader;
import com.sun.msv.reader.util.IgnoreController;
import com.sun.msv.verifier.DocumentDeclaration;
import com.sun.msv.verifier.ValidityViolation;
import com.sun.msv.verifier.Verifier;

import javax.xml.parsers.SAXParserFactory;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.io.SAXReader;
import org.dom4j.io.SAXWriter;

import org.xml.sax.ContentHandler;
import org.xml.sax.ErrorHandler;
import org.xml.sax.Locator;
import org.xml.sax.SAXParseException;

import java.net.URL;
import java.io.File;

class MyErrorHandler implements ErrorHandler {

    public void error(SAXParseException e) {
        System.out.println("ERROR:" + e);
    }

    public void fatalError(SAXParseException e) {
        System.out.println("Fatal:" + e);
    }

    public void warning(SAXParseException e) {
        System.out.println("Warning:" + e);
    }

}

public class Schema {

    public static void main(String argv[]) {
        try {
            String filename = argv[0];
            String schema = argv[1];

            URL fileURL = new File(filename).toURL();
            URL schemaURL = new File(schema).toURL();

            SAXReader reader = new SAXReader();
            Document doc = reader.read(fileURL);
            validate(doc, schemaURL.toExternalForm());
        } catch (Exception e) {
            e.printStackTrace(System.err);
        }
    }

    static public void validate(Document doc, String schema)
        throws Exception {

        // Turn on Namespace handling in theJAXP SAXParserFactory
        SAXParserFactory saxFactory = SAXParserFactory.newInstance();
        saxFactory.setNamespaceAware(true);

        // create MSVs DocumentDeclaration by overriding
        // a IgnoreController in an anonyous inner class
        DocumentDeclaration docDeclaration =
            GrammarLoader.loadVGM(schema, new IgnoreController() {

                    public void error(Locator[] locations,
                                      String message,
                                      Exception exception) {
                        System.out.println("ERROR: " + message);
                    }

                    public void error(Locator[] locations, String message) {
                        System.out.println("WARNING: " + message);
                    }
                }, saxFactory);

        // xxx MSV version 20020414 now uses the SAX Error Handler
        MyErrorHandler myErrorHandler = new MyErrorHandler();
        Verifier verifier = new Verifier(docDeclaration, myErrorHandler);

        SAXWriter writer = new SAXWriter((ContentHandler) verifier);
        writer.setErrorHandler(myErrorHandler);

        // validate now!
        writer.write(doc);
        if (verifier.isValid()) {
            System.err.println("The document was valid");
        }
        else {
            System.err.println("The document was not valid");
        }
    }
}

Reply via email to