2012/6/3 <[email protected]>:
> 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: [email protected]
For additional commands, e-mail: [email protected]