In the binary packages of tomcat 6 the class org.apache.AnnotationProcessor exists twice. Once in the catalina.jar and once in the jasper.jar. Normally this isn't a problem because both contain the same code and there is normally only one classpath (one patches the other). But in special environments this causes problems. In fact it isn't possible to use tomcat 6 in an OSGi environment where catalina and jasper are in different bundles with different classpaths because org.apache.catalina.util.DefaultAnnotationProcessor implements org.apache.AnnotationProcessor from the catalina bundle and jasper wants to cast it to org.apache.AnnotationProcessor from the jasper bundle which is in another classpath. That causes a ClassCastException.
I have fixed this in trunk (so it will be in Tomcat 7 onwards) but will not be proposing this for porting to 6.0.x since it is too likely to break things for existing users.