Thanks for your help, David. I got things working, but it took a fair bit of messing around. It seems that Axis really likes to be loaded by the same classloader as the code that it's working with. For example, when I used the Axis that's built into Geronimo I got
Caused by: java.lang.IllegalArgumentException: object is not an instance of declaring class at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:324) at org.apache.axis.utils.BeanPropertyDescriptor.set(BeanPropertyDescriptor.java:117) ... when Axis tried to load one of my classes (which are in the war file). This looks like a similar problem to the Xerces problem that started this thread (i.e. can't load a class using the context classloader and then cast it). So in the end I've got Axis and Castor in the war file, and context-priority-classloader=true and that works for me. I'm using Geronimo's commons-logging and commons-discovery, however. Can I ask about something? It seems from the comments on http://wiki.apache.org/geronimo/Deployment#head-754164850f38c1ecdaf6b8ed894cb192bc36c5f4-2 and the default "false" value of context-priority-classloader that Geronimo's preferred configuration is to load classes from the container-wide classloader first, then the war file classloader. In the Servlet spec it's "recommended" that classes be loaded from the war first. Is this a case where you guys think that the spec is off-base or just an oversight? It doesn't really matter since it's a recommendation rather than a requirement, but it would be cool if Geronimo's default could follow the spec's recommendation. Again, thanks for your help on this, Toby