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 2019/10/02 21:08:30 UTC

[maven] branch MNG-6656 updated: [MNG-6656] Applying review comments

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

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


The following commit(s) were added to refs/heads/MNG-6656 by this push:
     new b19b05c  [MNG-6656] Applying review comments
b19b05c is described below

commit b19b05cbf2f30705dffb8c1a541d65096d967d11
Author: rfscholte <rf...@apache.org>
AuthorDate: Wed Oct 2 23:08:34 2019 +0200

    [MNG-6656] Applying review comments
---
 .../DefaultRepositorySystemSessionFactory.java     | 35 ++++++++++--------
 .../internal/DefaultBuildPomXMLFilterFactory.java  |  2 +-
 maven-model-builder/pom.xml                        |  5 ---
 .../maven/model/building/DefaultModelBuilder.java  | 43 ++++++++++++----------
 .../model/building/DefaultModelCacheManager.java   | 16 ++++----
 .../apache/maven/model/building/ModelProblem.java  |  3 +-
 .../StringSearchModelInterpolatorTest.java         | 40 ++++++++++----------
 .../main/java/org/apache/maven/xml/SAXEvent.java   |  2 +-
 .../java/org/apache/maven/xml/SAXEventFactory.java |  2 +-
 .../java/org/apache/maven/xml/SAXEventUtils.java   |  9 ++++-
 .../maven/xml/filter/BuildPomXMLFilterFactory.java |  7 ++--
 .../maven/xml/filter/ConsumerPomXMLFilter.java     |  3 +-
 .../org/apache/maven/xml/filter/DependencyKey.java |  6 ++-
 .../apache/maven/xml/filter/ParentXMLFilter.java   |  1 +
 .../xml/filter/ReactorDependencyXMLFilter.java     |  2 +-
 .../maven/xml/filter/AbstractXMLFilterTests.java   |  6 +--
 .../maven/xml/filter/ConsumerPomXMLFilterTest.java | 16 ++++----
 pom.xml                                            |  6 ---
 18 files changed, 106 insertions(+), 98 deletions(-)

diff --git a/maven-core/src/main/java/org/apache/maven/internal/aether/DefaultRepositorySystemSessionFactory.java b/maven-core/src/main/java/org/apache/maven/internal/aether/DefaultRepositorySystemSessionFactory.java
index e4f8439..107c98b 100644
--- a/maven-core/src/main/java/org/apache/maven/internal/aether/DefaultRepositorySystemSessionFactory.java
+++ b/maven-core/src/main/java/org/apache/maven/internal/aether/DefaultRepositorySystemSessionFactory.java
@@ -31,12 +31,15 @@ import java.util.Collections;
 import java.util.LinkedHashMap;
 import java.util.Map;
 import java.util.Properties;
+import java.util.concurrent.Callable;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
 
 import javax.inject.Inject;
 import javax.inject.Named;
 import javax.inject.Provider;
 import javax.xml.parsers.ParserConfigurationException;
-import javax.xml.transform.TransformerException;
 import javax.xml.transform.TransformerFactory;
 import javax.xml.transform.sax.SAXSource;
 import javax.xml.transform.stream.StreamResult;
@@ -54,6 +57,7 @@ import org.apache.maven.settings.building.SettingsProblem;
 import org.apache.maven.settings.crypto.DefaultSettingsDecryptionRequest;
 import org.apache.maven.settings.crypto.SettingsDecrypter;
 import org.apache.maven.settings.crypto.SettingsDecryptionResult;
+import org.apache.maven.xml.Factories;
 import org.apache.maven.xml.filter.ConsumerPomXMLFilterFactory;
 import org.codehaus.plexus.configuration.xml.XmlPlexusConfiguration;
 import org.codehaus.plexus.logging.Logger;
