Sometimes in production environments I face problems never encountered during development… It’s a general thing.. could happen with jdbc drivers or xml parsers.
I just feel classes are loaded from a different jar than expected.
This of course could happen if you’re deploying to a very different application server or if you’ve no control over the production server classpath.
I found in javaalmanac.com a code snippet that can help you identify which is the jar containing a specific Class at runtime:
Class cls = MyFoo.class;
ProtectionDomain pDomain = cls.getProtectionDomain();
CodeSource cSource = pDomain.getCodeSource();
URL loc = cSource.getLocation();
System.out.println(loc);
// prints something like "c:/jars/MyFoo.jar"
This way you can check if your class is loaded right from the expected jar, not elsewhere :-).
This has shown to be really useful during my sad production debug sessions.
Hope it can help you as well.