You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@geronimo.apache.org by Łukasz Budnik <lu...@gmail.com> on 2008/03/06 09:55:00 UTC

G2.1 class loader error

Hi All!

I'm using G2.1 and I have a very weird class loader problem.

My application uses JDOM and Jaxen.
Jaxen is by default shipped with G2.1, I had only to add JDOM jar into
G2.1 repository.
I have added proper dependencies into my openejb-jar.xml.

The thing is that it looks like Geronimo loads only some (for sure not
all!) classes from JDOM jar.

For example looking at the following stacktrace (see below) I know
that following classes were

loaded:
org.jdom.xpath.XPath, org.jdom.xpath.JaxenXPath, org.jaxen.jdom.JDOMXPath, and

org.jdom.JDOMException.

But class loader did not load org/jdom/Parent class (it is listed in JDOM jar).

The stacktrace:

07:59:42,921 ERROR [JDOMXMLUtils] JDOMException exception was thrown!
org.jdom.JDOMException: java.lang.NoClassDefFoundError:
org/jdom/Parent: org/jdom/Parent
	at org.jdom.xpath.XPath.newInstance(XPath.java:139)

...

java.lang.NoClassDefFoundError: org/jdom/Parent
	at org.jaxen.jdom.JDOMXPath.<init>(JDOMXPath.java:91)
	at org.jdom.xpath.JaxenXPath.setXPath(JaxenXPath.java:281)
	at org.jdom.xpath.JaxenXPath.<init>(JaxenXPath.java:99)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at

sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
	at

sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
	at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
	at org.jdom.xpath.XPath.newInstance(XPath.java:129)

I had no idea what is going on...

It looks like classes that are explicitly defined work, classes that
are used/created by factories

don't.

any tips?

best regards
Łukasz

Re: G2.1 class loader error

Posted by Łukasz Budnik <lu...@gmail.com>.
You were right!

The <inverse-classloading/> did help, thanks!

best regards
Łukasz

On 06/03/2008, David Jencks <da...@yahoo.com> wrote:
> This kind of problem is often caused by bad classloader
>  relationships.  If jaxen is loaded in a parent classloader to your
>  app and jdom is loaded in your app's classloader then jdom will be
>  able to load jaxen classes but jaxen classes will not be able to load
>  jdom classes: it looks like this scenario is consistent with what
>  you've shown us.
>
>  If this is the problem you can fix it by adding the jaxen jar as an
>  app dependency (if its missing) and including either
>
>  <inverse-classloading/>
>
>  or
>
>  <hidden-classes>
>    <filter>org.jaxen.</filter>
>  <hidden-classes>
>
>  near the end of the environment element in your geronimo plan.
>
>  thanks
>
> david jencks
>
>
>  On Mar 6, 2008, at 12:55 AM, Łukasz Budnik wrote:
>
>  > Hi All!
>  >
>  > I'm using G2.1 and I have a very weird class loader problem.
>  >
>  > My application uses JDOM and Jaxen.
>  > Jaxen is by default shipped with G2.1, I had only to add JDOM jar into
>  > G2.1 repository.
>  > I have added proper dependencies into my openejb-jar.xml.
>  >
>  > The thing is that it looks like Geronimo loads only some (for sure not
>  > all!) classes from JDOM jar.
>  >
>  > For example looking at the following stacktrace (see below) I know
>  > that following classes were
>  >
>  > loaded:
>  > org.jdom.xpath.XPath, org.jdom.xpath.JaxenXPath,
>  > org.jaxen.jdom.JDOMXPath, and
>  >
>  > org.jdom.JDOMException.
>  >
>  > But class loader did not load org/jdom/Parent class (it is listed
>  > in JDOM jar).
>  >
>  > The stacktrace:
>  >
>  > 07:59:42,921 ERROR [JDOMXMLUtils] JDOMException exception was thrown!
>  > org.jdom.JDOMException: java.lang.NoClassDefFoundError:
>  > org/jdom/Parent: org/jdom/Parent
>  >       at org.jdom.xpath.XPath.newInstance(XPath.java:139)
>  >
>  > ...
>  >
>  > java.lang.NoClassDefFoundError: org/jdom/Parent
>  >       at org.jaxen.jdom.JDOMXPath.<init>(JDOMXPath.java:91)
>  >       at org.jdom.xpath.JaxenXPath.setXPath(JaxenXPath.java:281)
>  >       at org.jdom.xpath.JaxenXPath.<init>(JaxenXPath.java:99)
>  >       at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native
>  > Method)
>  >       at
>  >
>  > sun.reflect.NativeConstructorAccessorImpl.newInstance
>  > (NativeConstructorAccessorImpl.java:39)
>  >       at
>  >
>  > sun.reflect.DelegatingConstructorAccessorImpl.newInstance
>  > (DelegatingConstructorAccessorImpl.java:27)
>  >       at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
>  >       at org.jdom.xpath.XPath.newInstance(XPath.java:129)
>  >
>  > I had no idea what is going on...
>  >
>  > It looks like classes that are explicitly defined work, classes that
>  > are used/created by factories
>  >
>  > don't.
>  >
>  > any tips?
>  >
>  > best regards
>  > Łukasz
>
>

