You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by ol...@apache.org on 2008/07/29 01:32:12 UTC

svn commit: r680563 - in /maven/plugins/trunk/maven-changes-plugin: ./ src/main/java/org/apache/maven/plugin/changes/ src/main/java/org/apache/maven/plugin/changes/schema/ src/main/mdo/ src/test/java/org/apache/maven/plugin/changes/ src/test/unit/

Author: olamy
Date: Mon Jul 28 16:32:11 2008
New Revision: 680563

URL: http://svn.apache.org/viewvc?rev=680563&view=rev
Log:
[MCHANGES-86] Create a changes-validate mojo


Added:
    maven/plugins/trunk/maven-changes-plugin/src/main/java/org/apache/maven/plugin/changes/ChangesValidatorMojo.java   (with props)
    maven/plugins/trunk/maven-changes-plugin/src/main/java/org/apache/maven/plugin/changes/schema/
    maven/plugins/trunk/maven-changes-plugin/src/main/java/org/apache/maven/plugin/changes/schema/ChangesSchemaValidator.java   (with props)
    maven/plugins/trunk/maven-changes-plugin/src/main/java/org/apache/maven/plugin/changes/schema/DefaultChangesSchemaValidator.java   (with props)
    maven/plugins/trunk/maven-changes-plugin/src/main/java/org/apache/maven/plugin/changes/schema/SchemaValidatorException.java   (with props)
    maven/plugins/trunk/maven-changes-plugin/src/main/java/org/apache/maven/plugin/changes/schema/XmlValidationHandler.java   (with props)
    maven/plugins/trunk/maven-changes-plugin/src/test/java/org/apache/maven/plugin/changes/ChangesValidatorMojoTest.java   (with props)
    maven/plugins/trunk/maven-changes-plugin/src/test/unit/non-valid-changes.xml   (with props)
    maven/plugins/trunk/maven-changes-plugin/src/test/unit/plugin-config.xml   (with props)
Modified:
    maven/plugins/trunk/maven-changes-plugin/pom.xml
    maven/plugins/trunk/maven-changes-plugin/src/main/mdo/changes.mdo
    maven/plugins/trunk/maven-changes-plugin/src/test/unit/changes.xml

Modified: maven/plugins/trunk/maven-changes-plugin/pom.xml
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-changes-plugin/pom.xml?rev=680563&r1=680562&r2=680563&view=diff
==============================================================================
--- maven/plugins/trunk/maven-changes-plugin/pom.xml (original)
+++ maven/plugins/trunk/maven-changes-plugin/pom.xml Mon Jul 28 16:32:11 2008
@@ -131,6 +131,44 @@
             <model>src/main/mdo/changes.mdo</model>
           </models>
         </configuration>
+        <executions>
+          <execution>
+            <id>generate-xsd</id>
+            <phase>generate-resources</phase>
+            <goals>
+              <goal>xsd</goal>
+            </goals>
+            <configuration>
+              <outputDirectory>${project.build.outputDirectory}/META-INF/changes/xsd</outputDirectory>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>      
+      <plugin>
+        <groupId>org.codehaus.plexus</groupId>
+        <artifactId>plexus-maven-plugin</artifactId>
+        <version>1.3.5</version>
+        <executions>
+          <execution>
+            <id>create-component-descriptor</id>
+            <goals>
+              <goal>descriptor</goal>
+            </goals>
+          </execution>
+          <execution>
+            <id>merge</id>
+            <configuration>
+              <output>${project.build.outputDirectory}/META-INF/plexus/components.xml</output>
+              <descriptors>
+                <descriptor>src/main/resources/META-INF/plexus/components.xml</descriptor>
+              </descriptors>
+            </configuration>
+            <phase>generate-resources</phase>
+            <goals>
+              <goal>merge-descriptors</goal>
+            </goals>
+          </execution>
+        </executions>
       </plugin>      
     </plugins>
   </build>
@@ -172,7 +210,7 @@
     <dependency>
       <groupId>org.codehaus.plexus</groupId>
       <artifactId>plexus-container-default</artifactId>