@@ -280,7 +284,7 @@ public class DefaultRepositorySystemSessionFactory
                 Collection<FileTransformer> transformers = new ArrayList<>();
                 if ( "pom".equals( artifact.getExtension() ) )
                 {
-                    final TransformerFactory transformerFactory = TransformerFactory.newInstance();
+                    final TransformerFactory transformerFactory = Factories.newTransformerFactory();
 
                     transformers.add( new FileTransformer()
                     {
@@ -300,30 +304,29 @@ public class DefaultRepositorySystemSessionFactory
                             }
                             catch ( SAXException | ParserConfigurationException e )
                             {   
-                                e.printStackTrace();
                                 throw new TransformException( "Failed to create a consumerPomXMLFilter", e );
                             }
                             
                             final StreamResult result = new StreamResult( pipedOutputStream );
                             
-                            final Runnable runnable = new Runnable()
+                            final Callable<Void> callable = () ->
                             {
-                                @Override
-                                public void run()
+                                try ( PipedOutputStream out = pipedOutputStream )
                                 {
-                                    try ( PipedOutputStream out = pipedOutputStream )
-                                    {
-                                        transformerFactory.newTransformer().transform( transformSource, result );
-                                    }
-                                    catch ( TransformerException | IOException e )
-                                    {
-                                        e.printStackTrace();
-                                        throw new RuntimeException( e );
-                                    }
+                                    transformerFactory.newTransformer().transform( transformSource, result );
                                 }
+                                return null;
                             };
 
-                            new Thread( runnable ).start();
+                            ExecutorService executorService = Executors.newSingleThreadExecutor();
+                            try
+                            {
+                                executorService.submit( callable ).get();
+                            }
+                            catch ( InterruptedException | ExecutionException e )
+                            {
+                                throw new TransformException( "Failed to transform pom", e );
+                            }
 
                             return pipedInputStream;
                         }
diff --git a/maven-core/src/main/java/org/apache/maven/xml/internal/DefaultBuildPomXMLFilterFactory.java b/maven-core/src/main/java/org/apache/maven/xml/internal/DefaultBuildPomXMLFilterFactory.java
index e1b5ab5..2728103 100644
--- a/maven-core/src/main/java/org/apache/maven/xml/internal/DefaultBuildPomXMLFilterFactory.java
+++ b/maven-core/src/main/java/org/apache/maven/xml/internal/DefaultBuildPomXMLFilterFactory.java
@@ -104,7 +104,7 @@ public class DefaultBuildPomXMLFilterFactory extends BuildPomXMLFilterFactory
         return new RelativeProject( groupId, m.getArtifactId(), version );
     }
     
