Return-Path: Delivered-To: apmail-avalon-cvs-archive@avalon.apache.org Received: (qmail 83990 invoked by uid 500); 5 Apr 2003 11:21:08 -0000 Mailing-List: contact cvs-help@avalon.apache.org; run by ezmlm Precedence: bulk List-Unsubscribe: List-Subscribe: List-Help: List-Post: List-Id: "Avalon CVS List" Reply-To: "Avalon Developers List" Delivered-To: mailing list cvs@avalon.apache.org Received: (qmail 83979 invoked by uid 500); 5 Apr 2003 11:21:08 -0000 Received: (qmail 83976 invoked from network); 5 Apr 2003 11:21:07 -0000 Received: from icarus.apache.org (208.185.179.13) by daedalus.apache.org with SMTP; 5 Apr 2003 11:21:07 -0000 Received: (qmail 73858 invoked by uid 1195); 5 Apr 2003 11:21:11 -0000 Date: 5 Apr 2003 11:21:11 -0000 Message-ID: <20030405112111.73857.qmail@icarus.apache.org> From: donaldp@apache.org To: avalon-phoenix-cvs@apache.org Subject: cvs commit: avalon-phoenix/src/test/org/apache/avalon/phoenix/tools/assembler/test assembly1.xml assembly2.xml X-Spam-Rating: daedalus.apache.org 1.6.2 0/1000/N donaldp 2003/04/05 03:21:11 Modified: . build.xml src/java/org/apache/avalon/phoenix/components/deployer DefaultDeployer.java src/java/org/apache/avalon/phoenix/components/manager MBeanInfoBuilder.java src/java/org/apache/avalon/phoenix/framework/tools/infobuilder LegacyBlockInfoReader.java XMLInfoReader.java src/java/org/apache/avalon/phoenix/tools/configuration ConfigurationBuilder.java src/schema assembly.dtd blockinfo.dtd catalog.xml componentinfo.dtd src/test/org/apache/avalon/phoenix/framework/tools/infobuilder/test/data component2.xinfo src/test/org/apache/avalon/phoenix/test AbstractContainerTestCase.java src/test/org/apache/avalon/phoenix/tools/assembler/test assembly1.xml assembly2.xml Log: First cut at validation of configuration files. Validates assembly, blockinfo and mxinfo atm. In the future partial validation of kernel.xml and environment.xml will occur. Revision Changes Path 1.238 +5 -3 avalon-phoenix/build.xml Index: build.xml =================================================================== RCS file: /home/cvs/avalon-phoenix/build.xml,v retrieving revision 1.237 retrieving revision 1.238 diff -u -r1.237 -r1.238 --- build.xml 5 Apr 2003 04:27:01 -0000 1.237 +++ build.xml 5 Apr 2003 11:21:09 -0000 1.238 @@ -106,8 +106,8 @@ - - + + @@ -142,6 +142,7 @@ + @@ -459,7 +460,7 @@ - @@ -616,6 +617,7 @@ + 1.78 +10 -5 avalon-phoenix/src/java/org/apache/avalon/phoenix/components/deployer/DefaultDeployer.java Index: DefaultDeployer.java =================================================================== RCS file: /home/cvs/avalon-phoenix/src/java/org/apache/avalon/phoenix/components/deployer/DefaultDeployer.java,v retrieving revision 1.77 retrieving revision 1.78 diff -u -r1.77 -r1.78 --- DefaultDeployer.java 5 Apr 2003 04:25:42 -0000 1.77 +++ DefaultDeployer.java 5 Apr 2003 11:21:09 -0000 1.78 @@ -290,9 +290,14 @@ //m_baseWorkDirectory installation = m_installer.install( name, location ); - final Configuration config = getConfigurationFor( installation, ContainerConstants.INSTALL_CONFIG ); - final Configuration environment = getConfigurationFor( installation, ContainerConstants.INSTALL_ENVIRONMENT ); - final Configuration assembly = getConfigurationFor( installation, ContainerConstants.INSTALL_ASSEMBLY ); + final Configuration config = + getConfigurationFor( installation, ContainerConstants.INSTALL_CONFIG, null ); + final Configuration environment = + getConfigurationFor( installation, ContainerConstants.INSTALL_ENVIRONMENT, null ); + final Configuration assembly = + getConfigurationFor( installation, + ContainerConstants.INSTALL_ASSEMBLY, + ConfigurationBuilder.ASSEMBLY_SCHEMA ); final File homeDirectory = (File)installation.get( ContainerConstants.INSTALL_HOME ); @@ -482,13 +487,13 @@ * @return the Configuration * @throws DeploymentException if an error occurs */ - private Configuration getConfigurationFor( final Map install, final String key ) + private Configuration getConfigurationFor( final Map install, final String key, final String schema ) throws DeploymentException { final String location = (String)install.get( key ); try { - return ConfigurationBuilder.build( new InputSource( location ), false ); + return ConfigurationBuilder.build( new InputSource( location ), schema, getLogger() ); } catch( final Exception e ) { 1.9 +2 -2 avalon-phoenix/src/java/org/apache/avalon/phoenix/components/manager/MBeanInfoBuilder.java Index: MBeanInfoBuilder.java =================================================================== RCS file: /home/cvs/avalon-phoenix/src/java/org/apache/avalon/phoenix/components/manager/MBeanInfoBuilder.java,v retrieving revision 1.8 retrieving revision 1.9 diff -u -r1.8 -r1.9 --- MBeanInfoBuilder.java 22 Mar 2003 12:07:10 -0000 1.8 +++ MBeanInfoBuilder.java 5 Apr 2003 11:21:09 -0000 1.9 @@ -574,7 +574,7 @@ final InputSource source = new InputSource( stream ); // build with validation against DTD - return ConfigurationBuilder.build( source, true ); + return ConfigurationBuilder.build( source, ConfigurationBuilder.MXINFO_SCHEMA, getLogger() ); } catch( Exception e ) { 1.7 +2 -2 avalon-phoenix/src/java/org/apache/avalon/phoenix/framework/tools/infobuilder/LegacyBlockInfoReader.java Index: LegacyBlockInfoReader.java =================================================================== RCS file: /home/cvs/avalon-phoenix/src/java/org/apache/avalon/phoenix/framework/tools/infobuilder/LegacyBlockInfoReader.java,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- LegacyBlockInfoReader.java 5 Apr 2003 04:25:43 -0000 1.6 +++ LegacyBlockInfoReader.java 5 Apr 2003 11:21:10 -0000 1.7 @@ -97,7 +97,7 @@ throws Exception { final InputSource input = new InputSource( inputStream ); - final Configuration configuration = ConfigurationBuilder.build( input, false ); + final Configuration configuration = ConfigurationBuilder.build( input, ConfigurationBuilder.BLOCKINFO_SCHEMA, getLogger() ); return build( implementationKey, configuration ); } 1.7 +2 -2 avalon-phoenix/src/java/org/apache/avalon/phoenix/framework/tools/infobuilder/XMLInfoReader.java Index: XMLInfoReader.java =================================================================== RCS file: /home/cvs/avalon-phoenix/src/java/org/apache/avalon/phoenix/framework/tools/infobuilder/XMLInfoReader.java,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- XMLInfoReader.java 5 Apr 2003 04:25:43 -0000 1.6 +++ XMLInfoReader.java 5 Apr 2003 11:21:10 -0000 1.7 @@ -99,7 +99,7 @@ throws Exception { final InputSource input = new InputSource( inputStream ); - final Configuration configuration = ConfigurationBuilder.build( input, false ); + final Configuration configuration = ConfigurationBuilder.build( input, ConfigurationBuilder.COMPONENTINFO_SCHEMA, getLogger() ); return buildComponentInfo( implementationKey, configuration ); } 1.17 +68 -25 avalon-phoenix/src/java/org/apache/avalon/phoenix/tools/configuration/ConfigurationBuilder.java Index: ConfigurationBuilder.java =================================================================== RCS file: /home/cvs/avalon-phoenix/src/java/org/apache/avalon/phoenix/tools/configuration/ConfigurationBuilder.java,v retrieving revision 1.16 retrieving revision 1.17 diff -u -r1.16 -r1.17 --- ConfigurationBuilder.java 5 Apr 2003 04:25:44 -0000 1.16 +++ ConfigurationBuilder.java 5 Apr 2003 11:21:10 -0000 1.17 @@ -56,11 +56,18 @@ import javax.xml.parsers.SAXParserFactory; import org.apache.avalon.framework.configuration.Configuration; import org.apache.avalon.framework.configuration.SAXConfigurationHandler; +import org.apache.avalon.framework.logger.Logger; import org.realityforge.configkit.ResolverFactory; +import org.realityforge.configkit.ConfigValidatorFactory; +import org.realityforge.configkit.ConfigValidator; +import org.realityforge.configkit.ValidationResult; +import org.realityforge.configkit.ValidationIssue; +import org.realityforge.configkit.ValidateException; import org.xml.sax.EntityResolver; import org.xml.sax.InputSource; import org.xml.sax.SAXException; import org.xml.sax.XMLReader; +import org.xml.sax.ContentHandler; /** * Utility class used to load Configuration trees from XML files. @@ -70,6 +77,11 @@ */ public class ConfigurationBuilder { + public static final String COMPONENTINFO_SCHEMA = "-//AVALON/Component Info DTD Version 1.0//EN"; + public static final String BLOCKINFO_SCHEMA = "-//PHOENIX/Block Info DTD Version 1.0//EN"; + public static final String MXINFO_SCHEMA = "-//PHOENIX/Mx Info DTD Version 1.0//EN"; + public static final String ASSEMBLY_SCHEMA = "-//PHOENIX/Assembly DTD Version 1.0//EN"; + /** * The resolver that builder uses. */ @@ -79,40 +91,71 @@ * Build a configuration object using an XML InputSource object, and * optionally validate the xml against the DTD. */ - public static Configuration build( final InputSource input, final boolean validate ) - throws SAXException, ParserConfigurationException, IOException + public static Configuration build( final InputSource input, + final String publicId, + final Logger logger ) + throws Exception { - final SAXParserFactory saxParserFactory = SAXParserFactory.newInstance(); - saxParserFactory.setNamespaceAware( false ); - final SAXParser saxParser = saxParserFactory.newSAXParser(); - final XMLReader reader = saxParser.getXMLReader(); + setupResolver(); final SAXConfigurationHandler handler = new SAXConfigurationHandler(); - setupXMLReader( reader, handler, validate ); - reader.parse( input ); + if( null == publicId ) + { + final SAXParserFactory saxParserFactory = SAXParserFactory.newInstance(); + saxParserFactory.setNamespaceAware( false ); + final SAXParser saxParser = saxParserFactory.newSAXParser(); + final XMLReader reader = saxParser.getXMLReader(); + reader.setEntityResolver( c_resolver ); + reader.setContentHandler( handler ); + reader.setErrorHandler( handler ); + reader.parse( input ); + } + else + { + final InputSource inputSource = c_resolver.resolveEntity( publicId, null ); + if( null == inputSource ) + { + final String message = "Unable to locate schema with publicID=" + publicId; + throw new IllegalStateException( message ); + } + + final ConfigValidator validator = + ConfigValidatorFactory.create( inputSource, c_resolver ); + final ValidationResult result = validator.validate( input, (ContentHandler)handler ); + if( !result.isValid() ) + { + final ValidationIssue[] issues = result.getIssues(); + for( int i = 0; i < issues.length; i++ ) + { + final ValidationIssue issue = issues[ i ]; + final String message = issue.getException().getMessage(); + if( issue.isWarning() ) + { + logger.info( message ); + } + else if( issue.isError() ) + { + logger.warn( message ); + } + else if( issue.isFatalError() ) + { + logger.error( message ); + } + } + final ValidateException exception = result.getException(); + throw new Exception( exception.getMessage(), exception ); + } + } return handler.getConfiguration(); } - /** - * Internally sets up the XMLReader - */ - private static void setupXMLReader( final XMLReader reader, - final SAXConfigurationHandler handler, - final boolean validate ) - throws SAXException, IOException, ParserConfigurationException + private static void setupResolver() + throws ParserConfigurationException, SAXException, IOException { if( null == c_resolver ) { c_resolver = ResolverFactory.createResolver( ConfigurationBuilder.class.getClassLoader() ); } - reader.setEntityResolver( c_resolver ); - reader.setContentHandler( handler ); - reader.setErrorHandler( handler ); - - if( validate ) - { - // Request validation - reader.setFeature( "http://xml.org/sax/features/validation", true ); - } } + } 1.8 +1 -2 avalon-phoenix/src/schema/assembly.dtd Index: assembly.dtd =================================================================== RCS file: /home/cvs/avalon-phoenix/src/schema/assembly.dtd,v retrieving revision 1.7 retrieving revision 1.8 diff -u -r1.7 -r1.8 --- assembly.dtd 5 Apr 2003 02:46:46 -0000 1.7 +++ assembly.dtd 5 Apr 2003 11:21:10 -0000 1.8 @@ -23,8 +23,7 @@ block-listener a listener that exists in the application --> - + - + - + - - 1.0 - relax-ng - + + + 1.0 + relax-ng + - - - - + + + + - - - - + + + + - - - - - - + + + + + + 1.11 +5 -2 avalon-phoenix/src/test/org/apache/avalon/phoenix/test/AbstractContainerTestCase.java Index: AbstractContainerTestCase.java =================================================================== RCS file: /home/cvs/avalon-phoenix/src/test/org/apache/avalon/phoenix/test/AbstractContainerTestCase.java,v retrieving revision 1.10 retrieving revision 1.11 diff -u -r1.10 -r1.11 --- AbstractContainerTestCase.java 5 Apr 2003 04:25:45 -0000 1.10 +++ AbstractContainerTestCase.java 5 Apr 2003 11:21:10 -0000 1.11 @@ -83,7 +83,10 @@ assembler.enableLogging( new ConsoleLogger() ); final URL resource = getClass().getResource( config ); assertNotNull( "Config resource: " + config, resource ); - final Configuration assembly = ConfigurationBuilder.build( new InputSource( resource.toExternalForm() ), true ); + final Configuration assembly = + ConfigurationBuilder.build( new InputSource( resource.toExternalForm() ), + ConfigurationBuilder.ASSEMBLY_SCHEMA, + new ConsoleLogger() ); final Map parameters = new HashMap(); parameters.put( ContainerConstants.ASSEMBLY_NAME, "test" ); parameters.put( ContainerConstants.ASSEMBLY_CONFIG, assembly ); 1.6 +1 -1 avalon-phoenix/src/test/org/apache/avalon/phoenix/tools/assembler/test/assembly1.xml Index: assembly1.xml =================================================================== RCS file: /home/cvs/avalon-phoenix/src/test/org/apache/avalon/phoenix/tools/assembler/test/assembly1.xml,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- assembly1.xml 1 Oct 2002 07:44:01 -0000 1.5 +++ assembly1.xml 5 Apr 2003 11:21:10 -0000 1.6 @@ -1,6 +1,6 @@ + "http://jakarta.apache.org/phoenix/assembly_1_0.dtd"> 1.4 +1 -1 avalon-phoenix/src/test/org/apache/avalon/phoenix/tools/assembler/test/assembly2.xml Index: assembly2.xml =================================================================== RCS file: /home/cvs/avalon-phoenix/src/test/org/apache/avalon/phoenix/tools/assembler/test/assembly2.xml,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- assembly2.xml 1 Oct 2002 07:44:01 -0000 1.3 +++ assembly2.xml 5 Apr 2003 11:21:10 -0000 1.4 @@ -1,6 +1,6 @@ + "http://jakarta.apache.org/phoenix/assembly_1_0.dtd"> --------------------------------------------------------------------- To unsubscribe, e-mail: cvs-unsubscribe@avalon.apache.org For additional commands, e-mail: cvs-help@avalon.apache.org