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/02/24 21:57:58 UTC

[maven] 02/02: [MNG-6656] Refactor code, make sure it still works with non-xml poms

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

commit 95b5b58100716d7a82d94a0f67eb935a78127a5a
Author: rfscholte <rf...@apache.org>
AuthorDate: Mon Feb 24 22:57:44 2020 +0100

    [MNG-6656] Refactor code, make sure it still works with non-xml poms
---
 .../DefaultRepositorySystemSessionFactory.java     | 154 -----------------
 .../maven/project/DefaultProjectBuilder.java       | 190 ++++++++++++++++++++-
 .../DefaultConsumerPomXMLFilterFactory.java        |  10 +-
 .../building}/DefaultBuildPomXMLFilterFactory.java |  36 ++--
 .../maven/model/building/DefaultModelBuilder.java  |   5 +-
 .../model/building/DefaultModelBuilderFactory.java |   8 -
 .../building/DefaultModelBuildingRequest.java      |  15 ++
 .../model/building/DefaultModelProcessor.java      |  20 ---
 .../building/DefaultModelSourceTransformer.java    |   3 +-
 .../model/building/FilterModelBuildingRequest.java |  13 ++
 .../maven/model/building/ModelBuildingRequest.java |   4 +
 .../maven/model/building/ModelProcessor.java       |  19 ---
 .../model/building/ModelSourceTransformer.java     |   5 +-
 .../maven/model/building/TransformerContext.java   |  17 +-
 .../apache/maven/model/io/DefaultModelReader.java  |   7 +
 maven-xml/pom.xml                                  |  26 ---
 .../xml/sax/filter/BuildPomXMLFilterFactory.java   |  11 +-
 .../sax/filter/ConsumerPomXMLFilterFactory.java    |  16 +-
 .../xml/sax/filter/ReactorDependencyXMLFilter.java |  10 +-
 .../xml/sax/filter/ConsumerPomXMLFilterTest.java   |  22 +--
 .../sax/filter/ReactorDependencyXMLFilterTest.java |   8 +-
 21 files changed, 282 insertions(+), 317 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 77581d6..e89b39e 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
@@ -19,46 +19,21 @@ package org.apache.maven.internal.aether;
  * under the License.
  */
 
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.io.InputStream;
-import java.io.PipedInputStream;
-import java.io.PipedOutputStream;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
 import java.util.LinkedHashMap;
 import java.util.Map;
 import java.util.Properties;
-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.stream.FactoryConfigurationError;
-import javax.xml.stream.XMLInputFactory;
-import javax.xml.stream.XMLStreamException;
-import javax.xml.stream.XMLStreamReader;
-import javax.xml.transform.OutputKeys;
-import javax.xml.transform.Transformer;
-import javax.xml.transform.TransformerConfigurationException;
-import javax.xml.transform.TransformerException;
-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.RepositoryUtils;
 import org.apache.maven.artifact.handler.manager.ArtifactHandlerManager;
 import org.apache.maven.bridge.MavenRepositorySystem;
 import org.apache.maven.eventspy.internal.EventSpyDispatcher;
 import org.apache.maven.execution.MavenExecutionRequest;
-import org.apache.maven.feature.Features;
 import org.apache.maven.repository.internal.MavenRepositorySystemUtils;
 import org.apache.maven.settings.Mirror;
 import org.apache.maven.settings.Proxy;
@@ -67,8 +42,6 @@ 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.sax.filter.AbstractSAXFilter;
 import org.apache.maven.xml.sax.filter.ConsumerPomXMLFilterFactory;
 import org.codehaus.plexus.configuration.xml.XmlPlexusConfiguration;
 import org.codehaus.plexus.logging.Logger;
@@ -76,24 +49,18 @@ import org.codehaus.plexus.util.xml.Xpp3Dom;
 import org.eclipse.aether.ConfigurationProperties;
 import org.eclipse.aether.DefaultRepositorySystemSession;
 import org.eclipse.aether.RepositorySystem;
-import org.eclipse.aether.artifact.Artifact;
 import org.eclipse.aether.repository.LocalRepository;
 import org.eclipse.aether.repository.NoLocalRepositoryManagerException;
 import org.eclipse.aether.repository.RepositoryPolicy;
 import org.eclipse.aether.repository.WorkspaceReader;
 import org.eclipse.aether.resolution.ResolutionErrorPolicy;
 import org.eclipse.aether.spi.localrepo.LocalRepositoryManagerFactory;
-import org.eclipse.aether.transform.FileTransformer;
-import org.eclipse.aether.transform.FileTransformerManager;
-import org.eclipse.aether.transform.TransformException;
 import org.eclipse.aether.util.repository.AuthenticationBuilder;
 import org.eclipse.aether.util.repository.DefaultAuthenticationSelector;
 import org.eclipse.aether.util.repository.DefaultMirrorSelector;
 import org.eclipse.aether.util.repository.DefaultProxySelector;
 import org.eclipse.aether.util.repository.SimpleResolutionErrorPolicy;
 import org.eclipse.sisu.Nullable;