-      <version>1.0-alpha-30</version>
+      <version>1.0-alpha-9-stable-1</version>
     </dependency>
     <dependency>
       <groupId>plexus</groupId>
@@ -295,6 +333,19 @@
       <version>1.5</version>
     </dependency>
     
+    <!-- schema validation dependencies : jaxp 1.3 is not included with jdk 1.4 (start with 1.5) -->
+    <dependency>
+      <groupId>xml-apis</groupId>
+      <artifactId>xml-apis</artifactId>
+      <version>1.3.04</version>
+    </dependency>
+    <dependency>
+      <groupId>xerces</groupId>
+      <artifactId>xercesImpl</artifactId>
+      <version>2.8.1</version>
+    </dependency>
+    
+    <!-- test dependencies -->
     <dependency>
       <groupId>org.apache.maven.plugin-testing</groupId>
       <artifactId>maven-plugin-testing-harness</artifactId>

Added: maven/plugins/trunk/maven-changes-plugin/src/main/java/org/apache/maven/plugin/changes/ChangesValidatorMojo.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-changes-plugin/src/main/java/org/apache/maven/plugin/changes/ChangesValidatorMojo.java?rev=680563&view=auto
==============================================================================
--- maven/plugins/trunk/maven-changes-plugin/src/main/java/org/apache/maven/plugin/changes/ChangesValidatorMojo.java (added)
+++ maven/plugins/trunk/maven-changes-plugin/src/main/java/org/apache/maven/plugin/changes/ChangesValidatorMojo.java Mon Jul 28 16:32:11 2008
@@ -0,0 +1,130 @@
+package org.apache.maven.plugin.changes;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.util.Iterator;
+import java.util.List;
+
+import org.apache.maven.plugin.AbstractMojo;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.MojoFailureException;
+import org.apache.maven.plugin.changes.schema.ChangesSchemaValidator;
+import org.apache.maven.plugin.changes.schema.SchemaValidatorException;
+import org.apache.maven.plugin.changes.schema.XmlValidationHandler;
+import org.xml.sax.SAXException;
+
+/**
+ * 
+ * Goal which validate changes file
+ * 
+ * @goal changes-validate
+ * 
+ * @author <a href="mailto:olamy@apache.org">olamy</a>
+ * @since 28 juil. 2008
+ * @version $Id$
+ * @since 2.1
+ */
+public class ChangesValidatorMojo
+    extends AbstractMojo
+{
+
+    /**
+     * The path of the <code>changes.xml</code> file that will be converted into an HTML report.
+     *
+     * @parameter expression="${changes.xmlPath}" default-value="src/changes/changes.xml"
+     */
+    private File xmlPath;
+    
+    /**
+     * The changes xsd version.
+     *
+     * @parameter expression="${changes.xsdVersion}" default-value="1.0.0"
+     */
+    private String changesXsdVersion;
+    
+    /**
+     * 
+     * @component role="org.apache.maven.plugin.changes.schema.ChangesSchemaValidator" roleHint="default"
+     *  
+     */
+    private ChangesSchemaValidator changesSchemaValidator;
+    
+    /**
+     * Mojo failure if validation failed. If not and validation failed only a warning will be logged.
+     *
+     * @parameter expression="${changes.validate.failed}" default-value="false"
+     */    
+    private boolean failOnError;
+    
+    /** 
+     * @see org.apache.maven.plugin.Mojo#execute()
+     */
+    public void execute()
+        throws MojoExecutionException, MojoFailureException
+    {
+
+        if ( !xmlPath.exists() )
+        {
+            getLog().warn( "changes.xml file " + xmlPath.getAbsolutePath() + " does not exist." );
+            return;
+        }
+
+        try
+        {
+            XmlValidationHandler xmlValidationHandler = changesSchemaValidator
+                .validateXmlWithSchema( xmlPath, changesXsdVersion, failOnError );
+            boolean hasErrros = !xmlValidationHandler.getErrors().isEmpty();
+            if ( hasErrros )
+            {
+                logSchemaValidation( xmlValidationHandler.getErrors() );
+                if ( failOnError )
+                {
+                    throw new MojoExecutionException( "changes.xml file " + xmlPath.getAbsolutePath()
+                        + " is not valid see previous errors" );
+                }
+                else
+                {
+                    getLog().info( " skip previous validation errors due failOnError false " );
+                }
+            }
+        }
+        catch ( SchemaValidatorException e )
+        {
+            if ( failOnError )
+            {
+                throw new MojoExecutionException( "failed to validate changes.xml file " + xmlPath.getAbsolutePath()
+                    + " : " + e.getMessage(), e );
+            }
+        }
+    }
+
+    private void logSchemaValidation( List /*SAXException*/errors )
+    {
+        getLog().error( "failed to validate changes " + xmlPath.getAbsolutePath() );
+        getLog().error( "validation errors : " );
+        for ( Iterator iterator = errors.iterator(); iterator.hasNext(); )
+        {
+            SAXException error = (SAXException) iterator.next();
+            getLog().error( error.getMessage() );
+        }
+    }
+
+}

