You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@maven.apache.org by "Laird Nelson (JIRA)" <ji...@apache.org> on 2017/03/17 18:18:41 UTC
[jira] [Updated] (MRESOLVER-19) DefaultRepositorySystem
resolveDependencies() line 370 can yield a NullPointerException
[ https://issues.apache.org/jira/browse/MRESOLVER-19?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Laird Nelson updated MRESOLVER-19:
----------------------------------
Description:
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 340 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.
was:
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.
> 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 340 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)