-    private String toVersion( final Model m )
+    private static String toVersion( final Model m )
     {
         String version = m.getVersion();
         if ( version == null && m.getParent() != null )
diff --git a/maven-model-builder/pom.xml b/maven-model-builder/pom.xml
index d9e02f4..511957c 100644
--- a/maven-model-builder/pom.xml
+++ b/maven-model-builder/pom.xml
@@ -88,11 +88,6 @@ under the License.
       <artifactId>xmlunit-matchers</artifactId>
       <scope>test</scope>
     </dependency>
-    <dependency>
-      <groupId>org.powermock</groupId>
-      <artifactId>powermock-reflect</artifactId>
-      <scope>test</scope>
-    </dependency>
   </dependencies>
 
   <build>
diff --git a/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilder.java b/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilder.java
index d60e68d..5efb532 100644
--- a/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilder.java
+++ b/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilder.java
@@ -36,12 +36,15 @@ import java.util.List;
 import java.util.Map;
 import java.util.Objects;
 import java.util.Properties;
+import java.util.concurrent.Callable;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
 
 import javax.inject.Inject;
 import javax.inject.Named;
 import javax.inject.Provider;
 import javax.inject.Singleton;
-import javax.xml.crypto.dsig.TransformException;
 import javax.xml.parsers.ParserConfigurationException;
 import javax.xml.transform.TransformerException;
 import javax.xml.transform.TransformerFactory;
@@ -88,6 +91,7 @@ import org.apache.maven.model.resolution.UnresolvableModelException;
 import org.apache.maven.model.resolution.WorkspaceModelResolver;
 import org.apache.maven.model.superpom.SuperPomProvider;
 import org.apache.maven.model.validation.ModelValidator;
+import org.apache.maven.xml.Factories;
 import org.apache.maven.xml.filter.BuildPomXMLFilterFactory;
 import org.codehaus.plexus.interpolation.MapBasedValueSource;
 import org.codehaus.plexus.interpolation.StringSearchInterpolator;
@@ -770,7 +774,6 @@ public class DefaultModelBuilder
         {
             try
             {
-                // TODO: parent might be part of reactor... better read all lineage items like this?
                 Model parent = lineage.get( 1 ).getModel();
                 
                 Model child = modelProcessor.read( transformData( lineage.get( 0 ) ), null );
@@ -781,10 +784,9 @@ public class DefaultModelBuilder
                 // overwrite child
                 lineage.get( 0 ).setModel( child );
             }
-            catch ( IOException | TransformException | SAXException | ParserConfigurationException e )
+            catch ( IOException | TransformerException | SAXException | ParserConfigurationException e )
             {
-                // this is second read, should not happen
-                e.printStackTrace();
+                problems.add( new ModelProblemCollectorRequest( Severity.FATAL, Version.V37 ).setException( e ) );
             }
         }
         else
@@ -796,9 +798,9 @@ public class DefaultModelBuilder
     }
     
     private InputStream transformData( ModelData modelData )
-                    throws IOException, TransformException, SAXException, ParserConfigurationException
+                    throws IOException, TransformerException, SAXException, ParserConfigurationException
     {
-        final TransformerFactory transformerFactory = TransformerFactory.newInstance();
+        final TransformerFactory transformerFactory = Factories.newTransformerFactory() ;
         
         final PipedOutputStream pipedOutputStream  = new PipedOutputStream();
         final PipedInputStream pipedInputStream  = new PipedInputStream( pipedOutputStream );
@@ -806,7 +808,7 @@ public class DefaultModelBuilder
         // Should always be FileSource for reactor poms
         FileSource source = (FileSource) modelData.getSource();
         
-        System.out.println( "transforming " + source.getFile() );
+        // System.out.println( "transforming " + source.getFile() );
         
         final SAXSource transformSource =
             new SAXSource( buildPomXMLFilterFactory.get().get( source.getFile().toPath() ),
@@ -814,23 +816,24 @@ public class DefaultModelBuilder
         
         final StreamResult result = new StreamResult( pipedOutputStream );
         
-        final Runnable runnable = new Runnable()
+        final Callable<Void> callable = () ->
         {
-            @Override
-            public void run()
+            try ( PipedOutputStream out = pipedOutputStream )
             {
-                try ( PipedOutputStream out = pipedOutputStream )
-                {
-                    transformerFactory.newTransformer().transform( transformSource, result );
-                }
-                catch ( TransformerException | IOException e )
-                {
-                    throw new RuntimeException( e );
-                }
+                transformerFactory.newTransformer().transform( transformSource, result );
             }
+            return null;
         };
 
-        new Thread( runnable ).start();
+        ExecutorService executorService = Executors.newSingleThreadExecutor();
+        try
+        {
+            executorService.submit( callable ).get();
+        }
+        catch ( InterruptedException | ExecutionException e )
+        {
+            throw new TransformerException( "Failed to transform pom", e );
+        }
 
         return pipedInputStream;
     }
diff --git a/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelCacheManager.java b/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelCacheManager.java
index f33d713..96ca420 100644
--- a/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelCacheManager.java
+++ b/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelCacheManager.java
@@ -20,9 +20,8 @@ package org.apache.maven.model.building;
  */
 
 import java.nio.file.Path;
-import java.util.Collections;
-import java.util.HashMap;
 import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
 
 import javax.inject.Named;
 import javax.inject.Singleton;
@@ -39,15 +38,14 @@ import org.apache.maven.xml.filter.DependencyKey;
 @Singleton
 public class DefaultModelCacheManager implements ModelCacheManager
 {
-    private static final Map<Path, Model> MODELCACHE = Collections.synchronizedMap( new HashMap<Path, Model>() );
+    private final Map<Path, Model> modelCache = new ConcurrentHashMap<>();
     
-    private static final Map<DependencyKey, Model> DEPKEYMODELCACHE =
-        Collections.synchronizedMap( new HashMap<DependencyKey, Model>() );
+    private final Map<DependencyKey, Model> depKeyModelCache = new ConcurrentHashMap<>();
     
     @Override
     public void put( Path p, Model m )
     {
-        MODELCACHE.put( p, m );
+        modelCache.put( p, m );
         
         String groupId = m.getGroupId();
         if ( groupId == null && m.getParent() != null )
@@ -56,19 +54,19 @@ public class DefaultModelCacheManager implements ModelCacheManager
         }
         
         String artifactId = m.getArtifactId();
-        DEPKEYMODELCACHE.put( new DependencyKey( groupId, artifactId ), m );
+        depKeyModelCache.put( new DependencyKey( groupId, artifactId ), m );
     }
 
     @Override
     public Model get( Path p )
     {
-        return MODELCACHE.get( p );
+        return modelCache.get( p );
     }
 
     @Override
     public Model get( DependencyKey k )
     {
-        return DEPKEYMODELCACHE.get( k );
+        return depKeyModelCache.get( k );
     }
 
 }
