[picocontainer-scm] [jira] Created: (PICO-372) Can't use SetterInjection with Log4JComponentMonitor

"Ronald Blaschke (JIRA)" <jira-yCVjj/[email protected]> Tue, 29 Jun 2010 12:25:32 -0500 (CDT)
Newsgroups gmane.comp.java.picocontainer.cvs
Message-ID <27854371.1157.1277832332481.JavaMail.haus-jira@codehaus01.managed.contegix.com>
Can't use SetterInjection with Log4JComponentMonitor
----------------------------------------------------

                 Key: PICO-372
                 URL: http://jira.codehaus.org/browse/PICO-372
             Project: PicoContainer
          Issue Type: Bug
          Components: PicoContainer (Java), PicoContainer Gems
    Affects Versions: 2.10
         Environment: PicoContainer 2.10.2.
            Reporter: Ronald Blaschke
         Attachments: SetterInjector_nonnull_args.diff

Using SetterInjection with a Log4JComponentMonitor yields the following exception.

{noformat}
java.lang.NullPointerException
  at org.picocontainer.monitors.ComponentMonitorHelper.parmsToString(ComponentMonitorHelper.java:43)
  at org.picocontainer.gems.monitors.Log4JComponentMonitor.instantiated(Log4JComponentMonitor.java:158)
  at org.picocontainer.injectors.IterativeInjector.makeInstance(IterativeInjector.java:205)
  at org.picocontainer.injectors.IterativeInjector.access$100(IterativeInjector.java:35)
  at org.picocontainer.injectors.IterativeInjector$2.run(IterativeInjector.java:144)
  at org.picocontainer.injectors.AbstractInjector$ThreadLocalCyclicDependencyGuard.observe(AbstractInjector.java:274)
  at org.picocontainer.injectors.IterativeInjector.getComponentInstance(IterativeInjector.java:150)
  at org.picocontainer.DefaultPicoContainer.getInstance(DefaultPicoContainer.java:689)
  at org.picocontainer.DefaultPicoContainer.getComponent(DefaultPicoContainer.java:638)
  at org.picocontainer.DefaultPicoContainer.getComponent(DefaultPicoContainer.java:663)
  ...
{noformat}

That's because IterativeInjector passes null for the argument array, which Log4JComponentMonitor doesn't handle.

{code}
componentMonitor.instantiated(container,
                              IterativeInjector.this,
                              constructorToUse,
                              componentInstance,
                              null,
                              System.currentTimeMillis() - startTime);
{code}

I think IterativeInjector should pass an empty array, and Log4JComponentAdapter might handle null just in case.  Attached tests cover both places.

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://jira.codehaus.org/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

<hr/>
<p>
To unsubscribe from this list please visit:
</p>
<p>
    <a href="http://xircles.codehaus.org/manage_email">http://xircles.codehaus.org/manage_email</a>