Propchange: maven/plugins/trunk/maven-changes-plugin/src/main/java/org/apache/maven/plugin/changes/ChangesValidatorMojo.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/plugins/trunk/maven-changes-plugin/src/main/java/org/apache/maven/plugin/changes/ChangesValidatorMojo.java
------------------------------------------------------------------------------
    svn:executable = *

Propchange: maven/plugins/trunk/maven-changes-plugin/src/main/java/org/apache/maven/plugin/changes/ChangesValidatorMojo.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Revision Id

Added: maven/plugins/trunk/maven-changes-plugin/src/main/java/org/apache/maven/plugin/changes/schema/ChangesSchemaValidator.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-changes-plugin/src/main/java/org/apache/maven/plugin/changes/schema/ChangesSchemaValidator.java?rev=680563&view=auto
==============================================================================
--- maven/plugins/trunk/maven-changes-plugin/src/main/java/org/apache/maven/plugin/changes/schema/ChangesSchemaValidator.java (added)
+++ maven/plugins/trunk/maven-changes-plugin/src/main/java/org/apache/maven/plugin/changes/schema/ChangesSchemaValidator.java Mon Jul 28 16:32:11 2008
@@ -0,0 +1,41 @@
+package org.apache.maven.plugin.changes.schema;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+
+/**
+ * @author <a href="mailto:olamy@apache.org">olamy</a>
+ * @since 28 juil. 2008
+ * @version $Id$
+ */
+public interface ChangesSchemaValidator
+{
+    /**
+     * @param file
+     * @param schemaVersion
+     * @param failOnValidationError if false SchemaValidatorException will not be throw 
+     * @return {@link XmlValidationHandler}
+     * @throws SchemaValidatorException
+     */
+    public XmlValidationHandler validateXmlWithSchema( File file, String schemaVersion, boolean failOnValidationError )
+        throws SchemaValidatorException;
+    
+}

Propchange: maven/plugins/trunk/maven-changes-plugin/src/main/java/org/apache/maven/plugin/changes/schema/ChangesSchemaValidator.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/plugins/trunk/maven-changes-plugin/src/main/java/org/apache/maven/plugin/changes/schema/ChangesSchemaValidator.java
------------------------------------------------------------------------------
    svn:executable = *

Propchange: maven/plugins/trunk/maven-changes-plugin/src/main/java/org/apache/maven/plugin/changes/schema/ChangesSchemaValidator.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Revision Id

