|
1 | 1 | /*
|
2 |
| - * Copyright 2002-2020 the original author or authors. |
| 2 | + * Copyright 2002-2022 the original author or authors. |
3 | 3 | *
|
4 | 4 | * Licensed under the Apache License, Version 2.0 (the "License");
|
5 | 5 | * you may not use this file except in compliance with the License.
|
|
22 | 22 | import java.beans.PropertyDescriptor;
|
23 | 23 | import java.lang.reflect.Method;
|
24 | 24 | import java.lang.reflect.Modifier;
|
| 25 | +import java.security.ProtectionDomain; |
25 | 26 | import java.util.Collections;
|
26 | 27 | import java.util.HashSet;
|
27 | 28 | import java.util.LinkedHashMap;
|
@@ -286,9 +287,13 @@ private CachedIntrospectionResults(Class<?> beanClass) throws BeansException {
|
286 | 287 | // This call is slow so we do it once.
|
287 | 288 | PropertyDescriptor[] pds = this.beanInfo.getPropertyDescriptors();
|
288 | 289 | for (PropertyDescriptor pd : pds) {
|
289 |
| - if (Class.class == beanClass && |
290 |
| - ("classLoader".equals(pd.getName()) || "protectionDomain".equals(pd.getName()))) { |
291 |
| - // Ignore Class.getClassLoader() and getProtectionDomain() methods - nobody needs to bind to those |
| 290 | + if (Class.class == beanClass && (!"name".equals(pd.getName()) && !pd.getName().endsWith("Name"))) { |
| 291 | + // Only allow all name variants of Class properties |
| 292 | + continue; |
| 293 | + } |
| 294 | + if (pd.getPropertyType() != null && (ClassLoader.class.isAssignableFrom(pd.getPropertyType()) |
| 295 | + || ProtectionDomain.class.isAssignableFrom(pd.getPropertyType()))) { |
| 296 | + // Ignore ClassLoader and ProtectionDomain types - nobody needs to bind to those |
292 | 297 | continue;
|
293 | 298 | }
|
294 | 299 | if (logger.isTraceEnabled()) {
|
@@ -337,6 +342,11 @@ private void introspectInterfaces(Class<?> beanClass, Class<?> currClass, Set<St
|
337 | 342 | // GenericTypeAwarePropertyDescriptor leniently resolves a set* write method
|
338 | 343 | // against a declared read method, so we prefer read method descriptors here.
|
339 | 344 | pd = buildGenericTypeAwarePropertyDescriptor(beanClass, pd);
|
| 345 | + if (pd.getPropertyType() != null && (ClassLoader.class.isAssignableFrom(pd.getPropertyType()) |
| 346 | + || ProtectionDomain.class.isAssignableFrom(pd.getPropertyType()))) { |
| 347 | + // Ignore ClassLoader and ProtectionDomain types - nobody needs to bind to those |
| 348 | + continue; |
| 349 | + } |
340 | 350 | this.propertyDescriptors.put(pd.getName(), pd);
|
341 | 351 | Method readMethod = pd.getReadMethod();
|
342 | 352 | if (readMethod != null) {
|
|
0 commit comments