0

for some reason im having difficulty reading an xml file in my java code. the below methods are trying to set and return a root element using jdom libraries. though when i run a junit test and expect the code to print the root, it gives me instead a nullpointer exception caused by Wurzel = document.getRootElement();. id really appreciate some help here. btw the path is correct, the file has no weird structure and contains no errors. so no problems there. I read some other threads here about junit testing and nullpointerexception. was not much of a help..thx in advance

public void SetWurzel() {
        builder = new SAXBuilder();
        xmlFile = new File(Pfad);
        try {
            document = (Document) builder.build(xmlFile);
        } 
         catch (IOException e) {
              JOptionPane
                .showMessageDialog(
                        null,
                        "Bitte prüfen Sie die Zugriffsrechte auf Ihre Datei und geben "
                        + "Sie diese gegebenenfalls frei. ");
        } catch (JDOMException e) {
            JOptionPane
            .showMessageDialog(
                    null,
                    "Bitte Prüfen Sie die Struktur der einzulesenden XMLDatei auf Fehlern"
                    + " und fehlende Elemente.");
        }
            Wurzel = document.getRootElement();
    }

    public Element GetWurzel() {
        return Wurzel;
    }

and here is the junit test im running on it.

@Before
    public void testSetPfad() {
        this.input = new XML_Input();
    }
@Test
    public void testsetWurzel() {
        input.setPfad("C:\\Users\\me\\workspace\\Workspace_uni\\Tests\\test1.xml");

        input.SetWurzel();
        System.out.println(input.GetWurzel().getText());

    }

After making the changes earcam had suggested, i got the following exception stack trace:

java.io.FileNotFoundException: 

C:\Users\arm\workspace\Workspace_uni\Tests\test1.xml (Das System kann den angegebenen Pfad nicht finden)
    at java.io.FileInputStream.open(Native Method)
    at java.io.FileInputStream.<init>(FileInputStream.java:146)
    at java.io.FileInputStream.<init>(FileInputStream.java:101)
    at sun.net.www.protocol.file.FileURLConnection.connect(FileURLConnection.java:90)
    at sun.net.www.protocol.file.FileURLConnection.getInputStream(FileURLConnection.java:188)
    at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.setupCurrentEntity(XMLEntityManager.java:619)
    at com.sun.org.apache.xerces.internal.impl.XMLVersionDetector.determineDocVersion(XMLVersionDetector.java:189)
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:812)
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:777)
    at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141)
    at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1213)
    at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:648)
    at org.jdom2.input.sax.SAXBuilderEngine.build(SAXBuilderEngine.java:217)
    at org.jdom2.input.sax.SAXBuilderEngine.build(SAXBuilderEngine.java:277)
    at org.jdom2.input.sax.SAXBuilderEngine.build(SAXBuilderEngine.java:264)
    at org.jdom2.input.SAXBuilder.build(SAXBuilder.java:1116)
    at File_Processing_Component.XML_Input.SetWurzel(XML_Input.java:68)
    at File_Processing_Component.XML_InputTest.testSetWurzelThrowFileNotFoundExceptionException(XML_InputTest.java:31)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
    at org.junit.internal.runners.statements.ExpectException.evaluate(ExpectException.java:19)
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)
melar
  • 202
  • 2
  • 15

1 Answers1

1

Move Wurzel = document.getRootElement(); inside the try block directly underneath where you assign document. Suspect the document is null and for some reason you don't see the caught exceptions.

It might be worth simply printing out the stacktraces with e.printStackTrace() instead of/as well as the JOptionPane

And try paths:

    "/C:/Users/me/workspace/Workspace_uni/Tests/test1.xml"
    "file:///C:/Users/me/workspace/Workspace_uni/Tests/test1.xml"
earcam
  • 6,662
  • 4
  • 37
  • 57