javax/xml/transform/FactoryFinder.java has the following part in the newInstance method:
// Fall back to current classloader
cl = FactoryFinder.class.getClassLoader();
providerClass = cl.loadClass(className);
This code is used when the context class loader of the current thread fails to load the class.
When a class loader like the one in Tomcat is used (where they don't always delegate to the parent class loader),
this code is executed in the hope that this classloader can find the class.
Alas, when JAXP is in Tiger's rt.jar, FactoryFinder.class.getClassLoaer() returns null, so we'll get NPE.
The above code needs to be changed to:
// Fall back to current classloader
cl = FactoryFinder.class.getClassLoader();
providerClass = Class.forName(className,true,cl);
See Class.forName javadoc for why this works correctly when cl==null and cl!=null.
I haven't checked, but I suspect this problem to apply to other FactoryFinders.