logo       

Re: NullPointerException when invoking JUnit using Groovy Ant under Tomcat: msg#00158

lang.groovy.user

Subject: Re: NullPointerException when invoking JUnit using Groovy Ant under Tomcat


I entered an issue with the Ant project - #31927.

http://issues.apache.org/bugzilla/show_bug.cgi?id=31927

John Lewis 063hhyk02-at-sneakemail.com |groovy| wrote:


Other than the NullPointerException, the problem exhibits itself whenever you see:

Tests run: 1, Failures: 0, Errors: 1, Time elapsed: 0 secnull


Note the "secnull" at the end. This indicates that you have somehow removed "line.separator" from the system properties before using the Ant classes.

The Ant method that handles the system properties is org.apache.tools.ant.types.CommandlineJava.setSystem(). It does not transfer the system property defaults. This was a change made between Ant 1.4 and Ant 1.5 (2/15/2002).

John



Trevor Butler Trevor.Butler-at-sas.com |groovy| wrote:

Just wanted to let the Groovy User community know that my colleague, John Lewis, solved this problem.
The issue was not Groovy, but rather the way I was setting system properties to pass into Junit. Here was the method I was using to set system properties - I got the idea from Googling around online:
static public void setSysProperties(String key1, String val1, String key2, String val2, String key3, String val3 )
{
// Read current properties from the System environment
Properties p = System.getProperties();
p.setProperty(key1, val1);
p.setProperty(key2, val2);
p.setProperty(key3, val3);
// set the system properties
System.setProperties(p);
}

John changed the line:

Properties p = new Properties(System.getProperties())

To:

Properties p = System.getProperties()

The Properies constructor that was used takes a properties object as a parameter. That parameter sets the defaults but does not actually add those as properties. Later, Ant code (not Groovy) enumerates over the system properties and adds more properties similar to what I was trying to do. Because all of the "old" system properties are just defaults, they do not show up in the enumeration. So, they are not passed on.

I guess this could be viewed as an Ant deficiency that was made visible by what I was doing using the Properties constructor.
Here is the Ant code:

sys = System.getProperties();
Properties p = new Properties();
for (Enumeration e = sys.keys(); e.hasMoreElements();) {
Object o = e.nextElement();
p.put(o, sys.get(o));
}

They should enumerate with sys.propertyNames() instead. They would get the defaults if they did that.

Regards,
Trevor Butler


-----Original Message-----
From: Trevor Butler [mailto:Trevor.Butler-LVvIjLR0h5w@xxxxxxxxxxxxxxxx] Sent: Friday, October 22, 2004 4:39 PM
To: user-i9PBDF1N6cxnkHa44VUL00B+6BGkLq7r@xxxxxxxxxxxxxxxx
Subject: [groovy-user] NullPointerException when invoking JUnit using Groovy Ant under Tomcat


The subject line is a mouthful! Here is what I am doing:

I needed a means to invoke JUnit within a web container within the same jvm, so that I can pass system properties to the Junit test. Someone in my department suggested using Groovy's Ant integration to invoke JUnit, which I have done. When groovy invokes Junit, I get a nasty Exception. Here is a snippet of the Tomcat console:
[junit] Running com.mycompany.MyTest
[junit] Tests run: 1, Failures: 0, Errors: 1, Time elapsed: 0 secnull java.lang.NullPointerException
at java.io.Writer.write(Writer.java:126)
at org.apache.tools.ant.util.DOMElementWriter.write(DOMElementWriter.java:113)
at org.apache.tools.ant.taskdefs.optional.junit.XMLJUnitResultFormatter.endTestSuite(XMLJUnitResultFormatter.java:135)
at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.fireEndTestSuite(JUnitTestRunner.java:440)
at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.run(JUnitTestRunner.java:313)
at org.apache.tools.ant.taskdefs.optional.junit.JUnitTask.executeInVM(JUnitTask.java:954)
at org.apache.tools.ant.taskdefs.optional.junit.JUnitTask.execute(JUnitTask.java:626)
at org.apache.tools.ant.taskdefs.optional.junit.JUnitTask.execute(JUnitTask.java:600)
at org.apache.tools.ant.Task.perform(Task.java:364)
at groovy.util.AntBuilder.nodeCompleted(AntBuilder.java:115)
at groovy.util.BuilderSupport.doInvokeMethod(BuilderSupport.java:160)
at groovy.util.BuilderSupport.invokeMethod(BuilderSupport.java:85)
at org.codehaus.groovy.runtime.Invoker.invokeMethod(Invoker.java:130)
at org.codehaus.groovy.runtime.InvokerHelper.invokeMethod(InvokerHelper.java:106)
at com.sas.junit.JUnitInvoker.runJUnit(C:\JUnitInvoker.groovy:29)
at gjdk.com.sas.junit.JUnitInvoker_GroovyReflector.invoke(JUnitInvoker_GroovyReflector.java)
at groovy.lang.MetaMethod.invoke(MetaMethod.java:110)
at groovy.lang.MetaClass.doMethodInvoke(MetaClass.java:1398)
at groovy.lang.MetaClass.invokeMethod(MetaClass.java:319)
at gjdk.groovy.lang.MetaClass_GroovyReflector.invoke(MetaClass_GroovyReflector.java)
at groovy.lang.MetaMethod.invoke(MetaMethod.java:110)
at groovy.lang.MetaClass.doMethodInvoke(MetaClass.java:1398)
at groovy.lang.MetaClass.invokeMethod(MetaClass.java:319)
at org.codehaus.groovy.runtime.Invoker.invokeMethod(Invoker.java:143)
at org.codehaus.groovy.runtime.InvokerHelper.invokeMethod(InvokerHelper.java:106)
at com.mycompany.junit.JUnitInvoker.invokeMethod(C:\JUnitInvoker.groovy)
at com.mycompany.junit.caller.InvokerCaller.callJUnitInvoker(Unknown Source)
at com.mycompany.testserver.handler.EmpirixHandler.handleRequest(EmpirixHandler.java:150)
at com.mycompany.testserver.RemoteControlTestService.handleRequest(RemoteControlTestService.java:201)
at com.mycompany.testserver.RemoteControlTestService.doPost(RemoteControlTestService.java:62)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:198)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:152)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929)
at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705)
at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)
at java.lang.Thread.run(Thread.java:534)


From the following post, it appears that the problem is caused by the Junit testcase name being null:

http://www.diasparsoftware.com/weblog/archives/00000004.html

Well, I think the name is being passed in by groovy (or Ant), when it creates the Junit testcase (using the TestCase constructor).
Does anyone know if this is a Groovy bug, or if perhaps it can be fixed by configuration changes, etc? I have been trying to figure it out for over two days.

Thanks,
Trevor








<Prev in Thread] Current Thread [Next in Thread>
Google Custom Search

News | FAQ | advertise