Re: G2.1 class loader error

Posted by David Jencks <da...@yahoo.com>.
This kind of problem is often caused by bad classloader  
relationships.  If jaxen is loaded in a parent classloader to your  
app and jdom is loaded in your app's classloader then jdom will be  
able to load jaxen classes but jaxen classes will not be able to load  
jdom classes: it looks like this scenario is consistent with what  
you've shown us.

If this is the problem you can fix it by adding the jaxen jar as an  
app dependency (if its missing) and including either

<inverse-classloading/>

or

<hidden-classes>
   <filter>org.jaxen.</filter>
<hidden-classes>

near the end of the environment element in your geronimo plan.

thanks
david jencks

On Mar 6, 2008, at 12:55 AM, Łukasz Budnik wrote:

> Hi All!
>
> I'm using G2.1 and I have a very weird class loader problem.
>
> My application uses JDOM and Jaxen.
> Jaxen is by default shipped with G2.1, I had only to add JDOM jar into
> G2.1 repository.
> I have added proper dependencies into my openejb-jar.xml.
>
> The thing is that it looks like Geronimo loads only some (for sure not
> all!) classes from JDOM jar.
>
> For example looking at the following stacktrace (see below) I know
> that following classes were
>
> loaded:
> org.jdom.xpath.XPath, org.jdom.xpath.JaxenXPath,  
> org.jaxen.jdom.JDOMXPath, and
>
> org.jdom.JDOMException.
>
> But class loader did not load org/jdom/Parent class (it is listed  
> in JDOM jar).
>
> The stacktrace:
>
> 07:59:42,921 ERROR [JDOMXMLUtils] JDOMException exception was thrown!
> org.jdom.JDOMException: java.lang.NoClassDefFoundError:
> org/jdom/Parent: org/jdom/Parent
> 	at org.jdom.xpath.XPath.newInstance(XPath.java:139)
>
> ...
>
> java.lang.NoClassDefFoundError: org/jdom/Parent
> 	at org.jaxen.jdom.JDOMXPath.<init>(JDOMXPath.java:91)
> 	at org.jdom.xpath.JaxenXPath.setXPath(JaxenXPath.java:281)
> 	at org.jdom.xpath.JaxenXPath.<init>(JaxenXPath.java:99)
> 	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native  
> Method)
> 	at
>
> sun.reflect.NativeConstructorAccessorImpl.newInstance 
> (NativeConstructorAccessorImpl.java:39)
> 	at
>
> sun.reflect.DelegatingConstructorAccessorImpl.newInstance 
> (DelegatingConstructorAccessorImpl.java:27)
> 	at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
> 	at org.jdom.xpath.XPath.newInstance(XPath.java:129)
>
> I had no idea what is going on...
>
> It looks like classes that are explicitly defined work, classes that
> are used/created by factories
>
> don't.
>
> any tips?
>
> best regards
> Łukasz