I have a maven mantained project with some modules . One module contains one
XML file and one parsing class :Parser.java.
Second module depends on the first module. There is a class that extends the
parsing class in the first module , but maven seems cannot test the class in
the second module. Maven test reports :
java.lang.NullPointerException
at java.util.Properties.loadFromXML(Properties.java:851)
at foo.firstModule.Parser.<init>(Parser.java:92)
at foo.secondModule.Program.<init>(Program.java:84)
In "Parser.java" (in the first module) , it uses Properties and InputStream
to read/parse an XML file :
InputStream xmlStream = getClass().getResourceAsStream("Data.xml");
Properties properties = new Properties();
properties.loadFromXML(xmlStream);
The "data.xml" is located in first module's resources/foo/firstModule
directory , and it tests OK in the first module.
Here is my full code :
This is Parser in the first module :
package foo.firstModule;
import java.io.IOException;
import java.io.InputStream;
import java.util.InvalidPropertiesFormatException;
import java.util.Properties;
public class Parser
{
private Properties properties;
public Parser()
{
InputStream xmlStream = getClass().getResourceAsStream("Data.xml");
properties = new Properties();
try
{
properties.loadFromXML(xmlStream);
}
catch (InvalidPropertiesFormatException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
}
public Properties getProperties()
{
return properties;
}
}
This is Parser's test case , passed .
package foo.firstModule;
import junit.framework.TestCase;
public class ParserTest extends TestCase
{
public void testParser()
{
Parser p = new Parser();
assertEquals(64 , p.getProperties().size());
}
}
This is ParserExtend in the secondModule , which extends Parser in the
firstModule :
package foo.secondModule;
import java.util.Properties;
import foo.firstModule.Parser;
public class ParserExtend extends Parser
{
private Properties properties;
public ParserExtend()
{
this.properties = getProperties();
}
public int getSize()
{
return properties.size();
}
}
This is ParserExtend's test case :
package foo.secondModule;
import junit.framework.TestCase;
public class ParserExtendTest extends TestCase
{
public void testParserExtend()
{
ParserExtend pe = new ParserExtend();
assertEquals(64 , pe.getSize());
}
}
The above test case failed because
*Properties.loadFromXML*(Properties.java:851)
throws NPE
However , if I don't extend Parser , just new the Parser :
package foo.secondModule;
import java.util.Properties;
import foo.firstModule.Parser;
public class ParserInit
{
private Properties properties;
public ParserInit()
{
Parser p = new Parser();
this.properties = p.getProperties();
}
public int getSize()
{
return properties.size();
}
}
and this is the test case :
package foo.secondModule;
import junit.framework.TestCase;
public class ParserInitTest extends TestCase
{
public void testParserInit()
{
ParserInit pi = new ParserInit();
assertEquals(64 , pi.getSize());
}
}
The test case passes !
This is my whole test scenario. It seems it 's maven and junit's classloader
problem.
Anybody able to find how to pass the ParserExtend's test case ? Thanks in
advanced.