Added: maven/plugins/trunk/maven-changes-plugin/src/main/java/org/apache/maven/plugin/changes/schema/DefaultChangesSchemaValidator.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-changes-plugin/src/main/java/org/apache/maven/plugin/changes/schema/DefaultChangesSchemaValidator.java?rev=680563&view=auto
==============================================================================
--- maven/plugins/trunk/maven-changes-plugin/src/main/java/org/apache/maven/plugin/changes/schema/DefaultChangesSchemaValidator.java (added)
+++ maven/plugins/trunk/maven-changes-plugin/src/main/java/org/apache/maven/plugin/changes/schema/DefaultChangesSchemaValidator.java Mon Jul 28 16:32:11 2008
@@ -0,0 +1,141 @@
+package org.apache.maven.plugin.changes.schema;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+import java.io.FileReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Map;
+
+import javax.xml.transform.stream.StreamSource;
+import javax.xml.validation.Schema;
+import javax.xml.validation.SchemaFactory;
+import javax.xml.validation.Validator;
+
+import org.codehaus.plexus.util.FastMap;
+import org.xml.sax.SAXException;
+
+/**
+ * 
+ * @author <a href="mailto:olamy@apache.org">olamy</a>
+ * @since 28 juil. 2008
+ * @version $Id$
+ * 
+ * @plexus.component role="org.apache.maven.plugin.changes.schema.ChangesSchemaValidator" role-hint="default"
+ */
+public class DefaultChangesSchemaValidator
+    implements ChangesSchemaValidator
+{
+
+    /** property schema */
+    public static final String W3C_XML_SCHEMA = "http://www.w3.org/2001/XMLSchema";    
+    
+    public static final String CHANGES_SCHEMA_PATH = "META-INF/changes/xsd/";
+    
+    private Map compiledSchemas = new FastMap();
+
+    public XmlValidationHandler validateXmlWithSchema( File file, String schemaVersion, boolean failOnValidationError )
+        throws SchemaValidatorException
+    {
+        try
+        {
+            String schemaPath = CHANGES_SCHEMA_PATH + "changes-" + schemaVersion + ".xsd";
+            
+            Schema schema = getSchema( schemaPath );
+            
+            Validator validator = schema.newValidator();
+            
+            XmlValidationHandler baseHandler = new XmlValidationHandler( failOnValidationError );
+            
+            validator.setErrorHandler( baseHandler );
+            
+            validator.validate( new StreamSource( new FileReader( file ) ) );
+            
+            return baseHandler;
+        }
+        catch ( IOException e )
+        {
+            throw new SchemaValidatorException( "IOException : " + e.getMessage(), e );
+        }
+        catch ( SAXException e )
+        {
+            throw new SchemaValidatorException( "SAXException : " + e.getMessage(), e );
+        }
+        catch ( Exception e )
+        {
+            throw new SchemaValidatorException( "Exception : " + e.getMessage(), e );
+        }
+    }
+
+    public Schema getSchema( String schemaPath )
+        throws SAXException
+    {
+        if ( this.compiledSchemas.containsKey( schemaPath ) )
+        {
+            return (Schema) this.compiledSchemas.get( schemaPath );
+        }
+        Schema schema = this.compileJAXPSchema( schemaPath );
+        
+        this.compiledSchemas.put( schemaPath, schema );
+        
+        return schema;
+    }
+
+    /**
+     * @param uriSchema
+     * @return Schema
+     * @throws Exception
+     */
+    private Schema compileJAXPSchema( String uriSchema )
+        throws SAXException, NullPointerException
+    {
+
+        InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream( uriSchema );
+
+        if ( is == null )
+        {
+            throw new NullPointerException(" impossible to load schema with path " + uriSchema );
+        }
+
+        //newInstance de SchemaFactory not ThreadSafe
+        return SchemaFactory.newInstance( W3C_XML_SCHEMA ).newSchema( new StreamSource( is ) );
+
+    }
+
+    /**
+     * @see com.accor.commons.xmlschemas.SchemaValidator#loadSchema(java.lang.String)
+     */
+    public void loadSchema( String uriSchema )
+        throws SchemaValidatorException
+    {
+        try
+        {
+            this.getSchema( uriSchema );
+        }
+        catch ( SAXException e )
+        {
+            throw new SchemaValidatorException( "SAXException : " + e.getMessage(), e );
+        }
+
+    }    
+
+
+}