-import org.xml.sax.InputSource;
-import org.xml.sax.SAXException;
 
 /**
  * @since 3.3.0
@@ -278,129 +245,8 @@ public class DefaultRepositorySystemSessionFactory
         mavenRepositorySystem.injectProxy( session, request.getPluginArtifactRepositories() );
         mavenRepositorySystem.injectAuthentication( session, request.getPluginArtifactRepositories() );
 
-        if ( Features.buildConsumer().isActive() )
-        {
-            session.setFileTransformerManager( newFileTransformerManager() );
-        }
         return session;
     }
-
-    private FileTransformerManager newFileTransformerManager()
-    {
-        return new FileTransformerManager()
-        {
-            @Override
-            public Collection<FileTransformer> getTransformersForArtifact( final Artifact artifact )
-            {
-                Collection<FileTransformer> transformers = new ArrayList<>();
-                if ( "pom".equals( artifact.getExtension() ) )
-                {
-                    final SAXTransformerFactory transformerFactory =
-                        (SAXTransformerFactory) Factories.newTransformerFactory();
-                    
-                    transformers.add( new FileTransformer()
-                    {
-                        @Override
-                        public InputStream transformData( File file )
-                            throws IOException, TransformException
-                        {
-                            final PipedOutputStream pipedOutputStream  = new PipedOutputStream();
-                            final PipedInputStream pipedInputStream  = new PipedInputStream( pipedOutputStream );
-                            
-                            final TransformerHandler transformerHandler =
-                                getTransformerHandler( transformerFactory, file );
-                            
-                            final SAXSource transformSource;
-                            try
-                            {
-                                AbstractSAXFilter filter = consumerPomXMLFilterFactory.get().get( file.toPath() );
-                                filter.setLexicalHandler( transformerHandler );
-                                
-                                transformSource =
-                                    new SAXSource( filter, new InputSource( new FileInputStream( file ) ) );
-                            }
-                            catch ( SAXException | ParserConfigurationException | TransformerConfigurationException e )
-                            {   
-                                throw new TransformException( "Failed to create a consumerPomXMLFilter", e );
-                            }
-                            
-                            transformerHandler.setResult( new StreamResult( pipedOutputStream ) );
-                            
-                            SAXResult transformResult = new SAXResult( transformerHandler );
-                            
-                            ExecutorService executorService = Executors.newSingleThreadExecutor();
-                            executorService.execute( () -> 
-                            {
-                                try ( PipedOutputStream out = pipedOutputStream )
-                                {
-                                    transformerFactory.newTransformer().transform( transformSource, transformResult );
-                                }
-                                catch ( TransformerException | IOException e )
-                                {
-                                    throw new RuntimeException( e );
-                                }
-                            } );
-
-                            return pipedInputStream;
-                        }
-                        
-                        @Override
-                        public Artifact transformArtifact( Artifact artifact )
-                        {
-                            return artifact;
-                        }
-                    } );
-                }
-                return Collections.unmodifiableCollection( transformers );
-            }
-        };
-    }
-    
-    private static TransformerHandler getTransformerHandler( SAXTransformerFactory transformerFactory,
-                                                      File file )
-        throws IOException, FileNotFoundException, TransformException
-    {
-        final TransformerHandler transformerHandler;
-        
-        // Keep same encoding+version
-        try ( FileInputStream input = new FileInputStream( file ) )
-        {
-            XMLStreamReader streamReader =
-                XMLInputFactory.newFactory().createXMLStreamReader( input );
-
-            transformerHandler = transformerFactory.newTransformerHandler();
-
-            final String encoding = streamReader.getCharacterEncodingScheme();
-            final String version = streamReader.getVersion();
-            
-            Transformer transformer = transformerHandler.getTransformer();
-            if ( encoding == null && version == null )
-            {
-                transformer.setOutputProperty( OutputKeys.OMIT_XML_DECLARATION, "yes" );
-            }
-            else
-            {
-                transformer.setOutputProperty( OutputKeys.OMIT_XML_DECLARATION, "no" );
-
-                if ( encoding != null )
-                {
-                    transformer.setOutputProperty( OutputKeys.ENCODING, encoding );
-                }
-                if ( version != null )
-                {
-                    transformer.setOutputProperty( OutputKeys.VERSION, version );
-                }
-            }
-        }
-        catch ( XMLStreamException 
-                        | FactoryConfigurationError
-                        | TransformerConfigurationException e )
-        {
-            throw new TransformException( "Failed to detect XML encoding and version", e );
-        }
-        return transformerHandler;
-    }
-
     
     private String getUserAgent()
     {
diff --git a/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java b/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java
index 237ba04..68bab45 100644
--- a/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java
+++ b/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java
@@ -20,7 +20,13 @@ package org.apache.maven.project;
  */
 
 import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
 import java.io.IOException;
+import java.io.InputStream;
+import java.io.PipedInputStream;
+import java.io.PipedOutputStream;
+import java.nio.file.Path;
 import java.util.AbstractMap;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -32,6 +38,23 @@ import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+
+import javax.xml.parsers.FactoryConfigurationError;
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.stream.XMLInputFactory;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamReader;
+import javax.xml.transform.OutputKeys;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerConfigurationException;
+import javax.xml.transform.TransformerException;
+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.RepositoryUtils;
 import org.apache.maven.artifact.Artifact;
@@ -40,6 +63,7 @@ import org.apache.maven.artifact.InvalidRepositoryException;
 import org.apache.maven.artifact.repository.ArtifactRepository;
 import org.apache.maven.artifact.repository.LegacyLocalRepositoryManager;
 import org.apache.maven.bridge.MavenRepositorySystem;
+import org.apache.maven.feature.Features;
 import org.apache.maven.model.Build;
 import org.apache.maven.model.Dependency;
 import org.apache.maven.model.DependencyManagement;
@@ -49,6 +73,7 @@ import org.apache.maven.model.Model;
 import org.apache.maven.model.Plugin;
 import org.apache.maven.model.Profile;
 import org.apache.maven.model.ReportPlugin;
+import org.apache.maven.model.building.DefaultBuildPomXMLFilterFactory;
 import org.apache.maven.model.building.DefaultModelBuildingRequest;
 import org.apache.maven.model.building.DefaultModelProblem;
 import org.apache.maven.model.building.FileModelSource;
@@ -60,13 +85,19 @@ import org.apache.maven.model.building.ModelProblem;
 import org.apache.maven.model.building.ModelProcessor;
 import org.apache.maven.model.building.ModelSource;
 import org.apache.maven.model.building.StringModelSource;
+import org.apache.maven.model.building.TransformerContext;
 import org.apache.maven.model.resolution.ModelResolver;
 import org.apache.maven.repository.internal.ArtifactDescriptorUtils;
+import org.apache.maven.xml.Factories;
+import org.apache.maven.xml.sax.filter.AbstractSAXFilter;
+import org.apache.maven.xml.sax.filter.BuildPomXMLFilterFactory;
+import org.apache.maven.xml.sax.filter.ConsumerPomXMLFilterFactory;
 import org.codehaus.plexus.component.annotations.Component;
 import org.codehaus.plexus.component.annotations.Requirement;
 import org.codehaus.plexus.logging.Logger;
 import org.codehaus.plexus.util.Os;
 import org.codehaus.plexus.util.StringUtils;
+import org.eclipse.aether.DefaultRepositorySystemSession;
 import org.eclipse.aether.RepositorySystemSession;
 import org.eclipse.aether.RequestTrace;
 import org.eclipse.aether.impl.RemoteRepositoryManager;
@@ -75,6 +106,10 @@ import org.eclipse.aether.repository.RemoteRepository;
 import org.eclipse.aether.repository.WorkspaceRepository;
 import org.eclipse.aether.resolution.ArtifactRequest;
 import org.eclipse.aether.resolution.ArtifactResult;
+import org.eclipse.aether.transform.FileTransformer;
+import org.eclipse.aether.transform.TransformException;
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
 
 /**
  * DefaultProjectBuilder
@@ -154,7 +189,7 @@ public class DefaultProjectBuilder
 
             if ( project == null )
             {
-                ModelBuildingRequest request = getModelBuildingRequest( config );
+                ModelBuildingRequest request = getModelBuildingRequest( config, pomFile );
 
                 project = new MavenProject();
                 project.setFile( pomFile );
@@ -266,7 +301,7 @@ public class DefaultProjectBuilder
         return ids;
     }
 
-    private ModelBuildingRequest getModelBuildingRequest( InternalConfig config )
+    private ModelBuildingRequest getModelBuildingRequest( InternalConfig config, File pomFile )
     {
         ProjectBuildingRequest configuration = config.request;
 
@@ -274,8 +309,41 @@ public class DefaultProjectBuilder
 
         RequestTrace trace = RequestTrace.newChild( null, configuration ).newChild( request );
 
+        RepositorySystemSession repoSession;
+        if ( Features.buildConsumer().isActive() )
+        {
+            TransformerContext context = new TransformerContext()
+            {
+                @Override
+                public String getUserProperty( String key )
+                {
+                    return config.session.getUserProperties().get( key );
+                }
+
+                @Override
+                public Model getRawModel( Path p )
+                {
+                    return config.modelPool.get( p );
+                }
+
+                @Override
+                public Model getRawModel( String groupId, String artifactId )
+                {
+                    return config.modelPool.get( groupId, artifactId, null );
+                }
+            };
+            request.setTransformerContext( context );
+            
+            repoSession = new DefaultRepositorySystemSession( config.session )
+                                        .setFileTransformerManager( a -> getTransformersForArtifact( a, context ) );
+        }
+        else
+        {
+            repoSession = config.session;
+        }
+        
         ModelResolver resolver =
-            new ProjectModelResolver( config.session, trace, repoSystem, repositoryManager, config.repositories,
+            new ProjectModelResolver( repoSession, trace, repoSystem, repositoryManager, config.repositories,
                                       configuration.getRepositoryMerging(), config.modelPool );
 
         request.setValidationLevel( configuration.getValidationLevel() );
@@ -430,7 +498,7 @@ public class DefaultProjectBuilder
     {
         boolean noErrors = true;
 
-        ModelBuildingRequest request = getModelBuildingRequest( config );
+        ModelBuildingRequest request = getModelBuildingRequest( config, pomFile );
 
         MavenProject project = new MavenProject();
         project.setFile( pomFile );
@@ -1044,6 +1112,120 @@ public class DefaultProjectBuilder
 
         return null;
     }
+    
+    private Collection<FileTransformer> getTransformersForArtifact( final org.eclipse.aether.artifact.Artifact artifact,
+                                                                    TransformerContext context )
+    {
+        Collection<FileTransformer> transformers = new ArrayList<>();
+        if ( "pom".equals( artifact.getExtension() ) )
+        {
+            final SAXTransformerFactory transformerFactory =
+                (SAXTransformerFactory) Factories.newTransformerFactory();
+            
+            transformers.add( new FileTransformer()
+            {
+                @Override
+                public InputStream transformData( File file )
+                    throws IOException, TransformException
+                {
+                    final PipedOutputStream pipedOutputStream  = new PipedOutputStream();
+                    final PipedInputStream pipedInputStream  = new PipedInputStream( pipedOutputStream );
+                    
+                    final TransformerHandler transformerHandler =
+                        getTransformerHandler( transformerFactory, file );
+                    
+                    BuildPomXMLFilterFactory buildPomXmlFactory = new DefaultBuildPomXMLFilterFactory( context );
+                    
+                    final SAXSource transformSource;
+                    try
+                    {
+                        AbstractSAXFilter filter =
+                            new ConsumerPomXMLFilterFactory( buildPomXmlFactory ).get( file.toPath() );
+                        filter.setLexicalHandler( transformerHandler );
+                        
+                        transformSource =
+                            new SAXSource( filter, new InputSource( new FileInputStream( file ) ) );
+                    }
+                    catch ( SAXException | ParserConfigurationException | TransformerConfigurationException e )
+                    {   
+                        throw new TransformException( "Failed to create a consumerPomXMLFilter", e );
+                    }
+                    
+                    transformerHandler.setResult( new StreamResult( pipedOutputStream ) );
+                    
+                    SAXResult transformResult = new SAXResult( transformerHandler );
+                    
+                    ExecutorService executorService = Executors.newSingleThreadExecutor();
+                    executorService.execute( () -> 
+                    {
+                        try ( PipedOutputStream out = pipedOutputStream )
+                        {
+                            transformerFactory.newTransformer().transform( transformSource, transformResult );
+                        }
+                        catch ( TransformerException | IOException e )
+                        {
+                            throw new RuntimeException( e );
+                        }
+                    } );
+
+                    return pipedInputStream;
+                }
+                
+                @Override
+                public org.eclipse.aether.artifact.Artifact transformArtifact( 
+                                                                   org.eclipse.aether.artifact.Artifact artifact )
+                {
+                    return artifact;
+                }
+            } );
+        }
+        return Collections.unmodifiableCollection( transformers );
+    }
+    
+    private static TransformerHandler getTransformerHandler( SAXTransformerFactory transformerFactory,
+                                                             File file )
+               throws IOException, FileNotFoundException, TransformException
+           {
+               final TransformerHandler transformerHandler;
+               
+               // Keep same encoding+version
+               try ( FileInputStream input = new FileInputStream( file ) )
+               {
+                   XMLStreamReader streamReader =
+                       XMLInputFactory.newFactory().createXMLStreamReader( input );
+
+                   transformerHandler = transformerFactory.newTransformerHandler();
+
+                   final String encoding = streamReader.getCharacterEncodingScheme();
+                   final String version = streamReader.getVersion();
+                   
+                   Transformer transformer = transformerHandler.getTransformer();
+                   if ( encoding == null && version == null )
+                   {
+                       transformer.setOutputProperty( OutputKeys.OMIT_XML_DECLARATION, "yes" );
+                   }
+                   else
+                   {
+                       transformer.setOutputProperty( OutputKeys.OMIT_XML_DECLARATION, "no" );
+
+                       if ( encoding != null )
+                       {
+                           transformer.setOutputProperty( OutputKeys.ENCODING, encoding );
+                       }
+                       if ( version != null )
+                       {
+                           transformer.setOutputProperty( OutputKeys.VERSION, version );
+                       }
+                   }
+               }
+               catch ( XMLStreamException 
+                               | FactoryConfigurationError
+                               | TransformerConfigurationException e )
+               {
+                   throw new TransformException( "Failed to detect XML encoding and version", e );
+               }
+               return transformerHandler;
+           }
 
     /**
      * InternalConfig
diff --git a/maven-core/src/main/java/org/apache/maven/xml/internal/DefaultConsumerPomXMLFilterFactory.java b/maven-core/src/main/java/org/apache/maven/xml/internal/DefaultConsumerPomXMLFilterFactory.java
index 489019f..5b13aa5 100644
--- a/maven-core/src/main/java/org/apache/maven/xml/internal/DefaultConsumerPomXMLFilterFactory.java
+++ b/maven-core/src/main/java/org/apache/maven/xml/internal/DefaultConsumerPomXMLFilterFactory.java
@@ -19,9 +19,7 @@ package org.apache.maven.xml.internal;
  * under the License.
  */
 
