2 Replies Latest reply on Jun 13, 2007 10:57 AM by peterj

    Baffling NoClassDefFoundError Error

      Hello,

      I'm writing a Seam application using JBoss 4.0.5.GA and Seam 1.2.

      I've hit a wall with a problem loading Apache POI. I've configured my build so that the POI.jar is copied into my app's WAR/lib directory and confirmed that its copied there.

      When I run my webapp and get to the part that accesses the POI classes I get something like this in my JBoss console:

      Caused by: java.lang.NoClassDefFoundError: org/apache/poi/poifs/filesystem/POIFSFileSystem
       at com.paragon.pgv.PhoneListBean.readPhoneFile(PhoneListBean.java:81)
       at com.paragon.pgv.PhoneListBean.init(PhoneListBean.java:112)
       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
       at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
       at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
       at java.lang.reflect.Method.invoke(Unknown Source)
       at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:112)
       at org.jboss.ejb3.interceptor.InvocationContextImpl.proceed(InvocationContextImpl.java:166)
       ... 120 more
      


      I've also tried putting the POI.jar into the root project EAR directory but that didn't help.

      To ensure that POI.jar wasn't bad or incomplete I wrote a simple command-line app to exercise the same code my webapp would call using POI, and that worked fine, so I'm not inclined to suspect the jar.

      On startup JBoss didn't seam to report anything out of the ordinary or alarming (no partial EAR loads, dependency complaints, exceptions, etc.)

      The other weird thing is that I've added a couple of other unrelated JARs to my application for other purposes (into WAR/lib) with no issues.

      Any ideas?

      Thanks,
      Greg

        • 1. Re: Baffling NoClassDefFoundError Error

          Ahh!

          Found the solution indirectly on another post. Here it is for future readers with the same problem:

          You need to add a tag in your application.xml referencing the jar. This jar needs to be in your ear directory not WAR/lib.

          I'm still baffled why this jar needs the special treatment and certain other jars can just be dropped into WAR/lib without issue. Not one to question the wisdom of sages or what works--I just did it, but I am curious what constitutes the difference between some jars and others.

          Greg

          • 2. Re: Baffling NoClassDefFoundError Error
            peterj

            Classes inside a WAR file are visible only to other classes located inside the WAR file. Apparently the class in question was being accessed by a class outside the WAR file. Moving such a class into the EAR file makes it visible.

            The gory details can be found at http://docs.jboss.com/jbossas/guides/j2eeguide/r2/en/html_single/#d0e309. (Good luck understanding it, I have read it multiple times and still don't understand some of it...)