Propchange: maven/plugins/trunk/maven-changes-plugin/src/main/java/org/apache/maven/plugin/changes/schema/DefaultChangesSchemaValidator.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/plugins/trunk/maven-changes-plugin/src/main/java/org/apache/maven/plugin/changes/schema/DefaultChangesSchemaValidator.java
------------------------------------------------------------------------------
    svn:executable = *

Propchange: maven/plugins/trunk/maven-changes-plugin/src/main/java/org/apache/maven/plugin/changes/schema/DefaultChangesSchemaValidator.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Revision Id

Added: maven/plugins/trunk/maven-changes-plugin/src/main/java/org/apache/maven/plugin/changes/schema/SchemaValidatorException.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-changes-plugin/src/main/java/org/apache/maven/plugin/changes/schema/SchemaValidatorException.java?rev=680563&view=auto
==============================================================================
--- maven/plugins/trunk/maven-changes-plugin/src/main/java/org/apache/maven/plugin/changes/schema/SchemaValidatorException.java (added)
+++ maven/plugins/trunk/maven-changes-plugin/src/main/java/org/apache/maven/plugin/changes/schema/SchemaValidatorException.java Mon Jul 28 16:32:11 2008
@@ -0,0 +1,40 @@
+package org.apache.maven.plugin.changes.schema;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * @author <a href="mailto:olamy@apache.org">olamy</a>
+ * @since 28 juil. 2008
+ * @version $Id$
+ */
+public class SchemaValidatorException
+    extends Exception
+{
+    
+    /**
+     * @param message
+     * @param cause
+     */
+    public SchemaValidatorException( String message, Throwable cause )
+    {
+        super( message, cause );
+    }
+
+}

Propchange: maven/plugins/trunk/maven-changes-plugin/src/main/java/org/apache/maven/plugin/changes/schema/SchemaValidatorException.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/plugins/trunk/maven-changes-plugin/src/main/java/org/apache/maven/plugin/changes/schema/SchemaValidatorException.java
------------------------------------------------------------------------------
    svn:executable = *

Propchange: maven/plugins/trunk/maven-changes-plugin/src/main/java/org/apache/maven/plugin/changes/schema/SchemaValidatorException.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Revision Id

