Laird Nelson created MRESOLVER-19:
-------------------------------------

             Summary: DefaultRepositorySystem resolveDependencies() line 370 
can yield a NullPointerException
                 Key: MRESOLVER-19
                 URL: https://issues.apache.org/jira/browse/MRESOLVER-19
             Project: Maven Resolver
          Issue Type: Bug
          Components: resolver
    Affects Versions: Maven Artifact Resolver 1.0.3
            Reporter: Laird Nelson


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

Starting from line 366:
{code}
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();
{code}

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

{code}
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);
{code}

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

{code}
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() );
}
{code}

Note in particular this line: 
{code}
result.setRoot( collectResult.getRoot() );
{code}

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



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

Reply via email to