-import javax.inject.Named;
-import javax.inject.Singleton;
-
+import org.apache.maven.xml.sax.filter.BuildPomXMLFilterFactory;
 import org.apache.maven.xml.sax.filter.ConsumerPomXMLFilterFactory;
 
 /**
@@ -29,9 +27,11 @@ import org.apache.maven.xml.sax.filter.ConsumerPomXMLFilterFactory;
  * @author Robert Scholte
  * @since 3.7.0
  */
-@Named
-@Singleton
 public class DefaultConsumerPomXMLFilterFactory extends ConsumerPomXMLFilterFactory
 {
+    public DefaultConsumerPomXMLFilterFactory( BuildPomXMLFilterFactory buildPomXMLFilterFactory )
+    {
+        super( buildPomXMLFilterFactory );
+    }
 
 }
diff --git a/maven-core/src/main/java/org/apache/maven/xml/internal/DefaultBuildPomXMLFilterFactory.java b/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultBuildPomXMLFilterFactory.java
similarity index 70%
rename from maven-core/src/main/java/org/apache/maven/xml/internal/DefaultBuildPomXMLFilterFactory.java
rename to maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultBuildPomXMLFilterFactory.java
index d359eb6..cc7b3b3 100644
--- a/maven-core/src/main/java/org/apache/maven/xml/internal/DefaultBuildPomXMLFilterFactory.java
+++ b/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultBuildPomXMLFilterFactory.java
@@ -1,4 +1,4 @@
-package org.apache.maven.xml.internal;
+package org.apache.maven.model.building;
 
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
@@ -22,17 +22,11 @@ package org.apache.maven.xml.internal;
 
 import java.nio.file.Path;
 import java.util.Optional;
+import java.util.function.BiFunction;
 import java.util.function.Function;
 
-import javax.inject.Inject;
-import javax.inject.Named;
-import javax.inject.Singleton;
-
-import org.apache.maven.execution.MavenSession;
 import org.apache.maven.model.Model;
-import org.apache.maven.model.building.ModelCacheManager;
 import org.apache.maven.xml.sax.filter.BuildPomXMLFilterFactory;
-import org.apache.maven.xml.sax.filter.DependencyKey;
 import org.apache.maven.xml.sax.filter.RelativeProject;
 
 /**
@@ -40,49 +34,43 @@ import org.apache.maven.xml.sax.filter.RelativeProject;
  * @author Robert Scholte
  * @since 3.7.0
  */