Added: maven/plugins/trunk/maven-changes-plugin/src/main/java/org/apache/maven/plugin/changes/schema/XmlValidationHandler.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-changes-plugin/src/main/java/org/apache/maven/plugin/changes/schema/XmlValidationHandler.java?rev=680563&view=auto
==============================================================================
--- maven/plugins/trunk/maven-changes-plugin/src/main/java/org/apache/maven/plugin/changes/schema/XmlValidationHandler.java (added)
+++ maven/plugins/trunk/maven-changes-plugin/src/main/java/org/apache/maven/plugin/changes/schema/XmlValidationHandler.java Mon Jul 28 16:32:11 2008
@@ -0,0 +1,147 @@
+package org.apache.maven.plugin.changes.schema;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.xml.sax.Attributes;
+import org.xml.sax.SAXException;
+import org.xml.sax.SAXParseException;
+import org.xml.sax.helpers.DefaultHandler;
+
+/**
+ * @author <a href="mailto:olamy@apache.org">olamy</a>
+ * @since 28 juil. 2008
+ * @version $Id$
+ */
+public class XmlValidationHandler
+    extends DefaultHandler
+{
+   
+    private boolean parsingError = false;
+
+    private List /* SAXParseException */errors = new ArrayList();
+
+    private List /* SAXParseException */fatalErrors = new ArrayList();
+
+    private List /* SAXParseException */warnings = new ArrayList();
+
+    private boolean failOnValidationError;
+
+    /**
+     * see name
+     */
+    public XmlValidationHandler( boolean failOnValidationError )
+    {
+        this.failOnValidationError = failOnValidationError;
+    }
+
+    /**
+     * @see org.xml.sax.ErrorHandler#error(org.xml.sax.SAXParseException)
+     */
+    public void error( SAXParseException excp )
+        throws SAXException
+    {
+        this.setErrorParsing( true );
+        this.errors.add( excp );
+        if ( this.failOnValidationError )
+        {
+            throw new SAXException( excp.getMessage(), excp );
+        }
+    }
+
+    /**
+     * @see org.xml.sax.ErrorHandler#fatalError(org.xml.sax.SAXParseException)
+     */
+    public void fatalError( SAXParseException excp )
+        throws SAXException
+    {
+        this.fatalErrors.add( excp );
+        if ( this.failOnValidationError )
+        {
+            throw new SAXException( excp.getMessage(), excp );
+        }
+    }
+
+    /**
+     * @see org.xml.sax.ErrorHandler#warning(org.xml.sax.SAXParseException)
+     */
+    public void warning( SAXParseException excp )
+        throws SAXException
+    {
+        this.warnings.add( excp );
+    }
+
+    /**
+     * @see org.xml.sax.ContentHandler#startElement(String, String, String, Attributes)
+     */
+    public void startElement( String uri, String localName, String qName, Attributes attributes )
+        throws SAXException
+    {
+        // nothing
+    }
+
+    /**
+     * @return Returns the errorParsing.
+     */
+    public boolean isErrorParsing()
+    {
+        return this.parsingError;
+    }
+
+    /**
+     * @param error The errorParsing to set.
+     */
+    public void setErrorParsing( boolean error )
+    {
+        this.parsingError = error;
+    }
+
+    public List /* SAXParseException */getErrors()
+    {
+        return errors;
+    }
+
+    public void setErrors( List errors )
+    {
+        this.errors = errors;
+    }
+
+    public List /* SAXParseException */getFatalErrors()
+    {
+        return fatalErrors;
+    }
+
+    public void setFatalErrors( List fatalErrors )
+    {
+        this.fatalErrors = fatalErrors;
+    }
+
+    public List /* SAXParseException */ getWarnings()
+    {
+        return warnings;
+    }
+
+    public void setWarnings( List warnings )
+    {
+        this.warnings = warnings;
+    }
+}

Propchange: maven/plugins/trunk/maven-changes-plugin/src/main/java/org/apache/maven/plugin/changes/schema/XmlValidationHandler.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/plugins/trunk/maven-changes-plugin/src/main/java/org/apache/maven/plugin/changes/schema/XmlValidationHandler.java
------------------------------------------------------------------------------
    svn:executable = *

Propchange: maven/plugins/trunk/maven-changes-plugin/src/main/java/org/apache/maven/plugin/changes/schema/XmlValidationHandler.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Revision Id

Modified: maven/plugins/trunk/maven-changes-plugin/src/main/mdo/changes.mdo
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-changes-plugin/src/main/mdo/changes.mdo?rev=680563&r1=680562&r2=680563&view=diff
==============================================================================
--- maven/plugins/trunk/maven-changes-plugin/src/main/mdo/changes.mdo (original)
+++ maven/plugins/trunk/maven-changes-plugin/src/main/mdo/changes.mdo Mon Jul 28 16:32:11 2008
@@ -1,6 +1,6 @@
 <?xml version="1.0"?>
 
-<model>
+<model xsd.namespace="http://maven.apache.org/changes/1.0.0" xsd.target-namespace="http://maven.apache.org/changes/1.0.0">
   <id>changes</id>
   <name>Changes</name>
   <description>
@@ -180,7 +180,7 @@
             ]]>
           </description>
         </field>
-        <field xml.attribute="true">
+        <field xml.attribute="true" xml.tagName="due-to">
           <name>dueTo</name>
           <version>1.0.0</version>
           <type>String</type>
@@ -188,7 +188,7 @@
             Name of the person to be credited for this change. This can be used when a patch is submitted by a non-committer.
           </description>
         </field>
-        <field xml.attribute="true">
+        <field xml.attribute="true" xml.tagName="due-to-email">
           <name>dueToEmail</name>
           <version>1.0.0</version>
           <type>String</type>

