Package com.sun.msv.schematron.jarv

Source Code of com.sun.msv.schematron.jarv.RelamesFactoryImpl$ThrowController

/*
* @(#)$Id$
*
* Copyright 2002 Sun Microsystems, Inc. All Rights Reserved.
*
* This software is the proprietary information of Sun Microsystems, Inc. 
* Use is subject to license terms.
*
*/
package com.sun.msv.schematron.jarv;

import java.io.IOException;

import javax.xml.parsers.SAXParserFactory;

import org.iso_relax.verifier.Schema;
import org.iso_relax.verifier.VerifierConfigurationException;
import org.iso_relax.verifier.VerifierFactory;
import org.xml.sax.EntityResolver;
import org.xml.sax.InputSource;
import org.xml.sax.Locator;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;

import com.sun.msv.grammar.Grammar;
import com.sun.msv.reader.GrammarReaderController;
import com.sun.msv.schematron.reader.SRELAXNGReader;

/**
* {@link org.iso_relax.verifier.VerifierFactory} implementation
* for RELAX NG + schematron.
*
* @author
*      Kohsuke Kawaguchi (kohsuke.kawaguchi@sun.com)
*/
public class RelamesFactoryImpl extends VerifierFactory {
   
    private final SAXParserFactory factory;
   
    /**
     * Constructor for RelamesFactoryImpl.
     * @param factory
     *      This parser factory will be used to read RELAX NG schemas.
     */
    public RelamesFactoryImpl(SAXParserFactory _factory) {
        this.factory = _factory;
        factory.setNamespaceAware(true);    // people often forget this
    }

    /**
     * Constructor for RelamesFactoryImpl.
     * Use the default {@link SAXParserFactory} to parse schemas.
     */
    public RelamesFactoryImpl() {
        this.factory = SAXParserFactory.newInstance();
        factory.setNamespaceAware(true);
    }

    public Schema compileSchema(InputSource source)
        throws VerifierConfigurationException, SAXException, IOException {
       
        try {
            Grammar grammar = SRELAXNGReader.parse( source, factory, new ThrowController() );
            if(grammar==null)
                throw new VerifierConfigurationException("unable to parse schema:"+source.getSystemId());
            return new RelamesSchemaImpl(grammar);
        } catch( WrapperException e ) {
            throw e.e;  // re-throw
        }
       
    }

    // TODO: merge this with FactoryImpl

    /** wrapper exception so that we can throw it from the GrammarReaderController. */
    private static class WrapperException extends RuntimeException {
        WrapperException( SAXException e ) {
            super(e.getMessage());
            this.e = e;
        }
        public final SAXException e;
    }
    private class ThrowController implements GrammarReaderController {
        public void warning( Locator[] locs, String errorMessage ) {}
        public void error( Locator[] locs, String errorMessage, Exception nestedException ) {
            for( int i=0; i<locs.length; i++ )
                if(locs[i]!=null)
                    throw new WrapperException(
                        new SAXParseException(errorMessage,locs[i],nestedException));
           
            throw new WrapperException(
                new SAXException(errorMessage,nestedException));
        }
        public InputSource resolveEntity( String p, String s ) throws SAXException, IOException {
            EntityResolver er = RelamesFactoryImpl.this.getEntityResolver();
            if(er==null)      return null;
            else              return er.resolveEntity(p,s);
        }
    }
}
TOP

Related Classes of com.sun.msv.schematron.jarv.RelamesFactoryImpl$ThrowController

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.