Oh yes, there is also the /lib folder in the root of the Axis2 install (rather than in the .aar).

----- Original Message ----- From: "Brennan Spies" <[EMAIL PROTECTED]>
To: <axis-user@ws.apache.org>
Sent: Thursday, October 25, 2007 11:46 PM
Subject: Re: Possible classloader issue - help needed


Well, here the exception is a bit more informative. Looking at the source, the exception is coming from this line(s) in ConfigCatalogRule.begin():

Class clazz = digester.getClassLoader().loadClass(catalogClass); //ClassNotFoundException
           catalog = (Catalog) clazz.newInstance();

And from the stack trace it is clear that it is Tomcat's webapp classloader that is failing to see the class. Not sure what to make of the [EMAIL PROTECTED] since it is probably the case that the classloader is a subclass of URLClassLoader (super.toString()..?). Try using the Class.getClassLoader.getClass().getName() instead.

1) Create a simple utility method that recurses up the classloading tree using ClassLoader.getParent()--stop when you get a null from this method. Print out the class name of each ClassLoader. 2) Also print out the class name of each ClassLoader for the classes of interest: Digester, CatalogBase (the impl version), ConfigCatalogRule, AgentPlatformServiceMessageReceiverInOut. Don't create a new instance; use a static reference to the class like 'ConfigCatalogRule.class.getClassLoader()'. To be thorough, you should check to see if this is null before doing getClass().getName().

Remember, visibility of a class only goes one direction in a classloading tree: up. It may be the case that the solution might be moving the jars in question to a URL that is loaded by a classloader further up the tree, e.g. WEB-INF/lib.

Regards,

Brennan

----- Original Message ----- From: "João Luís Pinto" <[EMAIL PROTECTED]>
To: <axis-user@ws.apache.org>
Sent: Thursday, October 25, 2007 7:09 PM
Subject: Re: Possible classloader issue - help needed


Hello,

Here are the results:

Code in the MessageReceiver:

<code>
log1.debug("Loading " + url); //$NON-NLS-1$

log1.debug("AgentPlatformServiceMessageReceiverInOut: " //$NON-NLS-1$
   + getClass().getClassLoader().toString());

log1.debug("Digester: " //$NON-NLS-1$
   + new Digester().getClass().getClassLoader().toString());

log1.debug("CatalogBase: " //$NON-NLS-1$
   + new CatalogBase().getClass()
    .getClassLoader()
    .toString());

log1.debug("MessageReceiver CL == Digester CL? " //$NON-NLS-1$
   + (getClass().getClassLoader() == new Digester().getClass()
   .getClassLoader() ? "true" : "false")); //$NON-NLS-1$//$NON-NLS-2$

configParser.parse(url);
</code>

Output:

[DEBUG] Loading
file:/Users/jpinto/Documents/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/Axis2/WEB-INF/services/AgentPlatformService/chain-config.xml
[DEBUG] AgentPlatformServiceMessageReceiverInOut: [EMAIL PROTECTED]
[DEBUG] Digester: [EMAIL PROTECTED]
[DEBUG] CatalogBase: [EMAIL PROTECTED]
[DEBUG] MessageReceiver CL == Digester CL? true

As for the trace of the VM, aparently both classes from commons-chain
and commons-digester are loaded before the exception:

(...)
[Loaded org.apache.commons.digester.RuleSetBase from
file:/Users/jpinto/Documents/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/Axis2/WEB-INF/services/AgentPlatformService/lib/commons-digester-1.8.jar]
[Loaded org.apache.commons.chain.config.ConfigRuleSet from
file:/Users/jpinto/Documents/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/Axis2/WEB-INF/services/AgentPlatformService/lib/commons-chain-1.1.jar]
[Loaded org.apache.commons.chain.config.ConfigCatalogRule from
file:/Users/jpinto/Documents/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/Axis2/WEB-INF/services/AgentPlatformService/lib/commons-chain-1.1.jar]
[Loaded org.apache.commons.chain.config.ConfigRegisterRule from
file:/Users/jpinto/Documents/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/Axis2/WEB-INF/services/AgentPlatformService/lib/commons-chain-1.1.jar]
[Loaded org.apache.commons.chain.config.ConfigDefineRule from
file:/Users/jpinto/Documents/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/Axis2/WEB-INF/services/AgentPlatformService/lib/commons-chain-1.1.jar]
[Loaded org.apache.commons.digester.RulesBase from
file:/Users/jpinto/Documents/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/Axis2/WEB-INF/services/AgentPlatformService/lib/commons-digester-1.8.jar]
[Loaded org.apache.commons.chain.CatalogFactory from
file:/Users/jpinto/Documents/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/Axis2/WEB-INF/services/AgentPlatformService/lib/commons-chain-1.1.jar]
[Loaded org.apache.commons.chain.impl.CatalogFactoryBase from
file:/Users/jpinto/Documents/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/Axis2/WEB-INF/services/AgentPlatformService/lib/commons-chain-1.1.jar]
[Loaded org.apache.log4j.spi.ThrowableInformation from
file:/Users/jpinto/Documents/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/Axis2/WEB-INF/lib/log4j-1.2.14.jar]
[Loaded org.apache.log4j.spi.VectorWriter from
file:/Users/jpinto/Documents/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/Axis2/WEB-INF/lib/log4j-1.2.14.jar]
[Loaded org.apache.log4j.spi.NullWriter from
file:/Users/jpinto/Documents/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/Axis2/WEB-INF/lib/log4j-1.2.14.jar]
[ERROR] Begin event threw exception
java.lang.ClassNotFoundException: org.apache.commons.chain.impl.CatalogBase at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1358) at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1204) at org.apache.commons.chain.config.ConfigCatalogRule.begin(ConfigCatalogRule.java:106)
at org.apache.commons.digester.Digester.startElement(Digester.java:1453)
(...)

Any idea?

Thanks,

João

On 10/25/07, Spies, Brennan <[EMAIL PROTECTED]> wrote:
Joao,

(I don't see where the Xerces jar is--it's not in your AAR. Can't be the Sun
JDK 1.5 version, because all of those are prefaced with com.sun.)

You might try:

1) Run the JRE with -verbose:class option. See if your class is actually
getting loaded.

2) Get a reference to a classloader the is in your code and compare this with the classloader for org.apache.commons.digester.Digester. See if they are the
same (using identity ==).

This might help:
http://tomcat.apache.org/tomcat-6.0-doc/class-loader-howto.html. Note that
the web application classloaders are child-first classloaders, so classes
loaded by these won't be visible to parent classloaders in the tree. Not sure
if the Axis 2.0 classloaders are the same way.

Hope this helps,

Brennan Spies
Sr. Programmer Analyst
Shared Application Services
(209) 341-6457

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to