You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by rf...@apache.org on 2020/10/21 18:13:16 UTC

[maven] branch MNG-6999 created (now 1809ae0)

This is an automated email from the ASF dual-hosted git repository.

rfscholte pushed a change to branch MNG-6999
in repository https://gitbox.apache.org/repos/asf/maven.git.


      at 1809ae0  [MNG-6999] Chained (consumer) XMLFilters can result in "floating" comments

This branch includes the following new commits:

     new 789d75f  Merge branch 'master' of https://gitbox.apache.org/repos/asf/maven
     new 4f4e913  MNG-6999: LexicalHandler is as same level as ContentHandler, not as parent
     new 4ea4c0f  LexicalHandler and ContentHandler are at same level, so don't set LexicalHandler with parent
     new c48cc38  Improve tests
     new 6d6bdef  Add unittest to verify transform result of ConsumerModelSourceTransformer
     new 1809ae0  [MNG-6999] Chained (consumer) XMLFilters can result in "floating" comments

The 6 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[maven] 04/06: Improve tests

Posted by rf...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

rfscholte pushed a commit to branch MNG-6999
in repository https://gitbox.apache.org/repos/asf/maven.git

commit c48cc38bfe1260dd35bce4947a7eef01f81d6dde
Author: rfscholte <rf...@apache.org>
AuthorDate: Sun Oct 18 12:46:57 2020 +0200

    Improve tests
---
 .../xml/sax/filter/AbstractEventXMLFilter.java     |   2 +-
 .../maven/xml/sax/filter/AbstractSAXFilter.java    |   4 +-
 .../xml/sax/filter/BuildPomXMLFilterFactory.java   |  12 +-
 .../maven/xml/sax/filter/ConsumerPomXMLFilter.java |   7 +
 .../sax/filter/ConsumerPomXMLFilterFactory.java    |   1 +
 .../apache/maven/xml/sax/ChainedFilterTest.java    | 150 +++++++++++++++++++++
 .../xml/sax/filter/AbstractXMLFilterTests.java     | 115 ++++++++++------
 .../xml/sax/filter/ConsumerPomXMLFilterTest.java   |  10 +-
 .../maven/xml/sax/filter/ModulesXMLFilterTest.java |  10 +-
 .../maven/xml/sax/filter/ParentXMLFilterTest.java  |   7 +-
 .../sax/filter/ReactorDependencyXMLFilterTest.java |   9 +-
 11 files changed, 264 insertions(+), 63 deletions(-)

diff --git a/maven-xml/src/main/java/org/apache/maven/xml/sax/filter/AbstractEventXMLFilter.java b/maven-xml/src/main/java/org/apache/maven/xml/sax/filter/AbstractEventXMLFilter.java
index 1b72d11..9ef6917 100644
--- a/maven-xml/src/main/java/org/apache/maven/xml/sax/filter/AbstractEventXMLFilter.java
+++ b/maven-xml/src/main/java/org/apache/maven/xml/sax/filter/AbstractEventXMLFilter.java
@@ -64,7 +64,7 @@ abstract class AbstractEventXMLFilter extends AbstractSAXFilter
 
     AbstractEventXMLFilter( AbstractSAXFilter parent )
     {
-        setParent( parent );
+        super( parent );
     }
 
     private SAXEventFactory getEventFactory()
