Could it be that it is looking for Data.xml at path foo/secondModule/Data.xml. I'm guessing that this is a plain Java thing and not related to Maven.
/Anders On Mon, Jun 7, 2010 at 04:30, smallufo <[email protected]> wrote: > 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. >
