Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

ClassNotFoundException: org.dom4j.DocumentException

I am trying to debug (F11 on Eclipse) a java GUI application I inherited but while the application runs fine (minus a tiny fix I need to apply) outside of the Eclipse IDE, it produces the following exception when launched from Eclipse (either F11 or Ctrl+F11):

Exception in thread "AWT-EventQueue-0" java.lang.NoClassDefFoundError: org/dom4j/DocumentException
    at com.example.myapp.LoginWindow.buildHibernateConfig(LoginWindow.java:178)
    at com.example.myapp.LoginWindow.actionPerformed(LoginWindow.java:141)
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
    at javax.swing.AbstractButton.doClick(AbstractButton.java:357)
    at javax.swing.plaf.basic.BasicRootPaneUI$Actions.actionPerformed(BasicRootPaneUI.java:191)
    at javax.swing.SwingUtilities.notifyAction(SwingUtilities.java:1639)
    at javax.swing.JComponent.processKeyBinding(JComponent.java:2859)
    at javax.swing.KeyboardManager.fireBinding(KeyboardManager.java:267)
    at javax.swing.KeyboardManager.fireKeyboardAction(KeyboardManager.java:216)
    at javax.swing.JComponent.processKeyBindingsForAllComponents(JComponent.java:2936)
    at javax.swing.JComponent.processKeyBindings(JComponent.java:2928)
    at javax.swing.JComponent.processKeyEvent(JComponent.java:2822)
    at java.awt.Component.processEvent(Component.java:6074)
    at java.awt.Container.processEvent(Container.java:2039)
    at java.awt.Component.dispatchEventImpl(Component.java:4660)
    at java.awt.Container.dispatchEventImpl(Container.java:2097)
    at java.awt.Component.dispatchEvent(Component.java:4488)
    at java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1856)
    at java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(DefaultKeyboardFocusManager.java:722)
    at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(DefaultKeyboardFocusManager.java:1000)
    at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:865)
    at java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:686)
    at java.awt.Component.dispatchEventImpl(Component.java:4532)
    at java.awt.Container.dispatchEventImpl(Container.java:2097)
    at java.awt.Window.dispatchEventImpl(Window.java:2489)
    at java.awt.Component.dispatchEvent(Component.java:4488)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:668)
    at java.awt.EventQueue.access$400(EventQueue.java:81)
    at java.awt.EventQueue$2.run(EventQueue.java:627)
    at java.awt.EventQueue$2.run(EventQueue.java:625)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
    at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:98)
    at java.awt.EventQueue$3.run(EventQueue.java:641)
    at java.awt.EventQueue$3.run(EventQueue.java:639)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:638)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
Caused by: java.lang.ClassNotFoundException: org.dom4j.DocumentException
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
    ... 47 more

My initial search on this found that the dom4j library may be missing but adding it to the pom.xml:

    <dependency>
        <groupId>net.sourceforge.saxon</groupId>
        <artifactId>saxon</artifactId>
        <version>9.1.0.8</version>
    </dependency>        
   <dependency>
        <groupId>dom4j</groupId>
        <artifactId>dom4j</artifactId>
        <version>1.6.1</version>
    </dependency>
    </dependencies>

Did not solve the problem.

Any idea why I am getting this exception (only when launching from Eclipse) and how to solve this problem?

BTW, the saxson dependency was added only because trying to use the latest dom4j resulted in unresolved dependencies when building. But since I downgraded to dom4j 1.6.1 I could eliminate the saxon dependency so the pom.xml file only contains now:

   <dependency>
        <groupId>dom4j</groupId>
        <artifactId>dom4j</artifactId>
        <version>1.6.1</version>
    </dependency>
    </dependencies>
like image 610
Withheld Avatar asked Oct 22 '22 15:10

Withheld


2 Answers

Bro,you need to import all jar files to run your program.These are mandatory for running your project

Poi-3.10-Final.jar

Poi-ooxml-3.10-Final.jar

Poi-ooxml-schemas-3.10.jar

Xmlbeans-2.30.jar

like image 118
venkyreddy Avatar answered Oct 27 '22 09:10

venkyreddy


I would go to the Eclipse "debug" view and get the actual command that Eclipse is using to run your program. You should suspend the program as soon as it starts, then right click on the SECOND line in the "debug" view, then choose properties. You will see a window called "process properties" from which can copy the command generated by Eclipse to run your program. You can paste the command into a terminal and then see how Java resolves the classpath. See which jars are actually loaded by adding the -verbose parameter.

EDIT - Just to make it clear, when I say "debug view" I mean

"Main Menu"->"Window"->"Show View"->"Debug"
like image 35
DAB Avatar answered Oct 27 '22 09:10

DAB