diff --git a/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelProblem.java b/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelProblem.java
index 2c7a72e..30b6724 100644
--- a/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelProblem.java
+++ b/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelProblem.java
@@ -50,7 +50,8 @@ public interface ModelProblem
         BASE,
         V20,
         V30,
-        V31
+        V31,
+        V37
     }
 
     /**
diff --git a/maven-model-builder/src/test/java/org/apache/maven/model/interpolation/StringSearchModelInterpolatorTest.java b/maven-model-builder/src/test/java/org/apache/maven/model/interpolation/StringSearchModelInterpolatorTest.java
index b66abca..4cc2508 100644
--- a/maven-model-builder/src/test/java/org/apache/maven/model/interpolation/StringSearchModelInterpolatorTest.java
+++ b/maven-model-builder/src/test/java/org/apache/maven/model/interpolation/StringSearchModelInterpolatorTest.java
@@ -19,25 +19,29 @@ package org.apache.maven.model.interpolation;
  * under the License.
  */
 
-import org.apache.maven.model.InputLocation;
-import org.apache.maven.model.InputSource;
-import org.apache.maven.model.Model;
-import org.apache.maven.model.building.DefaultModelBuildingRequest;
-import org.apache.maven.model.building.ModelBuildingRequest;
-import org.apache.maven.model.building.SimpleProblemCollector;
+import static org.apache.commons.lang3.reflect.FieldUtils.*;
+import static org.hamcrest.CoreMatchers.anyOf;
+import static org.hamcrest.CoreMatchers.is;
+import static org.junit.Assert.assertThat;
 
 import java.io.File;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
 import java.util.concurrent.Callable;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.Future;
 import java.util.concurrent.FutureTask;
 
