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.
>

Reply via email to