Uploaded image for project: 'Maven Resolver'
  1. Maven Resolver
  2. MRESOLVER-19

DefaultRepositorySystem resolveDependencies() can yield a NullPointerException

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • Maven Artifact Resolver 1.0.3
    • Resolver
    • None

    Description

      If a transfer of an artifact fails, then a NullPointerException is thrown.

      Starting from line 366:

      ArtifactRequestBuilder builder = new ArtifactRequestBuilder( trace );
      DependencyFilter filter = request.getFilter();
      DependencyVisitor visitor = ( filter != null ) ? new FilteringDependencyVisitor( builder, filter ) : builder;
      visitor = new TreeDependencyVisitor( visitor );
      result.getRoot().accept( visitor ); // <-- if getRoot() is null: kaboom!
      List<ArtifactRequest> requests = builder.getRequests();
      

      This is the relevant section of my code that causes the error:

      final CollectRequest collectRequest = new CollectRequest();
      collectRequest.setRoot(new Dependency(artifact, JavaScopes.COMPILE));
      collectRequest.setRepositories(Collections.singletonList(mavenCentral));
      
      final DependencyRequest dependencyRequest = new DependencyRequest(collectRequest, classpathFilter);
      final DependencyResult dependencyResult = repositorySystem.resolveDependencies(repositorySystemSession, dependencyRequest);
      

      From looking inside DefaultRepositorySystem.java, it looks like the collection result never gets its root set. At line 340 and following you see this:

      if ( request.getRoot() != null )
      {
          result.setRoot( request.getRoot() );
      }
      else if ( request.getCollectRequest() != null )
      {
          CollectResult collectResult;
          try
          {
              request.getCollectRequest().setTrace( trace );
              collectResult = dependencyCollector.collectDependencies( session, request.getCollectRequest() );
          }
          catch ( DependencyCollectionException e )
          {
              dce = e;
              collectResult = e.getResult();
          }
          result.setRoot( collectResult.getRoot() );
          result.setCycles( collectResult.getCycles() );
          result.setCollectExceptions( collectResult.getExceptions() );
      }
      

      Note in particular this line:

      result.setRoot( collectResult.getRoot() );
      

      Unless I'm missing something there's no guarantee that collectResult.getRoot() will be non-null if the collection request failed.

      Attachments

        Activity

          People

            schulte77 Christian Schulte
            ljnelson Laird Nelson
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: