2012/6/3 <ma...@apache.org>: > Author: markt > Date: Sat Jun 2 21:18:53 2012 > New Revision: 1345580 > > URL: http://svn.apache.org/viewvc?rev=1345580&view=rev > Log: > Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=53333 > Validate JNDI resource types against injection target types and use target > types when no type is specified for the resource. > Based on a patch by Violeta Georgieva. > > Modified: > tomcat/trunk/java/org/apache/catalina/deploy/LocalStrings.properties > tomcat/trunk/java/org/apache/catalina/deploy/NamingResources.java >
> --- tomcat/trunk/java/org/apache/catalina/deploy/NamingResources.java > (original) > +++ tomcat/trunk/java/org/apache/catalina/deploy/NamingResources.java Sat Jun > + private Class<?> getInjectionTargetType(Context context, > + ResourceBase resource) { > + > + Class<?> result = null; > + > + for (InjectionTarget injectionTarget : > resource.getInjectionTargets()) { > + Class<?> clazz = Introspection.loadClass( > + context, injectionTarget.getTargetClass()); > + if (clazz == null) { > + // Can't load class - therefore ignore this target > + continue; > + } > + > + // Look for a match > + String targetName = injectionTarget.getTargetName(); > + // Look for a setter match first > + Class<?> targetType = getSetterType(clazz, targetName); > + if (targetType == null) { > + // Try a field match if no setter match > + targetType = getFieldType(clazz,targetName); > + } > + if (targetType == null) { > + // No match - ignore this injection target > + continue; > + } > + targetType = convertPrimitiveType(targetType); > + > + // Figure out the common type - if there is one > + if (result == null) { > + result = targetType; > + } else if (targetType.isAssignableFrom(result)) { > + // NO-OP - This will work > + } else if (result.isAssignableFrom(targetType)) { > + // Need to use more specific type > + result = targetType; > + } else { > + // Incompatible types > + return null; > + } > + } > + return result; > + } Does something guarantee that there is always common type among injection targets? Can there be two disjoint interfaces A and B, which are both implemented by a resource, so assignment to A or B should succeed, but getInjectionTargetType() will result in a failure? Best regards, Konstantin Kolinko --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org