-@Named
-@Singleton
 public class DefaultBuildPomXMLFilterFactory extends BuildPomXMLFilterFactory
 {
-    private MavenSession session;
-    
-    @Inject
-    private ModelCacheManager rawModelCache; 
+    private final TransformerContext context;
     
-    @Inject
-    public DefaultBuildPomXMLFilterFactory( MavenSession session )
+    public DefaultBuildPomXMLFilterFactory( TransformerContext context )
     {
-        this.session = session;
+        this.context = context;
     }
-
+    
     @Override
     protected Optional<String> getChangelist()
     {
-        return Optional.ofNullable( session.getUserProperties().getProperty( "changelist" ) );
+        return Optional.ofNullable( context.getUserProperty( "changelist" ) );
     }
 
     @Override
     protected Optional<String> getRevision()
     {
-        return Optional.ofNullable( session.getUserProperties().getProperty( "revision" ) );
+        return Optional.ofNullable( context.getUserProperty( "revision" ) );
     }
 
     @Override
     protected Optional<String> getSha1()
     {
-        return Optional.ofNullable( session.getUserProperties().getProperty( "sha1" ) );
+        return Optional.ofNullable( context.getUserProperty( "sha1" ) );
     }
 
     @Override
     protected Function<Path, Optional<RelativeProject>> getRelativePathMapper()
     {
-        return p -> Optional.ofNullable( rawModelCache.get( p ) ).map( m -> toRelativeProject( m ) );
+        return p -> Optional.ofNullable( context.getRawModel( p ) ).map( m -> toRelativeProject( m ) );
     }
     
     @Override
-    protected Function<DependencyKey, String> getDependencyKeyToVersionMapper()
+    protected BiFunction<String, String, String> getDependencyKeyToVersionMapper()
     {
-        return k -> Optional.ofNullable( rawModelCache.get( k ) )
+        return (g,a) -> Optional.ofNullable( context.getRawModel( g, a ) )
                             .map( m -> toVersion( m ) )
                             .orElse( null );
     }
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 c635d05..4e71eb2 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
@@ -27,6 +27,7 @@ import java.io.File;
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.LinkedHashSet;
@@ -688,7 +689,7 @@ public class DefaultModelBuilder
         {
             try
             {
-                Model rawModel = modelProcessor.read( pomFile.toPath(), buildPomXMLFilterFactory.get() );
+                Model rawModel = modelProcessor.read( pomFile, Collections.singletonMap( "transformerContext", buildPomXMLFilterFactory ) );
 
                 model.setPomFile( pomFile );
                 
@@ -698,7 +699,7 @@ public class DefaultModelBuilder
                 // Apply enriched data
                 modelMerger.merge( model, rawModel, false, null );
             }
-            catch ( IOException | TransformerException | SAXException | ParserConfigurationException e )
+            catch ( IOException e )
             {
                 problems.add( new ModelProblemCollectorRequest( Severity.WARNING, Version.V37 ).setException( e ) );
             }
diff --git a/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilderFactory.java b/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilderFactory.java
index f84cc0d..cca0241 100644
--- a/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilderFactory.java
+++ b/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuilderFactory.java
@@ -64,7 +64,6 @@ import org.apache.maven.model.superpom.DefaultSuperPomProvider;
 import org.apache.maven.model.superpom.SuperPomProvider;
 import org.apache.maven.model.validation.DefaultModelValidator;
 import org.apache.maven.model.validation.ModelValidator;
-import org.apache.maven.xml.sax.filter.BuildPomXMLFilterFactory;
 
 /**
  * A factory to create model builder instances when no dependency injection is available. <em>Note:</em> This class is
@@ -82,7 +81,6 @@ public class DefaultModelBuilderFactory
         DefaultModelProcessor processor = new DefaultModelProcessor();
         processor.setModelLocator( newModelLocator() );
         processor.setModelReader( newModelReader() );
-        processor.setTransformer( newTransformer() );
         return processor;
     }
 
@@ -201,11 +199,6 @@ public class DefaultModelBuilderFactory
         return new DefaultReportingConverter();
     }
 
-    protected ModelSourceTransformer newTransformer()
-    {
-        return new DefaultModelSourceTransformer();
-    }
-
     /**
      * Creates a new model builder instance.
      *
@@ -232,7 +225,6 @@ public class DefaultModelBuilderFactory
         modelBuilder.setPluginConfigurationExpander( newPluginConfigurationExpander() );
         modelBuilder.setReportConfigurationExpander( newReportConfigurationExpander() );
         modelBuilder.setReportingConverter( newReportingConverter() );
-        modelBuilder.setBuildPomXMLFilterFactory( new BuildPomXMLFilterFactory() );
         modelBuilder.setModelCacheManager( new DefaultModelCacheManager() );
 
         return modelBuilder;
diff --git a/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuildingRequest.java b/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuildingRequest.java
index 3cf3a89..b347eb4 100644
--- a/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuildingRequest.java
+++ b/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelBuildingRequest.java
@@ -73,6 +73,8 @@ public class DefaultModelBuildingRequest
     private ModelCache modelCache;
 
     private WorkspaceModelResolver workspaceResolver;
+    
+    private TransformerContext context;
 
     /**
      * Creates an empty request.
@@ -421,4 +423,17 @@ public class DefaultModelBuildingRequest
         this.workspaceResolver = workspaceResolver;
         return this;
     }
+    
+    @Override
+    public TransformerContext getTransformerContext()
+    {
+        return context;
+    }
+    
+    @Override
+    public ModelBuildingRequest setTransformerContext( TransformerContext context )
+    {
+        this.context = context;
+        return this;
+    }
 }
diff --git a/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelProcessor.java b/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelProcessor.java
index d87609b..9dfa8bd5 100644
--- a/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelProcessor.java
+++ b/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelProcessor.java
@@ -23,21 +23,16 @@ import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.Reader;
-import java.nio.file.Path;
 import java.util.Map;
 
 import javax.inject.Inject;
 import javax.inject.Named;
 import javax.inject.Singleton;
-import javax.xml.parsers.ParserConfigurationException;
-import javax.xml.transform.TransformerConfigurationException;
 
 import org.apache.maven.model.Model;
 import org.apache.maven.model.io.ModelReader;
 import org.apache.maven.model.locator.ModelLocator;
-import org.apache.maven.xml.sax.filter.BuildPomXMLFilterFactory;
 import org.eclipse.sisu.Typed;
-import org.xml.sax.SAXException;
 
 /**
  *
@@ -77,9 +72,6 @@ public class DefaultModelProcessor
     @Inject
     private ModelReader reader;
     
-    @Inject
-    private ModelSourceTransformer transformer;
-
     public DefaultModelProcessor setModelLocator( ModelLocator locator )
     {
         this.locator = locator;
@@ -91,12 +83,6 @@ public class DefaultModelProcessor
         this.reader = reader;
         return this;
     }
-    
-    public DefaultModelProcessor setTransformer( ModelSourceTransformer transformer )
-    {
-        this.transformer = transformer;
-        return this;
-    }
 
     @Override
     public File locatePom( File projectDirectory )
@@ -124,10 +110,4 @@ public class DefaultModelProcessor
     {
         return reader.read( input, options );
     }
-
-    @Override
-    public Model read( Path pomFile, BuildPomXMLFilterFactory factory ) throws IOException, TransformerConfigurationException, SAXException, ParserConfigurationException
-    {
-        return reader.read( transformer.transform( pomFile, factory ), null );
-    }
 }
diff --git a/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelSourceTransformer.java b/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelSourceTransformer.java
index 6171089..daf91ec 100644
--- a/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelSourceTransformer.java
+++ b/maven-model-builder/src/main/java/org/apache/maven/model/building/DefaultModelSourceTransformer.java
@@ -53,9 +53,10 @@ class DefaultModelSourceTransformer implements ModelSourceTransformer
     private BuildPomXMLFilterListener xmlFilterListener;
     
     @Override
-    public InputStream transform( Path pomFile, BuildPomXMLFilterFactory buildPomXMLFilterFactory )
+    public InputStream transform( Path pomFile, TransformerContext context )
         throws IOException, TransformerConfigurationException, SAXException, ParserConfigurationException
     {
+        final BuildPomXMLFilterFactory buildPomXMLFilterFactory = new DefaultBuildPomXMLFilterFactory( context );
         final TransformerFactory transformerFactory = Factories.newTransformerFactory() ;
         
         final PipedOutputStream pipedOutputStream  = new PipedOutputStream();
diff --git a/maven-model-builder/src/main/java/org/apache/maven/model/building/FilterModelBuildingRequest.java b/maven-model-builder/src/main/java/org/apache/maven/model/building/FilterModelBuildingRequest.java
index fb38f16..1dd2643 100644
--- a/maven-model-builder/src/main/java/org/apache/maven/model/building/FilterModelBuildingRequest.java
+++ b/maven-model-builder/src/main/java/org/apache/maven/model/building/FilterModelBuildingRequest.java
@@ -294,4 +294,17 @@ class FilterModelBuildingRequest
         request.setWorkspaceModelResolver( workspaceResolver );
         return this;
     }
+    
+    @Override
+    public TransformerContext getTransformerContext()
+    {
+        return request.getTransformerContext();
+    }
+    
+    @Override
+    public ModelBuildingRequest setTransformerContext( TransformerContext context )
+    {
+        request.setTransformerContext( context );
+        return this;
+    }
 }
\ No newline at end of file
diff --git a/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelBuildingRequest.java b/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelBuildingRequest.java
index 1e0b3da..0ae9694 100644
--- a/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelBuildingRequest.java
+++ b/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelBuildingRequest.java
@@ -349,4 +349,8 @@ public interface ModelBuildingRequest
     WorkspaceModelResolver getWorkspaceModelResolver();
 
     ModelBuildingRequest setWorkspaceModelResolver( WorkspaceModelResolver workspaceResolver );
+    
+    TransformerContext getTransformerContext();
+
+    ModelBuildingRequest setTransformerContext( TransformerContext context );
 }
diff --git a/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelProcessor.java b/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelProcessor.java
index 2adb2c0..c2c2ec0 100644
--- a/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelProcessor.java
+++ b/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelProcessor.java
@@ -1,17 +1,5 @@
 package org.apache.maven.model.building;
 
-import java.io.IOException;
-import java.io.InputStream;
-import java.nio.file.Path;
-import java.util.Map;
-import java.util.function.Function;
-
-import javax.xml.parsers.ParserConfigurationException;
-import javax.xml.transform.TransformerConfigurationException;
-
-import org.apache.maven.model.Model;
-import org.apache.maven.model.io.ModelParseException;
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -33,8 +21,6 @@ import org.apache.maven.model.io.ModelParseException;
 
 import org.apache.maven.model.io.ModelReader;
 import org.apache.maven.model.locator.ModelLocator;
-import org.apache.maven.xml.sax.filter.BuildPomXMLFilterFactory;
-import org.xml.sax.SAXException;
 
 /**
  * ModelProcessor
@@ -45,10 +31,5 @@ public interface ModelProcessor
 {
 
     String SOURCE = "org.apache.maven.model.building.source";
-    
-    default Model read( Path pomFile, BuildPomXMLFilterFactory factory ) throws IOException, TransformerConfigurationException, SAXException, ParserConfigurationException
-    {
-        return read( pomFile.toFile(), null );
-    }
 
 }
diff --git a/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelSourceTransformer.java b/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelSourceTransformer.java
index 5ee3252..b505039 100644
--- a/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelSourceTransformer.java
+++ b/maven-model-builder/src/main/java/org/apache/maven/model/building/ModelSourceTransformer.java
@@ -26,7 +26,6 @@ import java.nio.file.Path;
 import javax.xml.parsers.ParserConfigurationException;
 import javax.xml.transform.TransformerConfigurationException;
 
-import org.apache.maven.xml.sax.filter.BuildPomXMLFilterFactory;
 import org.xml.sax.SAXException;
 
 /**
@@ -36,7 +35,5 @@ import org.xml.sax.SAXException;
  */
 public interface ModelSourceTransformer
 {
-
-    InputStream transform( Path pomFile, BuildPomXMLFilterFactory buildPomXMLFilterFactory ) throws IOException, TransformerConfigurationException, SAXException, ParserConfigurationException;
-
+    InputStream transform( Path pomFile, TransformerContext context ) throws IOException, TransformerConfigurationException, SAXException, ParserConfigurationException;
 }
diff --git a/maven-core/src/main/java/org/apache/maven/xml/internal/DefaultConsumerPomXMLFilterFactory.java b/maven-model-builder/src/main/java/org/apache/maven/model/building/TransformerContext.java
similarity index 75%
copy from maven-core/src/main/java/org/apache/maven/xml/internal/DefaultConsumerPomXMLFilterFactory.java
copy to maven-model-builder/src/main/java/org/apache/maven/model/building/TransformerContext.java
index 489019f..cad2d25 100644
--- a/maven-core/src/main/java/org/apache/maven/xml/internal/DefaultConsumerPomXMLFilterFactory.java
+++ b/maven-model-builder/src/main/java/org/apache/maven/model/building/TransformerContext.java
@@ -1,4 +1,4 @@
-package org.apache.maven.xml.internal;
+package org.apache.maven.model.building;
 
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
@@ -19,19 +19,20 @@ package org.apache.maven.xml.internal;
  * under the License.
  */
 
-import javax.inject.Named;
-import javax.inject.Singleton;
+import java.nio.file.Path;
 
-import org.apache.maven.xml.sax.filter.ConsumerPomXMLFilterFactory;
+import org.apache.maven.model.Model;
 
 /**
  * 
  * @author Robert Scholte
  * @since 3.7.0
  */
-@Named
-@Singleton
-public class DefaultConsumerPomXMLFilterFactory extends ConsumerPomXMLFilterFactory
+public interface TransformerContext
 {
-
+    String getUserProperty( String key );
+    
+    Model getRawModel( Path p );
+    
+    Model getRawModel( String groupId, String artifactId );
 }
diff --git a/maven-model-builder/src/main/java/org/apache/maven/model/io/DefaultModelReader.java b/maven-model-builder/src/main/java/org/apache/maven/model/io/DefaultModelReader.java
index b0778d8..2750ce0 100644
--- a/maven-model-builder/src/main/java/org/apache/maven/model/io/DefaultModelReader.java
+++ b/maven-model-builder/src/main/java/org/apache/maven/model/io/DefaultModelReader.java
@@ -27,11 +27,13 @@ import java.io.Reader;
 import java.util.Map;
 import java.util.Objects;
 
+import javax.inject.Inject;
 import javax.inject.Named;
 import javax.inject.Singleton;
 
 import org.apache.maven.model.InputSource;
 import org.apache.maven.model.Model;
+import org.apache.maven.model.building.ModelSourceTransformer;
 import org.apache.maven.model.io.xpp3.MavenXpp3Reader;
 import org.apache.maven.model.io.xpp3.MavenXpp3ReaderEx;
 import org.codehaus.plexus.util.ReaderFactory;
@@ -48,6 +50,11 @@ import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
 public class DefaultModelReader
     implements ModelReader
 {
+    @Inject
+    private ModelSourceTransformer transformer;
+
+
+    
 
     @Override
     public Model read( File input, Map<String, ?> options )
diff --git a/maven-xml/pom.xml b/maven-xml/pom.xml
index 4541888..eb285eb 100644
--- a/maven-xml/pom.xml
+++ b/maven-xml/pom.xml
@@ -31,34 +31,8 @@ under the License.
   <artifactId>maven-xml</artifactId>
   <name>Maven XML</name>
   
-  <properties>
-    <maven.compiler.source>1.8</maven.compiler.source>
-    <maven.compiler.target>1.8</maven.compiler.target>
-  </properties>
-
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.codehaus.mojo</groupId>
-        <artifactId>animal-sniffer-maven-plugin</artifactId>
-        <configuration>
-          <signature>
-            <groupId>org.codehaus.mojo.signature</groupId>
-            <artifactId>java18</artifactId>
-            <version>1.0</version>
-          </signature>
-        </configuration>
-      </plugin>
-    </plugins>
-  </build>
-  
   <dependencies>
     <dependency>
-      <groupId>javax.inject</groupId>
-      <artifactId>javax.inject</artifactId>
-      <optional>true</optional>
-    </dependency>
-    <dependency>
       <groupId>org.xmlunit</groupId>
       <artifactId>xmlunit-assertj</artifactId>
       <scope>test</scope>
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 66c5fc9..2b8e16d 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
@@ -21,6 +21,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.Function;
 
 import javax.xml.parsers.ParserConfigurationException;
@@ -43,6 +44,14 @@ import org.xml.sax.ext.LexicalHandler;
  */
 public class BuildPomXMLFilterFactory
 {
+    /**
+     * 
+     * @param projectFile will be used by ConsumerPomXMLFilter to get the right filter
+     * @return
+     * @throws SAXException
+     * @throws ParserConfigurationException
+     * @throws TransformerConfigurationException
+     */
     public final BuildPomXMLFilter get( Path projectFile )
         throws SAXException, ParserConfigurationException, TransformerConfigurationException
     {
@@ -127,7 +136,7 @@ public class BuildPomXMLFilterFactory
         return null;
     }
     
-    protected Function<DependencyKey, String> getDependencyKeyToVersionMapper()
+    protected BiFunction<String, String, String> getDependencyKeyToVersionMapper()
     {
         return null;
     }
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 612ddb9..2b2f542 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
@@ -21,8 +21,6 @@ package org.apache.maven.xml.sax.filter;
 
 import java.nio.file.Path;
 
-import javax.inject.Inject;
-import javax.inject.Provider;
 import javax.xml.parsers.ParserConfigurationException;
 import javax.xml.transform.TransformerConfigurationException;
 
@@ -33,17 +31,11 @@ import org.xml.sax.SAXException;
  * @author Robert Scholte
  * @since 3.7.0
  */
-public abstract class ConsumerPomXMLFilterFactory
+public class ConsumerPomXMLFilterFactory
 {
-    @Inject
-    private Provider<BuildPomXMLFilterFactory> buildPomXMLFilterFactory;
+    private BuildPomXMLFilterFactory buildPomXMLFilterFactory;
     
-    public ConsumerPomXMLFilterFactory()
-    {
-    }
-
-    // For testing purpose
-    ConsumerPomXMLFilterFactory( Provider<BuildPomXMLFilterFactory> buildPomXMLFilterFactory )
+    public ConsumerPomXMLFilterFactory( BuildPomXMLFilterFactory buildPomXMLFilterFactory )
     {
         this.buildPomXMLFilterFactory = buildPomXMLFilterFactory;
     }
@@ -51,7 +43,7 @@ public abstract class ConsumerPomXMLFilterFactory
     public final ConsumerPomXMLFilter get( Path projectPath )
         throws SAXException, ParserConfigurationException, TransformerConfigurationException
     {
-        BuildPomXMLFilter parent = buildPomXMLFilterFactory.get().get( projectPath );
+        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/main/java/org/apache/maven/xml/sax/filter/ReactorDependencyXMLFilter.java b/maven-xml/src/main/java/org/apache/maven/xml/sax/filter/ReactorDependencyXMLFilter.java
index b37092f..6bc2663 100644
--- a/maven-xml/src/main/java/org/apache/maven/xml/sax/filter/ReactorDependencyXMLFilter.java
+++ b/maven-xml/src/main/java/org/apache/maven/xml/sax/filter/ReactorDependencyXMLFilter.java
@@ -1,5 +1,7 @@
 package org.apache.maven.xml.sax.filter;
 
+import java.util.function.BiFunction;
+
 /*
  * Licensed to the Apache Software Foundation (ASF) under one
  * or more contributor license agreements.  See the NOTICE file
@@ -19,8 +21,6 @@ package org.apache.maven.xml.sax.filter;
  * under the License.
  */
 
-import java.util.function.Function;
-
 import org.apache.maven.xml.sax.SAXEventUtils;
 import org.xml.sax.Attributes;
 import org.xml.sax.SAXException;
@@ -44,9 +44,9 @@ public class ReactorDependencyXMLFilter extends AbstractEventXMLFilter
 
     private String artifactId;
 
-    private final Function<DependencyKey, String> reactorVersionMapper;
+    private final BiFunction<String, String, String> reactorVersionMapper;
 
-    public ReactorDependencyXMLFilter( Function<DependencyKey, String> reactorVersionMapper )
+    public ReactorDependencyXMLFilter( BiFunction<String, String, String> reactorVersionMapper )
     {
         this.reactorVersionMapper = reactorVersionMapper;
     }
@@ -136,7 +136,7 @@ public class ReactorDependencyXMLFilter extends AbstractEventXMLFilter
 
     private String getVersion()
     {
-        return reactorVersionMapper.apply( new DependencyKey( groupId, artifactId ) );
+        return reactorVersionMapper.apply( groupId, artifactId  );
     }
 
     @Override
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 50abfc8..df1a880 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
@@ -24,18 +24,12 @@ import static org.xmlunit.assertj.XmlAssert.assertThat;
 import java.nio.file.Path;
 import java.nio.file.Paths;
 import java.util.Optional;
+import java.util.function.BiFunction;
 import java.util.function.Function;
 
-import javax.inject.Provider;
 import javax.xml.parsers.ParserConfigurationException;
 import javax.xml.transform.TransformerConfigurationException;
 
-import org.apache.maven.xml.sax.filter.AbstractSAXFilter;
-import org.apache.maven.xml.sax.filter.BuildPomXMLFilterFactory;
-import org.apache.maven.xml.sax.filter.ConsumerPomXMLFilter;
-import org.apache.maven.xml.sax.filter.ConsumerPomXMLFilterFactory;
-import org.apache.maven.xml.sax.filter.DependencyKey;
-import org.apache.maven.xml.sax.filter.RelativeProject;
 import org.junit.Test;
 import org.xml.sax.SAXException;
 
@@ -77,23 +71,13 @@ public class ConsumerPomXMLFilterTest extends AbstractXMLFilterTests
             }
             
             @Override
-            protected Function<DependencyKey, String> getDependencyKeyToVersionMapper()
+            protected BiFunction<String, String, String> getDependencyKeyToVersionMapper()
             {
                 return null;
             }
         };
         
-        Provider<BuildPomXMLFilterFactory> provider = new Provider<BuildPomXMLFilterFactory>()
-        {
-
-            @Override
-            public BuildPomXMLFilterFactory get()
-            {
-                return buildPomXMLFilterFactory;
-            }
-        };
-        
-        ConsumerPomXMLFilter filter = new ConsumerPomXMLFilterFactory( provider )
+        ConsumerPomXMLFilter filter = new ConsumerPomXMLFilterFactory( buildPomXMLFilterFactory )
         {
         }.get( Paths.get( "pom.xml" ) );
         filter.setFeature( "http://xml.org/sax/features/namespaces", true );
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 4367982..db6606c 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
@@ -18,13 +18,11 @@ package org.apache.maven.xml.sax.filter;
  * specific language governing permissions and limitations
  * under the License.
  */
-
-import static org.xmlunit.assertj.XmlAssert.*;
+import static org.xmlunit.assertj.XmlAssert.assertThat;
 
 import javax.xml.parsers.ParserConfigurationException;
 import javax.xml.transform.TransformerException;
 
-import org.apache.maven.xml.sax.filter.ReactorDependencyXMLFilter;
 import org.junit.Test;
 import org.xml.sax.SAXException;
 
@@ -34,7 +32,7 @@ public class ReactorDependencyXMLFilterTest extends AbstractXMLFilterTests
     protected ReactorDependencyXMLFilter getFilter()
         throws TransformerException, SAXException, ParserConfigurationException
     {
-        return new ReactorDependencyXMLFilter( r -> "1.0.0" );
+        return new ReactorDependencyXMLFilter( (g, a) -> "1.0.0" );
     }
 
     @Test
@@ -55,7 +53,7 @@ public class ReactorDependencyXMLFilterTest extends AbstractXMLFilterTests
     @Test
     public void testManagedDependency() throws Exception
     {
-        ReactorDependencyXMLFilter filter = new ReactorDependencyXMLFilter( r -> null );
+        ReactorDependencyXMLFilter filter = new ReactorDependencyXMLFilter( (g, a) -> null );
         
         String input = "<dependency>"
             + "<groupId>GROUPID</groupId>"