-import static org.hamcrest.CoreMatchers.anyOf;
-import static org.hamcrest.CoreMatchers.is;
-import static org.junit.Assert.assertThat;
-import static org.powermock.reflect.Whitebox.getField;
-import static org.powermock.reflect.Whitebox.getInternalState;
+import org.apache.maven.model.InputLocation;
+import org.apache.maven.model.InputSource;
+import org.apache.maven.model.Model;
+import org.apache.maven.model.building.DefaultModelBuildingRequest;
+import org.apache.maven.model.building.ModelBuildingRequest;
+import org.apache.maven.model.building.SimpleProblemCollector;
 
 /**
  * @author jdcasey
@@ -395,8 +399,7 @@ public class StringSearchModelInterpolatorTest
 
         //noinspection unchecked
         Map<Class<?>, ?> cache =
-                (Map<Class<?>, ?>) getField( StringSearchModelInterpolator.class, "CACHED_ENTRIES" )
-                        .get( null );
+            (Map<Class<?>, ?>) readStaticField( StringSearchModelInterpolator.class, "CACHED_ENTRIES", true );
 
         Object objCacheItem = cache.get( Object.class );
         Object fileCacheItem = cache.get( File.class );
@@ -404,8 +407,8 @@ public class StringSearchModelInterpolatorTest
         assertNotNull( objCacheItem );
         assertNotNull( fileCacheItem );
 
-        assertThat( ( (Object[]) getInternalState( objCacheItem, "fields" ) ).length, is( 0 ) );
-        assertThat( ( (Object[]) getInternalState( fileCacheItem, "fields" ) ).length, is( 0 ) );
+        assertThat( ( (Object[]) readField( objCacheItem, "fields", true ) ).length, is( 0 ) );
+        assertThat( ( (Object[]) readField( fileCacheItem, "fields", true ) ).length, is( 0 ) );
     }
 
     public void testNotInterpolateFile()
@@ -427,14 +430,13 @@ public class StringSearchModelInterpolatorTest
 
         //noinspection unchecked
         Map<Class<?>, ?> cache =
-                (Map<Class<?>, ?>) getField( StringSearchModelInterpolator.class, "CACHED_ENTRIES" )
-                        .get( null );
+            (Map<Class<?>, ?>) readStaticField( StringSearchModelInterpolator.class, "CACHED_ENTRIES", true );
 
         Object fileCacheItem = cache.get( File.class );
 
         assertNotNull( fileCacheItem );
 
-        assertThat( ( (Object[]) getInternalState( fileCacheItem, "fields" ) ).length, is( 0 ) );
+        assertThat( ( (Object[]) readField( fileCacheItem, "fields", true ) ).length, is( 0 ) );
     }
 
 
diff --git a/maven-xml/src/main/java/org/apache/maven/xml/SAXEvent.java b/maven-xml/src/main/java/org/apache/maven/xml/SAXEvent.java
index 07da280..11aad6d 100644
--- a/maven-xml/src/main/java/org/apache/maven/xml/SAXEvent.java
+++ b/maven-xml/src/main/java/org/apache/maven/xml/SAXEvent.java
@@ -25,7 +25,7 @@ import org.xml.sax.SAXException;
  * Command pattern to gather events which can be executed later on.
  * 
  * @author Robert Scholte
- * @since 
+ * @since 3.7.0
  */
 @FunctionalInterface
 public interface SAXEvent
diff --git a/maven-xml/src/main/java/org/apache/maven/xml/SAXEventFactory.java b/maven-xml/src/main/java/org/apache/maven/xml/SAXEventFactory.java
index 42739e1..6d525f6 100644
--- a/maven-xml/src/main/java/org/apache/maven/xml/SAXEventFactory.java
+++ b/maven-xml/src/main/java/org/apache/maven/xml/SAXEventFactory.java
@@ -27,7 +27,7 @@ import org.xml.sax.Locator;
  * Factory for SAXEvents
  * 
  * @author Robert Scholte