diff --git a/maven-xml/src/main/java/org/apache/maven/xml/sax/filter/AbstractSAXFilter.java b/maven-xml/src/main/java/org/apache/maven/xml/sax/filter/AbstractSAXFilter.java
index 1761936..b930f77 100644
--- a/maven-xml/src/main/java/org/apache/maven/xml/sax/filter/AbstractSAXFilter.java
+++ b/maven-xml/src/main/java/org/apache/maven/xml/sax/filter/AbstractSAXFilter.java
@@ -35,14 +35,14 @@ public class AbstractSAXFilter extends XMLFilterImpl implements LexicalHandler
 {
     private LexicalHandler lexicalHandler;
     
-    AbstractSAXFilter()
+    public AbstractSAXFilter()
     {
         super();
     }
 
     public AbstractSAXFilter( AbstractSAXFilter parent )
     {
-        setParent( parent );
+        super( parent );
         parent.setLexicalHandler( this );
     }
     
diff --git a/maven-xml/src/main/java/org/apache/maven/xml/sax/filter/BuildPomXMLFilterFactory.java b/maven-xml/src/main/java/org/apache/maven/xml/sax/filter/BuildPomXMLFilterFactory.java
index 626c7ac..4468da2 100644
--- a/maven-xml/src/main/java/org/apache/maven/xml/sax/filter/BuildPomXMLFilterFactory.java
+++ b/maven-xml/src/main/java/org/apache/maven/xml/sax/filter/BuildPomXMLFilterFactory.java
@@ -22,6 +22,7 @@ package org.apache.maven.xml.sax.filter;
 import java.nio.file.Path;
 import java.util.Optional;
 import java.util.function.BiFunction;
+import java.util.function.Consumer;
 import java.util.function.Function;
 
 import javax.xml.parsers.ParserConfigurationException;
@@ -40,16 +41,16 @@ import org.xml.sax.ext.LexicalHandler;
  */
 public class BuildPomXMLFilterFactory
 {
-    private final LexicalHandler lexicalHandler;
+    private final Consumer<LexicalHandler> lexicalHandlerConsumer;
     
     public BuildPomXMLFilterFactory()
     {
         this( null ); 
     }
     
-    public BuildPomXMLFilterFactory( LexicalHandler lexicalHandler )
+    public BuildPomXMLFilterFactory( Consumer<LexicalHandler> lexicalHandlerConsumer )
     {
-        this.lexicalHandler = lexicalHandler;
+        this.lexicalHandlerConsumer = lexicalHandlerConsumer;
     }
 
     /**
@@ -65,7 +66,10 @@ public class BuildPomXMLFilterFactory
     {
         AbstractSAXFilter parent = new AbstractSAXFilter();
         parent.setParent( getXMLReader() );
-        parent.setLexicalHandler( lexicalHandler );
+        if ( lexicalHandlerConsumer != null )
+        {
+            lexicalHandlerConsumer.accept( parent );
+        }
 
         if ( getDependencyKeyToVersionMapper() != null )
         {
diff --git a/maven-xml/src/main/java/org/apache/maven/xml/sax/filter/ConsumerPomXMLFilter.java b/maven-xml/src/main/java/org/apache/maven/xml/sax/filter/ConsumerPomXMLFilter.java
index c02092d..b2a8ec1 100644
--- a/maven-xml/src/main/java/org/apache/maven/xml/sax/filter/ConsumerPomXMLFilter.java
+++ b/maven-xml/src/main/java/org/apache/maven/xml/sax/filter/ConsumerPomXMLFilter.java
@@ -20,6 +20,7 @@ package org.apache.maven.xml.sax.filter;
  */
 
 import org.xml.sax.XMLReader;
+import org.xml.sax.ext.LexicalHandler;
 
 /**
  * XML Filter to transform pom.xml to consumer pom.
@@ -50,4 +51,10 @@ public class ConsumerPomXMLFilter extends AbstractSAXFilter
             super.setParent( parent );
         }
     }
+    
+    @Override
+    public LexicalHandler getLexicalHandler()
+    {
+        return ( (AbstractSAXFilter) getParent() ).getLexicalHandler();
+    }
 }
diff --git a/maven-xml/src/main/java/org/apache/maven/xml/sax/filter/ConsumerPomXMLFilterFactory.java b/maven-xml/src/main/java/org/apache/maven/xml/sax/filter/ConsumerPomXMLFilterFactory.java
index 5703b89..298a84c 100644
--- a/maven-xml/src/main/java/org/apache/maven/xml/sax/filter/ConsumerPomXMLFilterFactory.java
+++ b/maven-xml/src/main/java/org/apache/maven/xml/sax/filter/ConsumerPomXMLFilterFactory.java
@@ -46,6 +46,7 @@ public class ConsumerPomXMLFilterFactory
     {
         BuildPomXMLFilter parent = buildPomXMLFilterFactory.get( projectPath );
         
+        
         // Ensure that xs:any elements aren't touched by next filters
         AbstractSAXFilter filter = new FastForwardFilter( parent );
         
diff --git a/maven-xml/src/test/java/org/apache/maven/xml/sax/ChainedFilterTest.java b/maven-xml/src/test/java/org/apache/maven/xml/sax/ChainedFilterTest.java
new file mode 100644
index 0000000..87fb6de
--- /dev/null
+++ b/maven-xml/src/test/java/org/apache/maven/xml/sax/ChainedFilterTest.java
@@ -0,0 +1,150 @@
+package org.apache.maven.xml.sax;
+
+/*
+ * 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 static org.xmlunit.assertj.XmlAssert.assertThat;
+
+import java.io.StringReader;
+import java.io.StringWriter;
+import java.io.Writer;
+
+import javax.xml.transform.Transformer;
+import javax.xml.transform.sax.SAXResult;
+import javax.xml.transform.sax.SAXSource;
+import javax.xml.transform.sax.SAXTransformerFactory;
+import javax.xml.transform.sax.TransformerHandler;
+import javax.xml.transform.stream.StreamResult;
+
+import org.apache.maven.xml.Factories;
+import org.apache.maven.xml.sax.filter.AbstractSAXFilter;
+import org.junit.Test;
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
+
+/**
+ * A small example of a pipeline of 2 XML Filters, to understand how to get the expected result
+ * 
+ * @author Robert Scholte
+ * @since 3.7.0
+ */
+public class ChainedFilterTest
+{
+
+    @Test
+    public void test()
+        throws Exception
+    {
+        String input = "<project><!-- aBc --><name>dEf</name></project>";
+
+        SAXTransformerFactory transformerFactory = (SAXTransformerFactory) Factories.newTransformerFactory();
+        TransformerHandler transformerHandler = transformerFactory.newTransformerHandler();
+
+        Writer writer = new StringWriter();
+        StreamResult result = new StreamResult( writer );
+        transformerHandler.setResult( result );
+
+        Transformer transformer = transformerFactory.newTransformer();
+        SAXResult transformResult = new SAXResult( transformerHandler );
+
+        // Watch the order of filters! In reverse order the values would be 'AweSome'
+        AbstractSAXFilter filter = new Awesome();
+        
+        // AbstractSAXFilter doesn't have a constructor with XMLReader, otherwise the LexicalHandler pipeline will be broken
+        filter.setParent( Factories.newXMLReader() );
+        
+        // LexicalHandler of transformerResult must be the first filter
+        transformResult.setLexicalHandler( filter );
+
+        filter = new ChangeCase( filter );
+        // LexicalHandler on last filter must be the transformerHandler
+        filter.setLexicalHandler( transformerHandler );
+
+        SAXSource transformSource = new SAXSource( filter, new InputSource( new StringReader( input ) ) );
+
+        transformer.transform( transformSource, transformResult );
+
+        String expected = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
+            + "<project><!--AWESOME--><name>awesome</name></project>";
+        assertThat( writer.toString() ).and( expected ).areIdentical();
+    }
+
+    static class ChangeCase
+        extends AbstractSAXFilter
+    {
+
+        public ChangeCase()
+        {
+            super();
+        }
+
+        public ChangeCase( AbstractSAXFilter parent )
+        {
+            super( parent );
+        }
+
+        @Override
+        public void comment( char[] ch, int start, int length )
+            throws SAXException
+        {
+            String s = new String( ch, start, length ).toUpperCase();
+            super.comment( s.toCharArray(), 0, s.length() );
+        }
+
+        @Override
+        public void characters( char[] ch, int start, int length )
+            throws SAXException
+        {
+            String s = new String( ch, start, length ).toLowerCase();
+            super.characters( s.toCharArray(), 0, s.length() );
+        }
+    }
+
+    static class Awesome
+        extends AbstractSAXFilter
+    {
+
+        public Awesome()
+        {
+            super();
+        }
+
+        public Awesome( AbstractSAXFilter parent )
+        {
+            super( parent );
+        }
+
+        @Override
+        public void comment( char[] ch, int start, int length )
+            throws SAXException
+        {
+            String s = "AweSome";
+            super.comment( s.toCharArray(), 0, s.length() );
+        }
+
+        @Override
+        public void characters( char[] ch, int start, int length )
+            throws SAXException
+        {
+            String s = "AweSome";
+            super.characters( s.toCharArray(), 0, s.length() );
+        }
+    }
+
+}
diff --git a/maven-xml/src/test/java/org/apache/maven/xml/sax/filter/AbstractXMLFilterTests.java b/maven-xml/src/test/java/org/apache/maven/xml/sax/filter/AbstractXMLFilterTests.java
index 2b2f173..862cb76 100644
--- a/maven-xml/src/test/java/org/apache/maven/xml/sax/filter/AbstractXMLFilterTests.java
+++ b/maven-xml/src/test/java/org/apache/maven/xml/sax/filter/AbstractXMLFilterTests.java
@@ -24,6 +24,7 @@ import java.io.StringReader;
 import java.io.StringWriter;
 import java.io.Writer;
 import java.net.ContentHandler;
+import java.util.function.Consumer;
 
 import javax.xml.parsers.ParserConfigurationException;
 import javax.xml.transform.OutputKeys;
@@ -39,28 +40,18 @@ import org.apache.maven.xml.Factories;
 import org.xml.sax.InputSource;
 import org.xml.sax.SAXException;
 import org.xml.sax.XMLReader;
+import org.xml.sax.ext.LexicalHandler;
 
 public abstract class AbstractXMLFilterTests
 {
-    public AbstractXMLFilterTests()
+    protected AbstractSAXFilter getFilter() throws TransformerException, SAXException, ParserConfigurationException
     {
-        super();
+        throw new UnsupportedOperationException( "Override one of the getFilter() methods" );
     }
     
-    protected abstract AbstractSAXFilter getFilter() throws TransformerException, SAXException, ParserConfigurationException;
-    
-    private void setParent( AbstractSAXFilter filter ) throws SAXException, ParserConfigurationException
+    protected AbstractSAXFilter getFilter( Consumer<LexicalHandler> result )  throws TransformerException, SAXException, ParserConfigurationException
     {
-        if( filter.getParent() == null )
-        {
-            XMLReader r = Factories.newXMLReader();
-            
-            AbstractSAXFilter perChar = new PerCharXMLFilter();
-            perChar.setParent( r );
-            
-            filter.setParent( perChar );
-            filter.setFeature( "http://xml.org/sax/features/namespaces", true );
-        }
+        return getFilter();
     }
     
     protected String omitXmlDeclaration() {
@@ -77,33 +68,54 @@ public abstract class AbstractXMLFilterTests
         return transform( new StringReader( input ) );
     }
 
-    protected String transform( Reader input ) throws TransformerException, SAXException, ParserConfigurationException
-    {
-        AbstractSAXFilter filter = getFilter();
-        setParent( filter );
-
-        return transform( input, filter );
-    }
-    
+    /**
+     * Use this method only for testing a single filter.
+     * 
+     * @param input
+     * @param filter
+     * @return
+     * @throws TransformerException
+     * @throws SAXException
+     * @throws ParserConfigurationException
+     */
     protected String transform( String input, AbstractSAXFilter filter ) 
         throws TransformerException, SAXException, ParserConfigurationException
     {
         setParent( filter );
+        
+        SAXTransformerFactory transformerFactory = (SAXTransformerFactory) Factories.newTransformerFactory();
+        TransformerHandler transformerHandler = transformerFactory.newTransformerHandler();
+        
+        transformerHandler.getTransformer().setOutputProperty( OutputKeys.OMIT_XML_DECLARATION, omitXmlDeclaration() );
+        if ( indentAmount() != null )
+        {
+            transformerHandler.getTransformer().setOutputProperty( OutputKeys.INDENT, "yes" );
+            transformerHandler.getTransformer().setOutputProperty( "{http://xml.apache.org/xslt}indent-amount",
+                                                                   indentAmount() );
+        }
+        
+        Transformer transformer = transformerFactory.newTransformer();
+        
+        Writer writer = new StringWriter();
+        StreamResult result = new StreamResult( writer );
+        transformerHandler.setResult( result );
 
-        filter = new PerCharXMLFilter( filter );
+        SAXResult transformResult = new SAXResult( transformerHandler );
+        SAXSource transformSource = new SAXSource( filter, new InputSource( new StringReader( input ) ) );
+        
+        transformResult.setLexicalHandler( filter );
+        transformer.transform( transformSource, transformResult );
+
+        return writer.toString();
 
-        return transform( new StringReader( input ), filter );
     }
 
-    protected String transform( Reader input, AbstractSAXFilter filter )
+    protected String transform( Reader input )
         throws TransformerException, SAXException, ParserConfigurationException
     {
-        Writer writer = new StringWriter();
-        StreamResult result = new StreamResult( writer );
-
         SAXTransformerFactory transformerFactory = (SAXTransformerFactory) Factories.newTransformerFactory();
         TransformerHandler transformerHandler = transformerFactory.newTransformerHandler();
-        filter.setLexicalHandler( transformerHandler );
+        
         transformerHandler.getTransformer().setOutputProperty( OutputKeys.OMIT_XML_DECLARATION, omitXmlDeclaration() );
         if ( indentAmount() != null )
         {
@@ -111,18 +123,43 @@ public abstract class AbstractXMLFilterTests
             transformerHandler.getTransformer().setOutputProperty( "{http://xml.apache.org/xslt}indent-amount",
                                                                    indentAmount() );
         }
-        transformerHandler.setResult( result );
-        Transformer transformer = transformerFactory.newTransformer();
         
-        SAXSource transformSource = new SAXSource( filter, new InputSource( input ) );
+        Transformer transformer = transformerFactory.newTransformer();
+
+        Writer writer = new StringWriter();
+        StreamResult result = new StreamResult( writer );
+        transformerHandler.setResult( result );
 
         SAXResult transformResult = new SAXResult( transformerHandler );
-        transformResult.setLexicalHandler( filter );
+        
+        AbstractSAXFilter filter = getFilter( l -> transformResult.setLexicalHandler( l ) );
+        setParent( filter );
+        
+        filter = new PerCharXMLFilter( filter );
+
+        filter.setLexicalHandler( transformerHandler );
+        
+        SAXSource transformSource = new SAXSource( filter, new InputSource( input ) );
+        
         transformer.transform( transformSource, transformResult );
 
         return writer.toString();
     }
     
+    private void setParent( AbstractSAXFilter filter ) throws SAXException, ParserConfigurationException
+    {
+        if( filter.getParent() == null )
+        {
+            XMLReader r = Factories.newXMLReader();
+            
+            AbstractSAXFilter perChar = new PerCharXMLFilter();
+            perChar.setParent( r );
+            
+            filter.setParent( perChar );
+            filter.setFeature( "http://xml.org/sax/features/namespaces", true );
+        }
+    }
+
     /**
      * From {@link ContentHandler}
      * <q>Your code should not assume that algorithms using char-at-a-time idioms will be working in characterunits; 
@@ -156,16 +193,6 @@ public abstract class AbstractXMLFilterTests
         }
         
         @Override
-        public void comment( char[] ch, int start, int length )
-            throws SAXException
-        {
-            for ( int i = 0; i < length; i++ )
-            {
-                super.comment( ch, start + i, 1 );
-            }
-        }
-        
-        @Override
         public void ignorableWhitespace( char[] ch, int start, int length )
             throws SAXException
         {
diff --git a/maven-xml/src/test/java/org/apache/maven/xml/sax/filter/ConsumerPomXMLFilterTest.java b/maven-xml/src/test/java/org/apache/maven/xml/sax/filter/ConsumerPomXMLFilterTest.java
index 161519a..29c47d4 100644
--- a/maven-xml/src/test/java/org/apache/maven/xml/sax/filter/ConsumerPomXMLFilterTest.java
+++ b/maven-xml/src/test/java/org/apache/maven/xml/sax/filter/ConsumerPomXMLFilterTest.java
@@ -25,14 +25,15 @@ import java.nio.file.Path;
 import java.nio.file.Paths;
 import java.util.Optional;
 import java.util.function.BiFunction;
+import java.util.function.Consumer;
 import java.util.function.Function;
 
 import javax.xml.parsers.ParserConfigurationException;
 import javax.xml.transform.TransformerConfigurationException;
 
-import org.junit.Ignore;
 import org.junit.Test;
 import org.xml.sax.SAXException;
+import org.xml.sax.ext.LexicalHandler;
 
 public class ConsumerPomXMLFilterTest extends AbstractXMLFilterTests
 {
@@ -43,9 +44,10 @@ public class ConsumerPomXMLFilterTest extends AbstractXMLFilterTests
     }
     
     @Override
-    protected AbstractSAXFilter getFilter() throws SAXException, ParserConfigurationException, TransformerConfigurationException
+    protected AbstractSAXFilter getFilter( Consumer<LexicalHandler> lexicalHandlerConsumer )
+        throws SAXException, ParserConfigurationException, TransformerConfigurationException
     {
-        final BuildPomXMLFilterFactory buildPomXMLFilterFactory = new BuildPomXMLFilterFactory()
+        final BuildPomXMLFilterFactory buildPomXMLFilterFactory = new BuildPomXMLFilterFactory( lexicalHandlerConsumer )
         {
             @Override
             protected Function<Path, Optional<RelativeProject>> getRelativePathMapper()
@@ -234,7 +236,7 @@ public class ConsumerPomXMLFilterTest extends AbstractXMLFilterTests
     }
     
     @Test
-    @Ignore
+//    @Ignore
     public void lexicalHandler() throws Exception
     {
         String input = "<project><!--before--><modules>"
diff --git a/maven-xml/src/test/java/org/apache/maven/xml/sax/filter/ModulesXMLFilterTest.java b/maven-xml/src/test/java/org/apache/maven/xml/sax/filter/ModulesXMLFilterTest.java
index 552b721..103794c 100644
--- a/maven-xml/src/test/java/org/apache/maven/xml/sax/filter/ModulesXMLFilterTest.java
+++ b/maven-xml/src/test/java/org/apache/maven/xml/sax/filter/ModulesXMLFilterTest.java
@@ -21,15 +21,19 @@ package org.apache.maven.xml.sax.filter;
 
 import static org.xmlunit.assertj.XmlAssert.assertThat;
 
-import org.apache.maven.xml.sax.filter.ModulesXMLFilter;
+import java.util.function.Consumer;
+
 import org.junit.Test;
+import org.xml.sax.ext.LexicalHandler;
 
 public class ModulesXMLFilterTest extends AbstractXMLFilterTests {
 
 	@Override
-	protected ModulesXMLFilter getFilter()
+	protected ModulesXMLFilter getFilter( Consumer<LexicalHandler> lexicalHandlerConsumer )
 	{
-	    return new ModulesXMLFilter();
+	    ModulesXMLFilter filter = new ModulesXMLFilter();
+	    lexicalHandlerConsumer.accept( filter );
+	    return filter;
 	}
 	
 	@Test
diff --git a/maven-xml/src/test/java/org/apache/maven/xml/sax/filter/ParentXMLFilterTest.java b/maven-xml/src/test/java/org/apache/maven/xml/sax/filter/ParentXMLFilterTest.java
index bb00222..eee0359 100644
--- a/maven-xml/src/test/java/org/apache/maven/xml/sax/filter/ParentXMLFilterTest.java
+++ b/maven-xml/src/test/java/org/apache/maven/xml/sax/filter/ParentXMLFilterTest.java
@@ -23,25 +23,26 @@ import static org.junit.Assert.assertEquals;
 
 import java.nio.file.Paths;
 import java.util.Optional;
+import java.util.function.Consumer;
 
 import javax.xml.parsers.ParserConfigurationException;
 import javax.xml.transform.TransformerException;
 
-import org.apache.maven.xml.sax.filter.ParentXMLFilter;
-import org.apache.maven.xml.sax.filter.RelativeProject;
 import org.junit.Test;
 import org.xml.sax.SAXException;
+import org.xml.sax.ext.LexicalHandler;
 
 public class ParentXMLFilterTest extends AbstractXMLFilterTests
 {
     @Override
-    protected ParentXMLFilter getFilter()
+    protected ParentXMLFilter getFilter( Consumer<LexicalHandler> lexicalHandlerConsumer )
         throws TransformerException, SAXException, ParserConfigurationException
     {
         ParentXMLFilter filter = new ParentXMLFilter( x -> Optional.of( new RelativeProject( "GROUPID", 
                                                                                            "ARTIFACTID",
                                                                                            "1.0.0" ) ) );
         filter.setProjectPath( Paths.get( "pom.xml").toAbsolutePath() );
+        lexicalHandlerConsumer.accept( filter );
         
         return filter;
     }
diff --git a/maven-xml/src/test/java/org/apache/maven/xml/sax/filter/ReactorDependencyXMLFilterTest.java b/maven-xml/src/test/java/org/apache/maven/xml/sax/filter/ReactorDependencyXMLFilterTest.java
index db6606c..49f7354 100644
--- a/maven-xml/src/test/java/org/apache/maven/xml/sax/filter/ReactorDependencyXMLFilterTest.java
+++ b/maven-xml/src/test/java/org/apache/maven/xml/sax/filter/ReactorDependencyXMLFilterTest.java
@@ -20,19 +20,24 @@ package org.apache.maven.xml.sax.filter;
  */
 import static org.xmlunit.assertj.XmlAssert.assertThat;
 
+import java.util.function.Consumer;
+
 import javax.xml.parsers.ParserConfigurationException;
 import javax.xml.transform.TransformerException;
 
 import org.junit.Test;
 import org.xml.sax.SAXException;
+import org.xml.sax.ext.LexicalHandler;
 
 public class ReactorDependencyXMLFilterTest extends AbstractXMLFilterTests
 {
     @Override
-    protected ReactorDependencyXMLFilter getFilter()
+    protected ReactorDependencyXMLFilter getFilter( Consumer<LexicalHandler> lexicalHandlerConsumer )
         throws TransformerException, SAXException, ParserConfigurationException
     {
-        return new ReactorDependencyXMLFilter( (g, a) -> "1.0.0" );
+        ReactorDependencyXMLFilter filter = new ReactorDependencyXMLFilter( (g, a) -> "1.0.0" );
+        lexicalHandlerConsumer.accept( filter );
+        return filter;
     }
 
     @Test


[maven] 01/06: Merge branch 'master' of https://gitbox.apache.org/repos/asf/maven

Posted by rf...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

rfscholte pushed a commit to branch MNG-6999
in repository https://gitbox.apache.org/repos/asf/maven.git

commit 789d75fc68365e0a1281a3532a07e2e744a76b30
Merge: f211600 7c7de41
Author: rfscholte <rf...@apache.org>
AuthorDate: Fri Oct 16 20:34:10 2020 +0200

    Merge branch 'master' of https://gitbox.apache.org/repos/asf/maven

 .github/workflows/maven.yml                        |  17 +-
 Jenkinsfile                                        |  14 +-
 README.md                                          |  20 +-
 apache-maven/README.txt                            |   2 +-
 ...f4j-api-1.7.29.txt => MIT-slf4j-api-1.7.30.txt} |   2 +-
 .../execution/DefaultMavenExecutionRequest.java    |   6 +-
 .../lifecycle/internal/BuildThreadFactory.java     |   4 +-
 .../DefaultPluginDependenciesResolver.java         |  12 +-
 .../maven/plugin/internal/PlexusUtilsInjector.java |  87 ----
 .../project/DefaultProjectBuildingHelper.java      |   5 +-
 .../apache/maven/project/ProjectModelResolver.java |   2 +-
 .../main/resources/META-INF/maven/extension.xml    |   1 +
 .../apache/maven/project/ProjectBuilderTest.java   |  14 +
 .../project-builder/MNG-6983/parent-pom.xml        |  38 ++
 .../test/projects/project-builder/MNG-6983/pom.xml |  22 +
 .../main/java/org/apache/maven/cli/MavenCli.java   | 492 ++++++++++++---------
 .../java/org/apache/maven/cli/MavenCliTest.java    |  91 +++-
 maven-model/src/main/mdo/maven.mdo                 |  16 +-
 .../repository/internal/DefaultModelResolver.java  |   2 +-
 maven-wrapper/pom.xml                              |   2 +-
 pom.xml                                            |   6 +-
 21 files changed, 505 insertions(+), 350 deletions(-)

diff --cc maven-core/src/test/java/org/apache/maven/project/ProjectBuilderTest.java
index 5493d89,7cd3758..bb9e58b
--- a/maven-core/src/test/java/org/apache/maven/project/ProjectBuilderTest.java
+++ b/maven-core/src/test/java/org/apache/maven/project/ProjectBuilderTest.java
@@@ -35,7 -34,9 +35,8 @@@ import java.util.List
  import java.util.Properties;
  
  import org.apache.maven.AbstractCoreMavenComponentTestCase;
 -import org.apache.maven.artifact.InvalidArtifactRTException;
  import org.apache.maven.execution.MavenSession;
+ import org.apache.maven.model.Plugin;
  import org.apache.maven.model.building.FileModelSource;
  import org.apache.maven.model.building.ModelBuildingRequest;
  import org.apache.maven.model.building.ModelSource;


[maven] 02/06: MNG-6999: LexicalHandler is as same level as ContentHandler, not as parent

Posted by rf...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

rfscholte pushed a commit to branch MNG-6999
in repository https://gitbox.apache.org/repos/asf/maven.git

commit 4f4e913d74a3b87240cef8f4794f51f22c190db5
Author: rfscholte <rf...@apache.org>
AuthorDate: Sat Oct 17 15:44:14 2020 +0200

    MNG-6999: LexicalHandler is as same level as ContentHandler, not as parent
---
 .../main/java/org/apache/maven/xml/sax/filter/AbstractSAXFilter.java  | 4 +---
 .../main/java/org/apache/maven/xml/sax/filter/BuildPomXMLFilter.java  | 3 +--
 .../java/org/apache/maven/xml/sax/filter/ConsumerPomXMLFilter.java    | 3 +--
 .../main/java/org/apache/maven/xml/sax/filter/FastForwardFilter.java  | 4 +---
 .../java/org/apache/maven/xml/sax/filter/AbstractXMLFilterTests.java  | 3 +--
 5 files changed, 5 insertions(+), 12 deletions(-)

diff --git a/maven-xml/src/main/java/org/apache/maven/xml/sax/filter/AbstractSAXFilter.java b/maven-xml/src/main/java/org/apache/maven/xml/sax/filter/AbstractSAXFilter.java
index 454ae83..e9df96f 100644
--- a/maven-xml/src/main/java/org/apache/maven/xml/sax/filter/AbstractSAXFilter.java
+++ b/maven-xml/src/main/java/org/apache/maven/xml/sax/filter/AbstractSAXFilter.java
@@ -20,7 +20,6 @@ package org.apache.maven.xml.sax.filter;
  */
 
 import org.xml.sax.SAXException;
-import org.xml.sax.XMLReader;
 import org.xml.sax.ext.LexicalHandler;
 import org.xml.sax.helpers.XMLFilterImpl;
 
@@ -41,10 +40,9 @@ public class AbstractSAXFilter extends XMLFilterImpl implements LexicalHandler
         super();
     }
 
-    public <T extends XMLReader & LexicalHandler> AbstractSAXFilter( T parent )
+    public AbstractSAXFilter( AbstractSAXFilter parent )
     {
         setParent( parent );
-        setLexicalHandler( parent );
     }
     
     public LexicalHandler getLexicalHandler()
diff --git a/maven-xml/src/main/java/org/apache/maven/xml/sax/filter/BuildPomXMLFilter.java b/maven-xml/src/main/java/org/apache/maven/xml/sax/filter/BuildPomXMLFilter.java
index 14bcf70..56b30e8 100644
--- a/maven-xml/src/main/java/org/apache/maven/xml/sax/filter/BuildPomXMLFilter.java
+++ b/maven-xml/src/main/java/org/apache/maven/xml/sax/filter/BuildPomXMLFilter.java
@@ -20,7 +20,6 @@ package org.apache.maven.xml.sax.filter;
  */
 
 import org.xml.sax.XMLReader;
-import org.xml.sax.ext.LexicalHandler;
 
 /**
  * Filter to adjust pom on filesystem before being processed for effective pom.
@@ -39,7 +38,7 @@ public class BuildPomXMLFilter extends AbstractSAXFilter
         super();
     }
 
-    <T extends XMLReader & LexicalHandler> BuildPomXMLFilter( T parent )
+    BuildPomXMLFilter( AbstractSAXFilter parent )
     {
         super( parent );
     }
diff --git a/maven-xml/src/main/java/org/apache/maven/xml/sax/filter/ConsumerPomXMLFilter.java b/maven-xml/src/main/java/org/apache/maven/xml/sax/filter/ConsumerPomXMLFilter.java
index 1c227a7..c02092d 100644
--- a/maven-xml/src/main/java/org/apache/maven/xml/sax/filter/ConsumerPomXMLFilter.java
+++ b/maven-xml/src/main/java/org/apache/maven/xml/sax/filter/ConsumerPomXMLFilter.java
@@ -20,7 +20,6 @@ package org.apache.maven.xml.sax.filter;
  */
 
 import org.xml.sax.XMLReader;
-import org.xml.sax.ext.LexicalHandler;
 
 /**
  * XML Filter to transform pom.xml to consumer pom.
@@ -35,7 +34,7 @@ import org.xml.sax.ext.LexicalHandler;
  */
 public class ConsumerPomXMLFilter extends AbstractSAXFilter
 {
-    <T extends XMLReader & LexicalHandler> ConsumerPomXMLFilter( T filter )
+    ConsumerPomXMLFilter( AbstractSAXFilter filter )
     {
         super( filter );
     }
diff --git a/maven-xml/src/main/java/org/apache/maven/xml/sax/filter/FastForwardFilter.java b/maven-xml/src/main/java/org/apache/maven/xml/sax/filter/FastForwardFilter.java
index 0100e6b..5c4a363 100644
--- a/maven-xml/src/main/java/org/apache/maven/xml/sax/filter/FastForwardFilter.java
+++ b/maven-xml/src/main/java/org/apache/maven/xml/sax/filter/FastForwardFilter.java
@@ -26,8 +26,6 @@ import org.xml.sax.Attributes;
 import org.xml.sax.ContentHandler;
 import org.xml.sax.SAXException;
 import org.xml.sax.XMLFilter;
-import org.xml.sax.XMLReader;
-import org.xml.sax.ext.LexicalHandler;
 
 /**
  * This filter will skip all following filters and write directly to the output.
@@ -61,7 +59,7 @@ class FastForwardFilter extends AbstractSAXFilter
         super();
     }
 
-    <T extends XMLReader & LexicalHandler> FastForwardFilter( T parent )
+    FastForwardFilter( AbstractSAXFilter parent )
     {
         super( parent );
     }
diff --git a/maven-xml/src/test/java/org/apache/maven/xml/sax/filter/AbstractXMLFilterTests.java b/maven-xml/src/test/java/org/apache/maven/xml/sax/filter/AbstractXMLFilterTests.java
index f01f268..2b2f173 100644
--- a/maven-xml/src/test/java/org/apache/maven/xml/sax/filter/AbstractXMLFilterTests.java
+++ b/maven-xml/src/test/java/org/apache/maven/xml/sax/filter/AbstractXMLFilterTests.java
@@ -39,7 +39,6 @@ import org.apache.maven.xml.Factories;
 import org.xml.sax.InputSource;
 import org.xml.sax.SAXException;
 import org.xml.sax.XMLReader;
-import org.xml.sax.ext.LexicalHandler;
 
 public abstract class AbstractXMLFilterTests
 {
@@ -141,7 +140,7 @@ public abstract class AbstractXMLFilterTests
             super();
         }
         
-        public <T extends XMLReader & LexicalHandler> PerCharXMLFilter( T parent )
+        public PerCharXMLFilter( AbstractSAXFilter parent )
         {
             super( parent );
         }


[maven] 06/06: [MNG-6999] Chained (consumer) XMLFilters can result in "floating" comments

Posted by rf...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

rfscholte pushed a commit to branch MNG-6999
in repository https://gitbox.apache.org/repos/asf/maven.git

commit 1809ae05d86ac5f194d0d1b2235006b525af3f87
Author: rfscholte <rf...@apache.org>
AuthorDate: Wed Oct 21 20:13:02 2020 +0200

    [MNG-6999] Chained (consumer) XMLFilters can result in "floating" comments
---
 .../aether/ConsumerModelSourceTransformer.java     | 13 +++--
 .../aether/ConsumerModelSourceTransformerTest.java | 22 +++-----
 .../{transform.pom => transform/after.pom}         |  2 +
 .../{transform.pom => transform/before.pom}        |  5 ++
 .../building/AbstractModelSourceTransformer.java   | 64 +++++++++++++---------
 .../building/BuildModelSourceTransformer.java      | 11 +++-
 .../building/DefaultBuildPomXMLFilterFactory.java  |  6 +-
 .../DefaultInheritanceAssemblerTest.java           |  7 ++-
 .../xml/sax/filter/BuildPomXMLFilterFactory.java   |  4 +-
 .../apache/maven/xml/sax/ChainedFilterTest.java    |  2 +-
 10 files changed, 83 insertions(+), 53 deletions(-)

diff --git a/maven-core/src/main/java/org/apache/maven/internal/aether/ConsumerModelSourceTransformer.java b/maven-core/src/main/java/org/apache/maven/internal/aether/ConsumerModelSourceTransformer.java
index 728c78e..d81571d 100644
--- a/maven-core/src/main/java/org/apache/maven/internal/aether/ConsumerModelSourceTransformer.java
+++ b/maven-core/src/main/java/org/apache/maven/internal/aether/ConsumerModelSourceTransformer.java
@@ -23,6 +23,7 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.nio.file.Files;
 import java.nio.file.Path;
+import java.util.function.Consumer;
 
 import javax.xml.parsers.ParserConfigurationException;
 import javax.xml.stream.XMLInputFactory;
@@ -37,18 +38,21 @@ import javax.xml.transform.sax.TransformerHandler;
 import org.apache.maven.model.building.AbstractModelSourceTransformer;
 import org.apache.maven.model.building.DefaultBuildPomXMLFilterFactory;
 import org.apache.maven.model.building.TransformerContext;
-import org.apache.maven.xml.Factories;
 import org.apache.maven.xml.internal.DefaultConsumerPomXMLFilterFactory;
 import org.apache.maven.xml.sax.filter.AbstractSAXFilter;
 import org.xml.sax.SAXException;
+import org.xml.sax.ext.LexicalHandler;
 
 class ConsumerModelSourceTransformer extends AbstractModelSourceTransformer
 {
     @Override
-    protected AbstractSAXFilter getSAXFilter( Path pomFile, TransformerContext context )
+    protected AbstractSAXFilter getSAXFilter( Path pomFile, 
+                                              TransformerContext context,
+                                              Consumer<LexicalHandler> lexicalHandlerConsumer )
         throws TransformerConfigurationException, SAXException, ParserConfigurationException
     {
-        return new DefaultConsumerPomXMLFilterFactory( new DefaultBuildPomXMLFilterFactory( context ) ).get( pomFile );
+        return new DefaultConsumerPomXMLFilterFactory( new DefaultBuildPomXMLFilterFactory( context,
+                                                                        lexicalHandlerConsumer ) ).get( pomFile );
     }
     
     /**
@@ -65,8 +69,7 @@ class ConsumerModelSourceTransformer extends AbstractModelSourceTransformer
     {
         final TransformerHandler transformerHandler;
         
-        final SAXTransformerFactory transformerFactory =
-                        (SAXTransformerFactory) Factories.newTransformerFactory();
+        final SAXTransformerFactory transformerFactory = getTransformerFactory();
         
         // Keep same encoding+version
         try ( InputStream input = Files.newInputStream( pomFile ) )
diff --git a/maven-core/src/test/java/org/apache/maven/internal/aether/ConsumerModelSourceTransformerTest.java b/maven-core/src/test/java/org/apache/maven/internal/aether/ConsumerModelSourceTransformerTest.java
index 4863264..9476f3e 100644
--- a/maven-core/src/test/java/org/apache/maven/internal/aether/ConsumerModelSourceTransformerTest.java
+++ b/maven-core/src/test/java/org/apache/maven/internal/aether/ConsumerModelSourceTransformerTest.java
@@ -1,11 +1,5 @@
 package org.apache.maven.internal.aether;
 
-import java.io.BufferedReader;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.nio.charset.StandardCharsets;
-import java.nio.file.Files;
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -25,9 +19,10 @@ import java.nio.file.Files;
  * under the License.
  */
 
+import java.io.InputStream;
+import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
-import java.util.stream.Collectors;
 
 import org.apache.maven.model.Model;
 import org.apache.maven.model.building.TransformerContext;
@@ -41,14 +36,13 @@ public class ConsumerModelSourceTransformerTest
     @Test
     public void test() throws Exception
     {
-        Path pomFile = Paths.get( "src/test/resources/projects/transform.pom").toAbsolutePath();
-        InputStream in = transformer.transform( pomFile, new NoTransformerContext() );
-        
-        String text =
-            new BufferedReader( new InputStreamReader( in,
-                                                       StandardCharsets.UTF_8 ) ).lines().collect( Collectors.joining( "\n" ) );
+        Path beforePomFile = Paths.get( "src/test/resources/projects/transform/before.pom").toAbsolutePath();
+        Path afterPomFile = Paths.get( "src/test/resources/projects/transform/after.pom").toAbsolutePath();
 
-        XmlAssert.assertThat( in ).and( Files.newInputStream( pomFile ) ).areIdentical();
+        try( InputStream in = transformer.transform( beforePomFile, new NoTransformerContext() ) )
+        {
+            XmlAssert.assertThat( in ).and( Files.newInputStream( afterPomFile ) ).areIdentical();
+        }
     }
 
     private static class NoTransformerContext implements TransformerContext
diff --git a/maven-core/src/test/resources/projects/transform.pom b/maven-core/src/test/resources/projects/transform/after.pom
similarity index 99%
copy from maven-core/src/test/resources/projects/transform.pom
copy to maven-core/src/test/resources/projects/transform/after.pom
index f48aba3..a66fca8 100644
--- a/maven-core/src/test/resources/projects/transform.pom
+++ b/maven-core/src/test/resources/projects/transform/after.pom
@@ -29,6 +29,8 @@ under the License.
   <version>0.1-SNAPSHOT</version>
   <packaging>pom</packaging>
 
+  
+
   <build>
     <pluginManagement>
       <plugins>
diff --git a/maven-core/src/test/resources/projects/transform.pom b/maven-core/src/test/resources/projects/transform/before.pom
similarity index 95%
rename from maven-core/src/test/resources/projects/transform.pom
rename to maven-core/src/test/resources/projects/transform/before.pom
index f48aba3..c6b2bc2 100644
--- a/maven-core/src/test/resources/projects/transform.pom
+++ b/maven-core/src/test/resources/projects/transform/before.pom
@@ -29,6 +29,11 @@ under the License.
   <version>0.1-SNAPSHOT</version>
   <packaging>pom</packaging>
 
+  <modules>
+    <module>lib</module> <!-- the library -->
+    <module>app</module> <!-- the application -->
+  </modules>
+
   <build>
     <pluginManagement>
       <plugins>
diff --git a/maven-model-builder/src/main/java/org/apache/maven/model/building/AbstractModelSourceTransformer.java b/maven-model-builder/src/main/java/org/apache/maven/model/building/AbstractModelSourceTransformer.java
index 6f0f5d4..b4e8698 100644
--- a/maven-model-builder/src/main/java/org/apache/maven/model/building/AbstractModelSourceTransformer.java
+++ b/maven-model-builder/src/main/java/org/apache/maven/model/building/AbstractModelSourceTransformer.java
@@ -19,22 +19,25 @@ package org.apache.maven.model.building;
  * under the License.
  */
 
-import java.io.FileInputStream;
 import java.io.FilterInputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
 import java.io.PipedInputStream;
 import java.io.PipedOutputStream;
+import java.nio.file.Files;
 import java.nio.file.Path;
 import java.util.concurrent.atomic.AtomicInteger;
+import java.util.function.Consumer;
 
 import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.transform.Transformer;
 import javax.xml.transform.TransformerConfigurationException;
 import javax.xml.transform.TransformerException;
 import javax.xml.transform.TransformerFactory;
 import javax.xml.transform.sax.SAXResult;
 import javax.xml.transform.sax.SAXSource;
+import javax.xml.transform.sax.SAXTransformerFactory;
 import javax.xml.transform.sax.TransformerHandler;
 import javax.xml.transform.stream.StreamResult;
 
@@ -44,6 +47,7 @@ import org.apache.maven.xml.sax.filter.AbstractSAXFilter;
 import org.xml.sax.ErrorHandler;
 import org.xml.sax.SAXException;
 import org.xml.sax.SAXParseException;
+import org.xml.sax.ext.LexicalHandler;
 
 /**
  * Offers a transformation implementation based on PipelineStreams.
@@ -59,7 +63,9 @@ public abstract class AbstractModelSourceTransformer
     
     private final TransformerFactory transformerFactory = Factories.newTransformerFactory();
                     
-    protected abstract AbstractSAXFilter getSAXFilter( Path pomFile, TransformerContext context )
+    protected abstract AbstractSAXFilter getSAXFilter( Path pomFile, 
+                                                       TransformerContext context,
+                                                       Consumer<LexicalHandler> lexicalHandlerConsumer )
         throws TransformerConfigurationException, SAXException, ParserConfigurationException;
 
     protected OutputStream filterOutputStream( OutputStream outputStream, Path pomFile )
@@ -67,6 +73,11 @@ public abstract class AbstractModelSourceTransformer
         return outputStream;
     }
     
+    public SAXTransformerFactory getTransformerFactory()
+    {
+        return ( SAXTransformerFactory ) transformerFactory;
+    }
+    
     protected TransformerHandler getTransformerHandler( Path pomFile )
         throws IOException, org.apache.maven.model.building.TransformerException
     {
@@ -79,10 +90,29 @@ public abstract class AbstractModelSourceTransformer
     {
         final TransformerHandler transformerHandler = getTransformerHandler( pomFile );
 
+        final PipedOutputStream pout = new PipedOutputStream();
+        
+        OutputStream out = filterOutputStream( pout, pomFile );
+
+        final javax.xml.transform.Result result;
+        final Consumer<LexicalHandler> lexConsumer;
+        if ( transformerHandler == null )
+        {
+            result = new StreamResult( out );
+            lexConsumer = null;
+        }
+        else
+        {
+            result = new SAXResult( transformerHandler );
+            lexConsumer = l -> ( (SAXResult) result ).setLexicalHandler( new CommentRenormalizer( l ) );
+            transformerHandler.setResult( new StreamResult( out ) );
+        }
+
+        final Transformer transformer;
         final AbstractSAXFilter filter;
         try
         {
-            filter = getSAXFilter( pomFile, context );
+            filter = getSAXFilter( pomFile, context, lexConsumer );
             filter.setLexicalHandler( transformerHandler );
             // By default errors are written to stderr.
             // Hence set custom errorHandler to reduce noice 
@@ -109,6 +139,7 @@ public abstract class AbstractModelSourceTransformer
                     throw exception;
                 }
             } );
+            transformer = transformerFactory.newTransformer();
         }
         catch ( TransformerConfigurationException | SAXException | ParserConfigurationException e )
         {
@@ -116,33 +147,16 @@ public abstract class AbstractModelSourceTransformer
         }
         
         final SAXSource transformSource =
-            new SAXSource( filter,
-                           new org.xml.sax.InputSource( new FileInputStream( pomFile.toFile() ) ) );
-
-        final PipedOutputStream pout = new PipedOutputStream();
-        final PipedInputStream pipedInputStream = new PipedInputStream( pout );
-        
-        OutputStream out = filterOutputStream( pout, pomFile );
-
-        final javax.xml.transform.Result result; 
-        if ( transformerHandler == null )
-        {
-            result = new StreamResult( out );
-        }
-        else
-        {
-            result = new SAXResult( transformerHandler );
-            ( (SAXResult) result ).setLexicalHandler( new CommentRenormalizer( transformerHandler ) );
-            transformerHandler.setResult( new StreamResult( out ) );
-        }
+            new SAXSource( filter, new org.xml.sax.InputSource( Files.newInputStream( pomFile ) ) );
 
         IOExceptionHandler eh = new IOExceptionHandler();
 
+        
         Thread transformThread = new Thread( () -> 
         {
             try ( PipedOutputStream pos = pout )
             {
-                transformerFactory.newTransformer().transform( transformSource, result );
+                transformer.transform( transformSource, result );
             }
             catch ( TransformerException | IOException e )
             {
@@ -152,8 +166,8 @@ public abstract class AbstractModelSourceTransformer
         transformThread.setUncaughtExceptionHandler( eh );
         transformThread.setDaemon( true );
         transformThread.start();
-
-        return new ThreadAwareInputStream( pipedInputStream, eh );
+        
+        return new ThreadAwareInputStream( new PipedInputStream( pout ), eh );
     }
 
     private static class IOExceptionHandler
diff --git a/maven-model-builder/src/main/java/org/apache/maven/model/building/BuildModelSourceTransformer.java b/maven-model-builder/src/main/java/org/apache/maven/model/building/BuildModelSourceTransformer.java
index dbf9211..44d4c26 100644
--- a/maven-model-builder/src/main/java/org/apache/maven/model/building/BuildModelSourceTransformer.java
+++ b/maven-model-builder/src/main/java/org/apache/maven/model/building/BuildModelSourceTransformer.java
@@ -23,6 +23,7 @@ import java.io.FilterOutputStream;
 import java.io.IOException;
 import java.io.OutputStream;
 import java.nio.file.Path;
+import java.util.function.Consumer;
 
 import javax.inject.Inject;
 import javax.inject.Named;
@@ -35,6 +36,7 @@ import org.apache.maven.xml.sax.filter.BuildPomXMLFilterFactory;
 import org.apache.maven.xml.sax.filter.BuildPomXMLFilterListener;
 import org.eclipse.sisu.Nullable;
 import org.xml.sax.SAXException;
+import org.xml.sax.ext.LexicalHandler;
 
 /**
  * ModelSourceTransformer for the build pom
@@ -50,11 +52,14 @@ class BuildModelSourceTransformer extends AbstractModelSourceTransformer
     @Nullable
     private BuildPomXMLFilterListener xmlFilterListener;
     
-    protected AbstractSAXFilter getSAXFilter( Path pomFile, TransformerContext context )
+    protected AbstractSAXFilter getSAXFilter( Path pomFile,
+                                              TransformerContext context,
+                                              Consumer<LexicalHandler> lexicalHandlerConsumer )
         throws TransformerConfigurationException, SAXException, ParserConfigurationException
     {
-        BuildPomXMLFilterFactory buildPomXMLFilterFactory = new DefaultBuildPomXMLFilterFactory( context );
-        
+        BuildPomXMLFilterFactory buildPomXMLFilterFactory =
+            new DefaultBuildPomXMLFilterFactory( context, lexicalHandlerConsumer );
+
         return buildPomXMLFilterFactory.get( pomFile );
     }
     
diff --git a/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultBuildPomXMLFilterFactory.java b/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultBuildPomXMLFilterFactory.java
index 3de90de..8f9f6ae 100644
--- a/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultBuildPomXMLFilterFactory.java
+++ b/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultBuildPomXMLFilterFactory.java
@@ -23,11 +23,13 @@ package org.apache.maven.model.building;
 import java.nio.file.Path;
 import java.util.Optional;
 import java.util.function.BiFunction;
+import java.util.function.Consumer;
 import java.util.function.Function;
 
 import org.apache.maven.model.Model;
 import org.apache.maven.xml.sax.filter.BuildPomXMLFilterFactory;
 import org.apache.maven.xml.sax.filter.RelativeProject;
+import org.xml.sax.ext.LexicalHandler;
 
 /**
  * 
@@ -38,8 +40,10 @@ public class DefaultBuildPomXMLFilterFactory extends BuildPomXMLFilterFactory
 {
     private final TransformerContext context;
     
-    public DefaultBuildPomXMLFilterFactory( TransformerContext context )
+    public DefaultBuildPomXMLFilterFactory( TransformerContext context,
+                                            Consumer<LexicalHandler> lexicalHandlerConsumer )
     {
+        super( lexicalHandlerConsumer );
         this.context = context;
     }
     
diff --git a/maven-model-builder/src/test/java/org/apache/maven/model/inheritance/DefaultInheritanceAssemblerTest.java b/maven-model-builder/src/test/java/org/apache/maven/model/inheritance/DefaultInheritanceAssemblerTest.java
index 9924471..131b762 100644
--- a/maven-model-builder/src/test/java/org/apache/maven/model/inheritance/DefaultInheritanceAssemblerTest.java
+++ b/maven-model-builder/src/test/java/org/apache/maven/model/inheritance/DefaultInheritanceAssemblerTest.java
@@ -28,6 +28,7 @@ import org.apache.maven.model.io.DefaultModelWriter;
 import org.apache.maven.model.io.ModelWriter;
 import org.apache.maven.xml.sax.filter.AbstractSAXFilter;
 import org.xml.sax.SAXException;
+import org.xml.sax.ext.LexicalHandler;
 import org.xmlunit.matchers.CompareMatcher;
 
 import junit.framework.TestCase;
@@ -35,11 +36,12 @@ import junit.framework.TestCase;
 import java.io.File;
 import java.io.IOException;
 import java.nio.file.Path;
+import java.util.function.Consumer;
 
 import javax.xml.parsers.ParserConfigurationException;
 import javax.xml.transform.TransformerConfigurationException;
 
-import static org.junit.Assert.assertThat;
+import static org.hamcrest.MatcherAssert.assertThat;
 
 /**
  * @author Hervé Boutemy
@@ -63,7 +65,8 @@ public class DefaultInheritanceAssemblerTest
         reader.setTransformer( new AbstractModelSourceTransformer()
         {
             @Override
-            protected AbstractSAXFilter getSAXFilter( Path pomFile, TransformerContext context )
+            protected AbstractSAXFilter getSAXFilter( Path pomFile, TransformerContext context,
+                                                      Consumer<LexicalHandler> lexicalHandlerConsumer )
                 throws TransformerConfigurationException, SAXException, ParserConfigurationException
             {
                 return null;
diff --git a/maven-xml/src/main/java/org/apache/maven/xml/sax/filter/BuildPomXMLFilterFactory.java b/maven-xml/src/main/java/org/apache/maven/xml/sax/filter/BuildPomXMLFilterFactory.java
index 4468da2..23dc240 100644
--- a/maven-xml/src/main/java/org/apache/maven/xml/sax/filter/BuildPomXMLFilterFactory.java
+++ b/maven-xml/src/main/java/org/apache/maven/xml/sax/filter/BuildPomXMLFilterFactory.java
@@ -76,7 +76,7 @@ public class BuildPomXMLFilterFactory
             ReactorDependencyXMLFilter reactorDependencyXMLFilter =
                 new ReactorDependencyXMLFilter( getDependencyKeyToVersionMapper() );
             reactorDependencyXMLFilter.setParent( parent );
-            reactorDependencyXMLFilter.setLexicalHandler( parent );
+            parent.setLexicalHandler( reactorDependencyXMLFilter );
             parent = reactorDependencyXMLFilter;
         }
 
@@ -85,7 +85,7 @@ public class BuildPomXMLFilterFactory
             ParentXMLFilter parentFilter = new ParentXMLFilter( getRelativePathMapper() );
             parentFilter.setProjectPath( projectFile.getParent() );
             parentFilter.setParent( parent );
-            parentFilter.setLexicalHandler( parent );
+            parent.setLexicalHandler( parentFilter );
             parent = parentFilter;
         }
 
diff --git a/maven-xml/src/test/java/org/apache/maven/xml/sax/ChainedFilterTest.java b/maven-xml/src/test/java/org/apache/maven/xml/sax/ChainedFilterTest.java
index 87fb6de..9af2e7c 100644
--- a/maven-xml/src/test/java/org/apache/maven/xml/sax/ChainedFilterTest.java
+++ b/maven-xml/src/test/java/org/apache/maven/xml/sax/ChainedFilterTest.java
@@ -60,7 +60,6 @@ public class ChainedFilterTest
         StreamResult result = new StreamResult( writer );
         transformerHandler.setResult( result );
 
-        Transformer transformer = transformerFactory.newTransformer();
         SAXResult transformResult = new SAXResult( transformerHandler );
 
         // Watch the order of filters! In reverse order the values would be 'AweSome'
@@ -78,6 +77,7 @@ public class ChainedFilterTest
 
         SAXSource transformSource = new SAXSource( filter, new InputSource( new StringReader( input ) ) );
 
+        Transformer transformer = transformerFactory.newTransformer();
         transformer.transform( transformSource, transformResult );
 
         String expected = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"


[maven] 05/06: Add unittest to verify transform result of ConsumerModelSourceTransformer

Posted by rf...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

rfscholte pushed a commit to branch MNG-6999
in repository https://gitbox.apache.org/repos/asf/maven.git

commit 6d6bdefa515d3b5a8ed2eb76f1ab304f36b2687b
Author: rfscholte <rf...@apache.org>
AuthorDate: Mon Oct 19 21:34:24 2020 +0200

    Add unittest to verify transform result of ConsumerModelSourceTransformer
---
 .../aether/ConsumerModelSourceTransformerTest.java | 75 ++++++++++++++++++++
 .../src/test/resources/projects/transform.pom      | 81 ++++++++++++++++++++++
 2 files changed, 156 insertions(+)

diff --git a/maven-core/src/test/java/org/apache/maven/internal/aether/ConsumerModelSourceTransformerTest.java b/maven-core/src/test/java/org/apache/maven/internal/aether/ConsumerModelSourceTransformerTest.java
new file mode 100644
index 0000000..4863264
--- /dev/null
+++ b/maven-core/src/test/java/org/apache/maven/internal/aether/ConsumerModelSourceTransformerTest.java
@@ -0,0 +1,75 @@
+package org.apache.maven.internal.aether;
+
+import java.io.BufferedReader;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
+
+/*
+ * 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.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.stream.Collectors;
+
+import org.apache.maven.model.Model;
+import org.apache.maven.model.building.TransformerContext;
+import org.junit.Test;
+import org.xmlunit.assertj.XmlAssert;
+
+public class ConsumerModelSourceTransformerTest
+{
+    private ConsumerModelSourceTransformer transformer = new ConsumerModelSourceTransformer();
+
+    @Test
+    public void test() throws Exception
+    {
+        Path pomFile = Paths.get( "src/test/resources/projects/transform.pom").toAbsolutePath();
+        InputStream in = transformer.transform( pomFile, new NoTransformerContext() );
+        
+        String text =
+            new BufferedReader( new InputStreamReader( in,
+                                                       StandardCharsets.UTF_8 ) ).lines().collect( Collectors.joining( "\n" ) );
+
+        XmlAssert.assertThat( in ).and( Files.newInputStream( pomFile ) ).areIdentical();
+    }
+
+    private static class NoTransformerContext implements TransformerContext
+    {
+        @Override
+        public String getUserProperty( String key )
+        {
+            return null;
+        }
+        
+        @Override
+        public Model getRawModel( String groupId, String artifactId )
+            throws IllegalStateException
+        {
+            return null;
+        }
+        
+        @Override
+        public Model getRawModel( Path p )
+        {
+            return null;
+        }
+    }
+}
diff --git a/maven-core/src/test/resources/projects/transform.pom b/maven-core/src/test/resources/projects/transform.pom
new file mode 100644
index 0000000..f48aba3
--- /dev/null
+++ b/maven-core/src/test/resources/projects/transform.pom
@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+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 xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+
+  <groupId>test</groupId>
+  <artifactId>test</artifactId>
+  <version>0.1-SNAPSHOT</version>
+  <packaging>pom</packaging>
+
+  <build>
+    <pluginManagement>
+      <plugins>
+        <plugin>
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-compiler-plugin</artifactId>
+          <version>2.1</version>
+          <configuration>
+            <source>  1.5  </source>
+            <target xml:space="preserve">  1.5  </target>
+          </configuration>
+        </plugin>
+      </plugins>
+    </pluginManagement>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-compiler-plugin</artifactId>
+        <executions>
+          <execution>
+            <id>test</id>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
+
+  <profiles>
+    <profile>
+      <id>default</id>
+      <activation>
+        <activeByDefault>true</activeByDefault>
+      </activation>
+      <properties>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+      </properties>
+    </profile>
+    <profile>
+      <id>file</id>
+      <activation>
+        <file>
+          <exists>simple.xml</exists>
+        </file>
+      </activation>
+      <properties>
+        <profile.file>activated</profile.file>
+      </properties>
+    </profile>
+  </profiles>
+</project>


[maven] 03/06: LexicalHandler and ContentHandler are at same level, so don't set LexicalHandler with parent

Posted by rf...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

rfscholte pushed a commit to branch MNG-6999
in repository https://gitbox.apache.org/repos/asf/maven.git

commit 4ea4c0f887394b323cf9b3dbd628a164423db189
Author: rfscholte <rf...@apache.org>
AuthorDate: Sat Oct 17 16:42:31 2020 +0200

    LexicalHandler and ContentHandler are at same level, so don't set LexicalHandler with parent
---
 .../xml/sax/filter/AbstractEventXMLFilter.java     |  4 +---
 .../maven/xml/sax/filter/AbstractSAXFilter.java    |  1 +
 .../xml/sax/filter/BuildPomXMLFilterFactory.java   | 28 ++++++++++------------
 .../maven/xml/sax/filter/CiFriendlyXMLFilter.java  | 10 ++++++++
 .../sax/filter/ConsumerPomXMLFilterFactory.java    |  4 +---
 .../maven/xml/sax/filter/ModulesXMLFilter.java     |  4 +---
 .../xml/sax/filter/RelativePathXMLFilter.java      |  4 +---
 .../xml/sax/filter/ConsumerPomXMLFilterTest.java   | 18 ++++++++++++++
 8 files changed, 46 insertions(+), 27 deletions(-)

diff --git a/maven-xml/src/main/java/org/apache/maven/xml/sax/filter/AbstractEventXMLFilter.java b/maven-xml/src/main/java/org/apache/maven/xml/sax/filter/AbstractEventXMLFilter.java
index f5246b1..1b72d11 100644
--- a/maven-xml/src/main/java/org/apache/maven/xml/sax/filter/AbstractEventXMLFilter.java
+++ b/maven-xml/src/main/java/org/apache/maven/xml/sax/filter/AbstractEventXMLFilter.java
@@ -29,8 +29,6 @@ import org.apache.maven.xml.sax.SAXEventFactory;
 import org.xml.sax.Attributes;
 import org.xml.sax.Locator;
 import org.xml.sax.SAXException;
-import org.xml.sax.XMLReader;
-import org.xml.sax.ext.LexicalHandler;
 
 /**
  * Builds up a list of SAXEvents, which will be executed with {@link #executeEvents()}
@@ -64,7 +62,7 @@ abstract class AbstractEventXMLFilter extends AbstractSAXFilter
         super();
     }
 
-    <T extends XMLReader & LexicalHandler> AbstractEventXMLFilter( T parent )
+    AbstractEventXMLFilter( AbstractSAXFilter parent )
     {
         setParent( parent );
     }
diff --git a/maven-xml/src/main/java/org/apache/maven/xml/sax/filter/AbstractSAXFilter.java b/maven-xml/src/main/java/org/apache/maven/xml/sax/filter/AbstractSAXFilter.java
index e9df96f..1761936 100644
--- a/maven-xml/src/main/java/org/apache/maven/xml/sax/filter/AbstractSAXFilter.java
+++ b/maven-xml/src/main/java/org/apache/maven/xml/sax/filter/AbstractSAXFilter.java
@@ -43,6 +43,7 @@ public class AbstractSAXFilter extends XMLFilterImpl implements LexicalHandler
     public AbstractSAXFilter( AbstractSAXFilter parent )
     {
         setParent( parent );
+        parent.setLexicalHandler( this );
     }
     
     public LexicalHandler getLexicalHandler()
diff --git a/maven-xml/src/main/java/org/apache/maven/xml/sax/filter/BuildPomXMLFilterFactory.java b/maven-xml/src/main/java/org/apache/maven/xml/sax/filter/BuildPomXMLFilterFactory.java
index 6f3f319..626c7ac 100644
--- a/maven-xml/src/main/java/org/apache/maven/xml/sax/filter/BuildPomXMLFilterFactory.java
+++ b/maven-xml/src/main/java/org/apache/maven/xml/sax/filter/BuildPomXMLFilterFactory.java
@@ -26,8 +26,6 @@ import java.util.function.Function;
 
 import javax.xml.parsers.ParserConfigurationException;
 import javax.xml.transform.TransformerConfigurationException;
-import javax.xml.transform.TransformerFactory;
-import javax.xml.transform.sax.SAXTransformerFactory;
 
 import org.apache.maven.xml.Factories;
 import org.xml.sax.SAXException;
@@ -42,6 +40,18 @@ import org.xml.sax.ext.LexicalHandler;
  */
 public class BuildPomXMLFilterFactory
 {
+    private final LexicalHandler lexicalHandler;
+    
+    public BuildPomXMLFilterFactory()
+    {
+        this( null ); 
+    }
+    
+    public BuildPomXMLFilterFactory( LexicalHandler lexicalHandler )
+    {
+        this.lexicalHandler = lexicalHandler;
+    }
+
     /**
      * 
      * @param projectFile will be used by ConsumerPomXMLFilter to get the right filter
@@ -55,7 +65,7 @@ public class BuildPomXMLFilterFactory
     {
         AbstractSAXFilter parent = new AbstractSAXFilter();
         parent.setParent( getXMLReader() );
-        parent.setLexicalHandler( getLexicalHander() );
+        parent.setLexicalHandler( lexicalHandler );
 
         if ( getDependencyKeyToVersionMapper() != null )
         {
@@ -85,18 +95,6 @@ public class BuildPomXMLFilterFactory
         return xmlReader;
     }
     
-    private LexicalHandler getLexicalHander() throws TransformerConfigurationException 
-    {
-        TransformerFactory transformerFactory = Factories.newTransformerFactory();
-        if ( transformerFactory instanceof SAXTransformerFactory )
-        {
-            SAXTransformerFactory saxTransformerFactory = (SAXTransformerFactory) transformerFactory;
-            return saxTransformerFactory.newTransformerHandler();
-        }
-        throw new TransformerConfigurationException( "Failed to get LexicalHandler via TransformerFactory:"
-            + " it is not an instance of SAXTransformerFactory" );
-    }
-    
     /**
      * @return the mapper or {@code null} if relativePaths don't need to be mapped
      */
diff --git a/maven-xml/src/main/java/org/apache/maven/xml/sax/filter/CiFriendlyXMLFilter.java b/maven-xml/src/main/java/org/apache/maven/xml/sax/filter/CiFriendlyXMLFilter.java
index 4375f18..9c2da0e 100644
--- a/maven-xml/src/main/java/org/apache/maven/xml/sax/filter/CiFriendlyXMLFilter.java
+++ b/maven-xml/src/main/java/org/apache/maven/xml/sax/filter/CiFriendlyXMLFilter.java
@@ -39,6 +39,16 @@ class CiFriendlyXMLFilter
     
     private boolean parseVersion;
     
+    CiFriendlyXMLFilter()
+    {
+        super();
+    }
+
+    CiFriendlyXMLFilter( AbstractSAXFilter parent )
+    {
+        super( parent );
+    }
+
     public CiFriendlyXMLFilter setChangelist( String changelist )
     {
         replaceChain = replaceChain.andThen( t -> t.replace( "${changelist}", changelist ) );
diff --git a/maven-xml/src/main/java/org/apache/maven/xml/sax/filter/ConsumerPomXMLFilterFactory.java b/maven-xml/src/main/java/org/apache/maven/xml/sax/filter/ConsumerPomXMLFilterFactory.java
index f7751d2..5703b89 100644
--- a/maven-xml/src/main/java/org/apache/maven/xml/sax/filter/ConsumerPomXMLFilterFactory.java
+++ b/maven-xml/src/main/java/org/apache/maven/xml/sax/filter/ConsumerPomXMLFilterFactory.java
@@ -49,15 +49,13 @@ public class ConsumerPomXMLFilterFactory
         // Ensure that xs:any elements aren't touched by next filters
         AbstractSAXFilter filter = new FastForwardFilter( parent );
         
-        CiFriendlyXMLFilter ciFriendlyFilter = new CiFriendlyXMLFilter();
+        CiFriendlyXMLFilter ciFriendlyFilter = new CiFriendlyXMLFilter( filter );
         getChangelist().ifPresent( ciFriendlyFilter::setChangelist  );
         getRevision().ifPresent( ciFriendlyFilter::setRevision );
         getSha1().ifPresent( ciFriendlyFilter::setSha1 );
         
         if ( ciFriendlyFilter.isSet() )
         {
-            ciFriendlyFilter.setParent( parent );
-            ciFriendlyFilter.setLexicalHandler( parent );
             filter = ciFriendlyFilter;
         }
         
diff --git a/maven-xml/src/main/java/org/apache/maven/xml/sax/filter/ModulesXMLFilter.java b/maven-xml/src/main/java/org/apache/maven/xml/sax/filter/ModulesXMLFilter.java
index 261c853..ad1a6c3 100644
--- a/maven-xml/src/main/java/org/apache/maven/xml/sax/filter/ModulesXMLFilter.java
+++ b/maven-xml/src/main/java/org/apache/maven/xml/sax/filter/ModulesXMLFilter.java
@@ -21,8 +21,6 @@ package org.apache.maven.xml.sax.filter;
 
 import org.xml.sax.Attributes;
 import org.xml.sax.SAXException;
-import org.xml.sax.XMLReader;
-import org.xml.sax.ext.LexicalHandler;
 
 /**
  * Remove all modules, this is just buildtime information
@@ -42,7 +40,7 @@ class ModulesXMLFilter
         super();
     }
 
-    <T extends XMLReader & LexicalHandler> ModulesXMLFilter( T parent )
+    ModulesXMLFilter( AbstractSAXFilter parent )
     {
         super( parent );
     }
diff --git a/maven-xml/src/main/java/org/apache/maven/xml/sax/filter/RelativePathXMLFilter.java b/maven-xml/src/main/java/org/apache/maven/xml/sax/filter/RelativePathXMLFilter.java
index 25f2137..573c3f0 100644
--- a/maven-xml/src/main/java/org/apache/maven/xml/sax/filter/RelativePathXMLFilter.java
+++ b/maven-xml/src/main/java/org/apache/maven/xml/sax/filter/RelativePathXMLFilter.java
@@ -21,8 +21,6 @@ package org.apache.maven.xml.sax.filter;
 
 import org.xml.sax.Attributes;
 import org.xml.sax.SAXException;
-import org.xml.sax.XMLReader;
-import org.xml.sax.ext.LexicalHandler;
 
 /**
  * Remove relativePath element, has no value for consumer pom
@@ -42,7 +40,7 @@ class RelativePathXMLFilter
         super();
     }
 
-    <T extends XMLReader & LexicalHandler> RelativePathXMLFilter( T parent )
+    RelativePathXMLFilter( AbstractSAXFilter parent )
     {
         super( parent );
     }
diff --git a/maven-xml/src/test/java/org/apache/maven/xml/sax/filter/ConsumerPomXMLFilterTest.java b/maven-xml/src/test/java/org/apache/maven/xml/sax/filter/ConsumerPomXMLFilterTest.java
index 16d458b..161519a 100644
--- a/maven-xml/src/test/java/org/apache/maven/xml/sax/filter/ConsumerPomXMLFilterTest.java
+++ b/maven-xml/src/test/java/org/apache/maven/xml/sax/filter/ConsumerPomXMLFilterTest.java
@@ -30,6 +30,7 @@ import java.util.function.Function;
 import javax.xml.parsers.ParserConfigurationException;
 import javax.xml.transform.TransformerConfigurationException;
 
+import org.junit.Ignore;
 import org.junit.Test;
 import org.xml.sax.SAXException;
 
@@ -231,5 +232,22 @@ public class ConsumerPomXMLFilterTest extends AbstractXMLFilterTests
         String actual = transform( input );
         assertThat( actual ).and( expected ).areIdentical();
     }
+    
+    @Test
+    @Ignore
+    public void lexicalHandler() throws Exception
+    {
+        String input = "<project><!--before--><modules>"
+                        + "<!--pre-in-->"
+                        + "<module><!--in-->ab</module>"
+                        + "<module>../cd</module>"
+                        + "<!--post-in-->"
+                        + "</modules>"
+                        + "<!--after--></project>";
+        String expected = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + 
+                        "<project><!--before--><!--after--></project>";
+        String actual = transform( input );
+        assertThat( actual ).and( expected ).areIdentical();
+    }
 
 }