Added: maven/plugins/trunk/maven-changes-plugin/src/test/java/org/apache/maven/plugin/changes/ChangesValidatorMojoTest.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-changes-plugin/src/test/java/org/apache/maven/plugin/changes/ChangesValidatorMojoTest.java?rev=680563&view=auto
==============================================================================
--- maven/plugins/trunk/maven-changes-plugin/src/test/java/org/apache/maven/plugin/changes/ChangesValidatorMojoTest.java (added)
+++ maven/plugins/trunk/maven-changes-plugin/src/test/java/org/apache/maven/plugin/changes/ChangesValidatorMojoTest.java Mon Jul 28 16:32:11 2008
@@ -0,0 +1,85 @@
+package org.apache.maven.plugin.changes;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.io.File;
+
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.testing.AbstractMojoTestCase;
+
+
+
+/**
+ * @author <a href="mailto:olamy@apache.org">olamy</a>
+ * @since 29 juil. 2008
+ * @version $Id$
+ */
+public class ChangesValidatorMojoTest
+    extends AbstractMojoTestCase
+{
+
+    protected ChangesValidatorMojo mojo;
+
+    public void setUp()
+        throws Exception
+    {
+        super.setUp();
+        File pom = new File( getBasedir(), "/src/test/unit/plugin-config.xml" );
+        mojo = (ChangesValidatorMojo) lookupMojo( "changes-validate", pom );
+    }    
+    
+    public void testValidationSuccess()
+        throws Exception
+    {
+        File changesXml = new File( getBasedir(), "/src/test/unit/changes.xml" );
+        setVariableValueToObject( mojo, "xmlPath", changesXml );
+        setVariableValueToObject( mojo, "changesXsdVersion", "1.0.0" );
+        mojo.execute();
+    }
+
+    public void testValidationFailedWithMojoFailure()
+        throws Exception
+    {
+        File changesXml = new File( getBasedir(), "/src/test/unit/non-valid-changes.xml" );
+        setVariableValueToObject( mojo, "xmlPath", changesXml );
+        setVariableValueToObject( mojo, "changesXsdVersion", "1.0.0" );
+        setVariableValueToObject( mojo, "failOnError", Boolean.TRUE );
+        try
+        {
+            mojo.execute();
+            fail( " a MojoExecutionException should occur here changes file is not valid and failOnError is true " );
+        }
+        catch ( MojoExecutionException e )
+        {
+            // we except exception here
+        }
+    }
+    
+    public void testValidationFailedWithNoMojoFailure()
+        throws Exception
+    {
+        File changesXml = new File( getBasedir(), "/src/test/unit/non-valid-changes.xml" );
+        setVariableValueToObject( mojo, "xmlPath", changesXml );
+        setVariableValueToObject( mojo, "changesXsdVersion", "1.0.0" );
+        setVariableValueToObject( mojo, "failOnError", Boolean.FALSE );
+        mojo.execute();
+
+    }
+}

Propchange: maven/plugins/trunk/maven-changes-plugin/src/test/java/org/apache/maven/plugin/changes/ChangesValidatorMojoTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/plugins/trunk/maven-changes-plugin/src/test/java/org/apache/maven/plugin/changes/ChangesValidatorMojoTest.java
------------------------------------------------------------------------------
    svn:executable = *

Propchange: maven/plugins/trunk/maven-changes-plugin/src/test/java/org/apache/maven/plugin/changes/ChangesValidatorMojoTest.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Revision Id

Modified: maven/plugins/trunk/maven-changes-plugin/src/test/unit/changes.xml
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-changes-plugin/src/test/unit/changes.xml?rev=680563&r1=680562&r2=680563&view=diff
==============================================================================
--- maven/plugins/trunk/maven-changes-plugin/src/test/unit/changes.xml (original)
+++ maven/plugins/trunk/maven-changes-plugin/src/test/unit/changes.xml Mon Jul 28 16:32:11 2008
@@ -16,33 +16,31 @@
 specific language governing permissions and limitations
 under the License.
 -->