- * @since 4.0.0
+ * @since 3.7.0
  */
 public final class SAXEventFactory
 {
diff --git a/maven-xml/src/main/java/org/apache/maven/xml/SAXEventUtils.java b/maven-xml/src/main/java/org/apache/maven/xml/SAXEventUtils.java
index 06f4f26..2f3644d 100644
--- a/maven-xml/src/main/java/org/apache/maven/xml/SAXEventUtils.java
+++ b/maven-xml/src/main/java/org/apache/maven/xml/SAXEventUtils.java
@@ -23,7 +23,7 @@ package org.apache.maven.xml;
  * Utility class for SAXEvents
  * 
  * @author Robert Scholte
- * @since 4.0.0
+ * @since 3.7.0
  */
 public final class SAXEventUtils
 {
@@ -31,6 +31,13 @@ public final class SAXEventUtils
     {
     }
     
+    /**
+     * Returns the newLocalName prefixed with the namespace of the oldQName if present 
+     * 
+     * @param oldQName the QName, used for its namespace
+     * @param newLocalName the preferred localName
+     * @return the new QName
+     */
     public static String renameQName( String oldQName, String newLocalName )
     {
         return oldQName.replaceFirst( "[^:]+$", newLocalName );
diff --git a/maven-xml/src/main/java/org/apache/maven/xml/filter/BuildPomXMLFilterFactory.java b/maven-xml/src/main/java/org/apache/maven/xml/filter/BuildPomXMLFilterFactory.java
index 83eafe6..1df17ba 100644
--- a/maven-xml/src/main/java/org/apache/maven/xml/filter/BuildPomXMLFilterFactory.java
+++ b/maven-xml/src/main/java/org/apache/maven/xml/filter/BuildPomXMLFilterFactory.java
@@ -24,8 +24,8 @@ import java.util.Optional;
 import java.util.function.Function;
 
 import javax.xml.parsers.ParserConfigurationException;
-import javax.xml.parsers.SAXParserFactory;
 
+import org.apache.maven.xml.Factories;
 import org.xml.sax.SAXException;
 import org.xml.sax.XMLReader;
 
@@ -74,12 +74,13 @@ public abstract class BuildPomXMLFilterFactory
     
     protected XMLReader getParent() throws SAXException, ParserConfigurationException 
     {
-        XMLReader xmlReader = SAXParserFactory.newInstance().newSAXParser().getXMLReader();
+        XMLReader xmlReader = Factories.newXMLReader();
         xmlReader.setFeature( "http://xml.org/sax/features/namespaces", true );
         return xmlReader;
     }
     
-    // For CIFriendly
+    // getters for the 3 magic properties of CIFriendly versions ( https://maven.apache.org/maven-ci-friendly.html )
+    
     protected abstract Optional<String> getChangelist();
         
     protected abstract Optional<String> getRevision();
diff --git a/maven-xml/src/main/java/org/apache/maven/xml/filter/ConsumerPomXMLFilter.java b/maven-xml/src/main/java/org/apache/maven/xml/filter/ConsumerPomXMLFilter.java
index 9975c22..8993d1d 100644
--- a/maven-xml/src/main/java/org/apache/maven/xml/filter/ConsumerPomXMLFilter.java
+++ b/maven-xml/src/main/java/org/apache/maven/xml/filter/ConsumerPomXMLFilter.java
@@ -27,9 +27,8 @@ import org.xml.sax.helpers.XMLFilterImpl;
  * This often means stripping of build-specific information.
  * When extra information is required during filtering it is probably a member of the BuildPomXMLFilter
  * 
- * This filter is used at 2 locations:
+ * This filter is used at 1 locations:
  * - {@link org.apache.maven.internal.aether.DefaultRepositorySystemSessionFactory} when publishing pom files.
- * - TODO ???Class when a reactor module is used as dependency. This ensures consistency of dependency handling
  * 
  * @author Robert Scholte
  * @since 3.7.0
diff --git a/maven-xml/src/main/java/org/apache/maven/xml/filter/DependencyKey.java b/maven-xml/src/main/java/org/apache/maven/xml/filter/DependencyKey.java
index bf91cf9..6b5e905 100644
--- a/maven-xml/src/main/java/org/apache/maven/xml/filter/DependencyKey.java
+++ b/maven-xml/src/main/java/org/apache/maven/xml/filter/DependencyKey.java
@@ -31,11 +31,15 @@ public class DependencyKey
     private final String groupId;
     
     private final String artifactId;
+    
+    private final int hashCode;
 
     public DependencyKey( String groupId, String artifactId )
     {
         this.groupId = groupId;
         this.artifactId = artifactId;
+        
+        this.hashCode = Objects.hash( artifactId, groupId );
     }
  
     public String getGroupId()
@@ -51,7 +55,7 @@ public class DependencyKey
     @Override
     public int hashCode()
     {
-        return Objects.hash( artifactId, groupId );
+        return hashCode;
     }
 
     @Override
diff --git a/maven-xml/src/main/java/org/apache/maven/xml/filter/ParentXMLFilter.java b/maven-xml/src/main/java/org/apache/maven/xml/filter/ParentXMLFilter.java
index 747a283..7bb744d 100644
--- a/maven-xml/src/main/java/org/apache/maven/xml/filter/ParentXMLFilter.java
+++ b/maven-xml/src/main/java/org/apache/maven/xml/filter/ParentXMLFilter.java
@@ -43,6 +43,7 @@ import org.xml.sax.helpers.XMLFilterImpl;
  * </p>
  * 
  * @author Robert Scholte
+ * @since 3.7.0
  */
 class ParentXMLFilter
     extends XMLFilterImpl
diff --git a/maven-xml/src/main/java/org/apache/maven/xml/filter/ReactorDependencyXMLFilter.java b/maven-xml/src/main/java/org/apache/maven/xml/filter/ReactorDependencyXMLFilter.java
index a568df5..fa8b1e5 100644
--- a/maven-xml/src/main/java/org/apache/maven/xml/filter/ReactorDependencyXMLFilter.java
+++ b/maven-xml/src/main/java/org/apache/maven/xml/filter/ReactorDependencyXMLFilter.java
@@ -30,7 +30,7 @@ import org.xml.sax.helpers.XMLFilterImpl;
  * Will apply the version if the dependency is part of the reactor
  * 
  * @author Robert Scholte
- * @since 4.0.0
+ * @since 3.7.0
  */
 public class ReactorDependencyXMLFilter extends XMLFilterImpl
 {
diff --git a/maven-xml/src/test/java/org/apache/maven/xml/filter/AbstractXMLFilterTests.java b/maven-xml/src/test/java/org/apache/maven/xml/filter/AbstractXMLFilterTests.java
index e406f6c..0d9b779 100644
--- a/maven-xml/src/test/java/org/apache/maven/xml/filter/AbstractXMLFilterTests.java
+++ b/maven-xml/src/test/java/org/apache/maven/xml/filter/AbstractXMLFilterTests.java
@@ -25,7 +25,6 @@ import java.io.StringWriter;
 import java.io.Writer;
 
 import javax.xml.parsers.ParserConfigurationException;
-import javax.xml.parsers.SAXParserFactory;
 import javax.xml.transform.OutputKeys;
 import javax.xml.transform.Transformer;
 import javax.xml.transform.TransformerException;
@@ -33,6 +32,7 @@ import javax.xml.transform.TransformerFactory;
 import javax.xml.transform.sax.SAXSource;
 import javax.xml.transform.stream.StreamResult;
 
+import org.apache.maven.xml.Factories;
 import org.xml.sax.InputSource;
 import org.xml.sax.SAXException;
 import org.xml.sax.XMLFilter;
@@ -50,7 +50,7 @@ public abstract class AbstractXMLFilterTests
     {
         if( filter.getParent() == null )
         {
-            filter.setParent( SAXParserFactory.newInstance().newSAXParser().getXMLReader() );
+            filter.setParent( Factories.newXMLReader() );
             filter.setFeature( "http://xml.org/sax/features/namespaces", true );
         }
     }
@@ -82,7 +82,7 @@ public abstract class AbstractXMLFilterTests
         Writer writer = new StringWriter();
         StreamResult result = new StreamResult( writer );
 
-        TransformerFactory transformerFactory = TransformerFactory.newInstance();
+        TransformerFactory transformerFactory = Factories.newTransformerFactory();
         Transformer transformer = transformerFactory.newTransformer();
         transformer.setOutputProperty( OutputKeys.OMIT_XML_DECLARATION, "yes" );
 
diff --git a/maven-xml/src/test/java/org/apache/maven/xml/filter/ConsumerPomXMLFilterTest.java b/maven-xml/src/test/java/org/apache/maven/xml/filter/ConsumerPomXMLFilterTest.java
index 5484ea6..4ed4ab6 100644
--- a/maven-xml/src/test/java/org/apache/maven/xml/filter/ConsumerPomXMLFilterTest.java
+++ b/maven-xml/src/test/java/org/apache/maven/xml/filter/ConsumerPomXMLFilterTest.java
@@ -119,10 +119,10 @@ public class ConsumerPomXMLFilterTest extends AbstractXMLFilterTests
     @Test
     public void testMe() throws Exception {
         String input = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n" + 
-            "<project xmlns=\"http://maven.apache.org/POM/4.0.0\" \r\n" + 
-            "         xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\r\n" + 
-            "         xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 \r\n" + 
-            "                             http://maven.apache.org/maven-v4_0_0.xsd\">\r\n" + 
+            "<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\r\n" +
+            "       xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\r\n" +
+            "       xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0\r\n" +
+            "                           http://maven.apache.org/xsd/maven-4.0.0.xsd\">\r\n" + 
             "  <modelVersion>4.0.0</modelVersion>\r\n" + 
             "  <groupId>org.sonatype.mavenbook.multispring</groupId>\r\n" + 
             "  <artifactId>parent</artifactId>\r\n" + 
@@ -141,10 +141,10 @@ public class ConsumerPomXMLFilterTest extends AbstractXMLFilterTests
             "  </pluginRepositories>\r\n" + 
             "</project>";
         String expected = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n" + 
-            "<project xmlns=\"http://maven.apache.org/POM/4.0.0\" \r\n" + 
-            "         xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\r\n" + 
-            "         xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 \r\n" + 
-            "                             http://maven.apache.org/maven-v4_0_0.xsd\">\r\n" + 
+            "<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\r\n" +
+            "       xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\r\n" +
+            "       xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0\r\n" +
+            "                           http://maven.apache.org/xsd/maven-4.0.0.xsd\">\r\n" + 
             "  <modelVersion>4.0.0</modelVersion>\r\n" + 
             "  <groupId>org.sonatype.mavenbook.multispring</groupId>\r\n" + 
             "  <artifactId>parent</artifactId>\r\n" + 
diff --git a/pom.xml b/pom.xml
index 0a50d17..805cb06 100644
--- a/pom.xml
+++ b/pom.xml
@@ -67,7 +67,6 @@ under the License.
     <resolverVersion>1.4.1</resolverVersion>
     <slf4jVersion>1.7.25</slf4jVersion>
     <xmlunitVersion>2.6.2</xmlunitVersion>
-    <powermockVersion>1.7.4</powermockVersion>
     <maven.test.redirectTestOutputToFile>true</maven.test.redirectTestOutputToFile>
     <!-- Control the name of the distribution and information output by mvn -->
     <distributionId>apache-maven</distributionId>
@@ -431,11 +430,6 @@ under the License.
         <version>${xmlunitVersion}</version>
         <scope>test</scope>
       </dependency>
-      <dependency>
-        <groupId>org.powermock</groupId>
-        <artifactId>powermock-reflect</artifactId>
-        <version>${powermockVersion}</version>
-      </dependency>
     </dependencies>
     <!--bootstrap-start-comment-->
   </dependencyManagement>