1 50 51 package org.apache.excalibur.configuration.validation; 52 53 import java.io.InputStream ; 54 55 import org.apache.avalon.framework.activity.Initializable; 56 import org.apache.avalon.framework.configuration.Configurable; 57 import org.apache.avalon.framework.configuration.Configuration; 58 import org.apache.avalon.framework.configuration.ConfigurationException; 59 import org.apache.avalon.framework.logger.AbstractLogEnabled; 60 import org.iso_relax.verifier.VerifierConfigurationException; 61 import org.iso_relax.verifier.VerifierFactory; 62 import org.xml.sax.SAXParseException ; 63 64 70 public class JarvConfigurationValidatorFactory 71 extends AbstractLogEnabled 72 implements Configurable, Initializable, ConfigurationValidatorFactory 73 { 74 private String m_schemaType; 75 76 private String m_schemaLanguage; 77 78 private String m_verifierFactoryClass; 79 80 private VerifierFactory m_verifierFactory; 81 82 93 public void configure( Configuration configuration ) 94 throws ConfigurationException 95 { 96 m_schemaType = configuration.getAttribute( "schema-type" ); 97 m_schemaLanguage = configuration.getChild( "schema-language" ).getValue( null ); 98 m_verifierFactoryClass = 99 configuration.getChild( "verifier-factory-class" ).getValue( null ); 100 101 if( ( null == m_schemaLanguage && null == m_verifierFactoryClass ) 102 || ( null != m_schemaLanguage && null != m_verifierFactoryClass ) ) 103 { 104 final String msg = "Must specify either schema-language or verifier-factory-class"; 105 106 throw new ConfigurationException( msg ); 107 } 108 } 109 110 public void initialize() 111 throws Exception 112 { 113 if( null != m_schemaLanguage ) 114 { 115 m_verifierFactory = VerifierFactory.newInstance( m_schemaLanguage ); 116 } 117 else if( null != m_verifierFactoryClass ) 118 { 119 m_verifierFactory = 120 (VerifierFactory)Class.forName( m_verifierFactoryClass ).newInstance(); 121 } 122 } 123 124 public ConfigurationValidator createValidator( String schemaType, InputStream schema ) 125 throws ConfigurationException 126 { 127 if( !m_schemaType.equals( schemaType ) ) 128 { 129 final String msg = "Invalid schema type: " + schemaType 130 + ". Validator only supports " + m_schemaType; 131 132 throw new ConfigurationException( msg ); 133 } 134 135 try 136 { 137 return new JarvConfigurationValidator( 138 m_verifierFactory.compileSchema( schema ) ); 139 } 140 catch( VerifierConfigurationException e ) 141 { 142 final String msg = "Unable to create schema"; 143 144 throw new ConfigurationException( msg, e ); 145 } 146 catch( SAXParseException e ) 147 { 148 final String msg = "Unable to parse schema [line: " + e.getLineNumber() 149 + ", column: " + e.getColumnNumber() 150 + ", msg: " + e.getMessage() + "]"; 151 152 throw new ConfigurationException( msg, e ); 153 } 154 catch( Exception e ) 155 { 156 final String msg = "Unable to parse schema [url: " + schema 157 + ", msg: " + e.getMessage() + "]"; 158 159 throw new ConfigurationException( msg, e ); 160 } 161 } 162 } 163 | Popular Tags |