-
-<document>
-  <properties>
-    <title>Changes report Project</title>
-    <author email="zloug@toto.com">Mr Zloug</author>
-  </properties>
-  <body>
-    <release version="1.1" date="2005-03-01" description="Subsequent release">
-      <action dev="me" type="add">
+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/changes/1.0.0">
+	<properties>
+		<title>Changes report Project</title>
+		<author email="zloug@toto.com">Mr Zloug</author>
+	</properties>
+	<body>
+		<release version="1.1" date="2005-03-01" description="Subsequent release">
+			<action dev="me" type="add">
         Added additional documentation on how to configure the plugin.
       </action>
-      <action dev="me" type="fix" issue="MCHANGES-88">
+			<action dev="me" type="fix" issue="MCHANGES-88">
         Enable retrieving component-specific issues.
       </action>
-      <action dev="me" type="fix" issue="1212" system="qc">
+			<action dev="me" type="fix" issue="1212" system="qc">
         Enable retrieving component-specific issues.
-      </action>      
-      <action dev="jruiz" type="remove" due-to="others" due-to-email="users@users.com">
+      </action>
+			<action dev="jruiz" type="remove" due-to="others" due-to-email="users@users.com">
         The element type " link " must be terminated by the matching end-tag.
         Deleted the erroneous code.
       </action>
-    </release>
-
-    <release version="1.0" date="2005-01-01" description="First release">
-      <action dev="me" type="update" date="2008-01-01">
+		</release>
+		<release version="1.0" date="2005-01-01" description="First release">
+			<action dev="me" type="update" date="2008-01-01">
         Uploaded documentation on how to use the plugin.
       </action>
-    </release>
-  </body>
-</document>
\ No newline at end of file
+		</release>
+	</body>
+</document>

Added: maven/plugins/trunk/maven-changes-plugin/src/test/unit/non-valid-changes.xml
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-changes-plugin/src/test/unit/non-valid-changes.xml?rev=680563&view=auto
==============================================================================
--- maven/plugins/trunk/maven-changes-plugin/src/test/unit/non-valid-changes.xml (added)
+++ maven/plugins/trunk/maven-changes-plugin/src/test/unit/non-valid-changes.xml Mon Jul 28 16:32:11 2008
@@ -0,0 +1,26 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/changes/1.0.0">
+  <properties>
+    <atitle>Changes report Project</atitle>
+    <author email="zloug@toto.com">Mr Zloug</author>
+  </properties>
+  
+</document>
\ No newline at end of file

Propchange: maven/plugins/trunk/maven-changes-plugin/src/test/unit/non-valid-changes.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/plugins/trunk/maven-changes-plugin/src/test/unit/non-valid-changes.xml
------------------------------------------------------------------------------
    svn:executable = *

Propchange: maven/plugins/trunk/maven-changes-plugin/src/test/unit/non-valid-changes.xml
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: maven/plugins/trunk/maven-changes-plugin/src/test/unit/plugin-config.xml
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-changes-plugin/src/test/unit/plugin-config.xml?rev=680563&view=auto
==============================================================================
--- maven/plugins/trunk/maven-changes-plugin/src/test/unit/plugin-config.xml (added)
+++ maven/plugins/trunk/maven-changes-plugin/src/test/unit/plugin-config.xml Mon Jul 28 16:32:11 2008
@@ -0,0 +1,31 @@
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<project>
+  <name>changes-plugin-test</name>
+  <build>
+    <plugins>
+      <plugin>
+        <artifactId>maven-changes-plugin</artifactId>
+        <configuration>
+        </configuration>
+      </plugin>
+    </plugins>
+  </build>
+</project>

Propchange: maven/plugins/trunk/maven-changes-plugin/src/test/unit/plugin-config.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: maven/plugins/trunk/maven-changes-plugin/src/test/unit/plugin-config.xml
------------------------------------------------------------------------------
    svn:executable = *

Propchange: maven/plugins/trunk/maven-changes-plugin/src/test/unit/plugin-config.xml
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision