You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@ant.apache.org by "Leigh L. Klotz, Jr (JIRA)" <ji...@apache.org> on 2011/05/26 23:12:53 UTC

[jira] [Updated] (IVY-1296) dual resolver without @name gives NPE

     [ https://issues.apache.org/jira/browse/IVY-1296?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Leigh L. Klotz, Jr updated IVY-1296:
------------------------------------

    Description: 
A <dual> with no name attribute gets an NPE in resolve.

<dual> says it uses common attributes.  If so, it really should check and complain instead of blowing up cryptically.

Here's a test-caseish description:

<ivysettings>
 <settings defaultResolver="x" />
 <resolvers>
    <chain name="vendor-1">
      <dual >
        <filesystem name="vendor1-ivy" checkmodified="true" changingPattern=".*">
          <ivy pattern="${vendor.dir}/vendor1-ivy/[organization]-ivy.xml" />
        </filesystem>
        <filesystem name="vendor1-jars" checkmodified="true" changingPattern=".*">
          <artifact pattern="${vendor.dir}/vendor1/[artifact].[ext]" />
        </filesystem>
      </dual>
    </chain>
    <chain name="x"> ... </chain>
  </resolvers>
  <modules>
    <module organisation="com.vendor1" module="*" resolver="vendor1" />
  </modules>
</ivysettings>



 vendor1's module object has a resolver with no name, and it gets an NPE trying to cache that name inside DefaultRepositoryCacheManager.saveResolvers.

main[1] where
  [1] java.util.Hashtable.put (Hashtable.java:394)
  [2] java.util.Properties.setProperty (Properties.java:143)
  [3] org.apache.ivy.core.cache.DefaultRepositoryCacheManager.saveResolvers (DefaultRepositoryCacheManager.java:423)
  [4] org.apache.ivy.core.resolve.IvyNode.loadData (IvyNode.java:176)
  [5] org.apache.ivy.core.resolve.VisitNode.loadData (VisitNode.java:287)
  [6] org.apache.ivy.core.resolve.ResolveEngine.fetchDependencies (ResolveEngine.java:696)
  [7] org.apache.ivy.core.resolve.ResolveEngine.doFetchDependencies (ResolveEngine.java:781)
  [8] org.apache.ivy.core.resolve.ResolveEngine.fetchDependencies (ResolveEngine.java:704)
  [9] org.apache.ivy.core.resolve.ResolveEngine.doFetchDependencies (ResolveEngine.java:781)
  [10] org.apache.ivy.core.resolve.ResolveEngine.fetchDependencies (ResolveEngine.java:704)
  [11] org.apache.ivy.core.resolve.ResolveEngine.getDependencies (ResolveEngine.java:576)
  [12] org.apache.ivy.core.resolve.ResolveEngine.resolve (ResolveEngine.java:237)
  [13] org.apache.ivy.core.resolve.ResolveEngine.resolve (ResolveEngine.java:195)
  [14] org.apache.ivy.Ivy.resolve (Ivy.java:502)
  [15] org.apache.ivy.ant.IvyResolve.doExecute (IvyResolve.java:244)
  [16] org.apache.ivy.ant.IvyTask.execute (IvyTask.java:277)
  [17] org.apache.tools.ant.UnknownElement.execute (UnknownElement.java:291)
  [18] sun.reflect.GeneratedMethodAccessor5.invoke (null)
  [19] sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:25)
  [20] java.lang.reflect.Method.invoke (Method.java:597)
  [21] org.apache.tools.ant.dispatch.DispatchUtils.execute (DispatchUtils.java:106)
  [22] org.apache.tools.ant.Task.perform (Task.java:348)
  [23] org.apache.tools.ant.Target.execute (Target.java:390)
  [24] org.apache.tools.ant.Target.performTasks (Target.java:411)
  [25] org.apache.tools.ant.Project.executeSortedTargets (Project.java:1,360)
  [26] org.apache.tools.ant.Project.executeTarget (Project.java:1,329)
  [27] org.apache.tools.ant.helper.DefaultExecutor.executeTargets (DefaultExecutor.java:41)
  [28] org.apache.tools.ant.Project.executeTargets (Project.java:1,212)
  [29] org.apache.tools.ant.Main.runBuild (Main.java:801)
  [30] org.apache.tools.ant.Main.startAnt (Main.java:218)
  [31] org.apache.tools.ant.launch.Launcher.run (Launcher.java:280)
  [32] org.apache.tools.ant.launch.Launcher.main (Launcher.java:109)
main[1] 

  was:
A <dual> with no name attribute gets an NPE in resolve because the
http://ant.apache.org/ivy/history/trunk/settings/resolvers.html#common says that name is required on resolvers, but it's neither checked nor enforced, and some places later blows up with an NPE.

<dual> says it uses common attributes.  If so, it really should check and complain instead of blowing up cryptically.

Alternatively, a schema for ivy-settings would help as well.  (I know it says it's free-form, but if it crashes with NPE with malformed input, it's not exactly free-form.)

Here's a test-caseish description:

<ivysettings>
 <settings defaultResolver="x" />
 <resolvers>
    <chain name="vendor-1">
      <dual >
        <filesystem name="vendor1-ivy" checkmodified="true" changingPattern=".*">
          <ivy pattern="${vendor.dir}/vendor1-ivy/[organization]-ivy.xml" />
        </filesystem>
        <filesystem name="vendor1-jars" checkmodified="true" changingPattern=".*">
          <artifact pattern="${vendor.dir}/vendor1/[artifact].[ext]" />
        </filesystem>
      </dual>
    </chain>
    <chain name="x"> ... </chain>
  </resolvers>
  <modules>
    <module organisation="com.vendor1" module="*" resolver="vendor1" />
  </modules>
</ivysettings>



 vendor1's module object has a resolver with no name, and it gets an NPE trying to cache that name inside DefaultRepositoryCacheManager.saveResolvers.

main[1] where
  [1] java.util.Hashtable.put (Hashtable.java:394)
  [2] java.util.Properties.setProperty (Properties.java:143)
  [3] org.apache.ivy.core.cache.DefaultRepositoryCacheManager.saveResolvers (DefaultRepositoryCacheManager.java:423)
  [4] org.apache.ivy.core.resolve.IvyNode.loadData (IvyNode.java:176)
  [5] org.apache.ivy.core.resolve.VisitNode.loadData (VisitNode.java:287)
  [6] org.apache.ivy.core.resolve.ResolveEngine.fetchDependencies (ResolveEngine.java:696)
  [7] org.apache.ivy.core.resolve.ResolveEngine.doFetchDependencies (ResolveEngine.java:781)
  [8] org.apache.ivy.core.resolve.ResolveEngine.fetchDependencies (ResolveEngine.java:704)
  [9] org.apache.ivy.core.resolve.ResolveEngine.doFetchDependencies (ResolveEngine.java:781)
  [10] org.apache.ivy.core.resolve.ResolveEngine.fetchDependencies (ResolveEngine.java:704)
  [11] org.apache.ivy.core.resolve.ResolveEngine.getDependencies (ResolveEngine.java:576)
  [12] org.apache.ivy.core.resolve.ResolveEngine.resolve (ResolveEngine.java:237)
  [13] org.apache.ivy.core.resolve.ResolveEngine.resolve (ResolveEngine.java:195)
  [14] org.apache.ivy.Ivy.resolve (Ivy.java:502)
  [15] org.apache.ivy.ant.IvyResolve.doExecute (IvyResolve.java:244)
  [16] org.apache.ivy.ant.IvyTask.execute (IvyTask.java:277)
  [17] org.apache.tools.ant.UnknownElement.execute (UnknownElement.java:291)
  [18] sun.reflect.GeneratedMethodAccessor5.invoke (null)
  [19] sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:25)
  [20] java.lang.reflect.Method.invoke (Method.java:597)
  [21] org.apache.tools.ant.dispatch.DispatchUtils.execute (DispatchUtils.java:106)
  [22] org.apache.tools.ant.Task.perform (Task.java:348)
  [23] org.apache.tools.ant.Target.execute (Target.java:390)
  [24] org.apache.tools.ant.Target.performTasks (Target.java:411)
  [25] org.apache.tools.ant.Project.executeSortedTargets (Project.java:1,360)
  [26] org.apache.tools.ant.Project.executeTarget (Project.java:1,329)
  [27] org.apache.tools.ant.helper.DefaultExecutor.executeTargets (DefaultExecutor.java:41)
  [28] org.apache.tools.ant.Project.executeTargets (Project.java:1,212)
  [29] org.apache.tools.ant.Main.runBuild (Main.java:801)
  [30] org.apache.tools.ant.Main.startAnt (Main.java:218)
  [31] org.apache.tools.ant.launch.Launcher.run (Launcher.java:280)
  [32] org.apache.tools.ant.launch.Launcher.main (Launcher.java:109)
main[1] 


Alternatively, a schema for ivy-settings would help as well.  (I know it says it's free-form, but if it crashes with NPE with malformed input, it's not exactly free-form.)


> dual resolver without @name gives NPE
> -------------------------------------
>
>                 Key: IVY-1296
>                 URL: https://issues.apache.org/jira/browse/IVY-1296
>             Project: Ivy
>          Issue Type: Bug
>          Components: Core
>    Affects Versions: 2.2.0
>            Reporter: Leigh L. Klotz, Jr
>            Priority: Minor
>              Labels: NPE
>
> A <dual> with no name attribute gets an NPE in resolve.
> <dual> says it uses common attributes.  If so, it really should check and complain instead of blowing up cryptically.
> Here's a test-caseish description:
> <ivysettings>
>  <settings defaultResolver="x" />
>  <resolvers>
>     <chain name="vendor-1">
>       <dual >
>         <filesystem name="vendor1-ivy" checkmodified="true" changingPattern=".*">
>           <ivy pattern="${vendor.dir}/vendor1-ivy/[organization]-ivy.xml" />
>         </filesystem>
>         <filesystem name="vendor1-jars" checkmodified="true" changingPattern=".*">
>           <artifact pattern="${vendor.dir}/vendor1/[artifact].[ext]" />
>         </filesystem>
>       </dual>
>     </chain>
>     <chain name="x"> ... </chain>
>   </resolvers>
>   <modules>
>     <module organisation="com.vendor1" module="*" resolver="vendor1" />
>   </modules>
> </ivysettings>
>  vendor1's module object has a resolver with no name, and it gets an NPE trying to cache that name inside DefaultRepositoryCacheManager.saveResolvers.
> main[1] where
>   [1] java.util.Hashtable.put (Hashtable.java:394)
>   [2] java.util.Properties.setProperty (Properties.java:143)
>   [3] org.apache.ivy.core.cache.DefaultRepositoryCacheManager.saveResolvers (DefaultRepositoryCacheManager.java:423)
>   [4] org.apache.ivy.core.resolve.IvyNode.loadData (IvyNode.java:176)
>   [5] org.apache.ivy.core.resolve.VisitNode.loadData (VisitNode.java:287)
>   [6] org.apache.ivy.core.resolve.ResolveEngine.fetchDependencies (ResolveEngine.java:696)
>   [7] org.apache.ivy.core.resolve.ResolveEngine.doFetchDependencies (ResolveEngine.java:781)
>   [8] org.apache.ivy.core.resolve.ResolveEngine.fetchDependencies (ResolveEngine.java:704)
>   [9] org.apache.ivy.core.resolve.ResolveEngine.doFetchDependencies (ResolveEngine.java:781)
>   [10] org.apache.ivy.core.resolve.ResolveEngine.fetchDependencies (ResolveEngine.java:704)
>   [11] org.apache.ivy.core.resolve.ResolveEngine.getDependencies (ResolveEngine.java:576)
>   [12] org.apache.ivy.core.resolve.ResolveEngine.resolve (ResolveEngine.java:237)
>   [13] org.apache.ivy.core.resolve.ResolveEngine.resolve (ResolveEngine.java:195)
>   [14] org.apache.ivy.Ivy.resolve (Ivy.java:502)
>   [15] org.apache.ivy.ant.IvyResolve.doExecute (IvyResolve.java:244)
>   [16] org.apache.ivy.ant.IvyTask.execute (IvyTask.java:277)
>   [17] org.apache.tools.ant.UnknownElement.execute (UnknownElement.java:291)
>   [18] sun.reflect.GeneratedMethodAccessor5.invoke (null)
>   [19] sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:25)
>   [20] java.lang.reflect.Method.invoke (Method.java:597)
>   [21] org.apache.tools.ant.dispatch.DispatchUtils.execute (DispatchUtils.java:106)
>   [22] org.apache.tools.ant.Task.perform (Task.java:348)
>   [23] org.apache.tools.ant.Target.execute (Target.java:390)
>   [24] org.apache.tools.ant.Target.performTasks (Target.java:411)
>   [25] org.apache.tools.ant.Project.executeSortedTargets (Project.java:1,360)
>   [26] org.apache.tools.ant.Project.executeTarget (Project.java:1,329)
>   [27] org.apache.tools.ant.helper.DefaultExecutor.executeTargets (DefaultExecutor.java:41)
>   [28] org.apache.tools.ant.Project.executeTargets (Project.java:1,212)
>   [29] org.apache.tools.ant.Main.runBuild (Main.java:801)
>   [30] org.apache.tools.ant.Main.startAnt (Main.java:218)
>   [31] org.apache.tools.ant.launch.Launcher.run (Launcher.java:280)
>   [32] org.apache.tools.ant.launch.Launcher.main (Launcher.java:109)
> main[1] 

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira