|
|
|
|
@ -1,5 +1,5 @@
@@ -1,5 +1,5 @@
|
|
|
|
|
/* |
|
|
|
|
* Copyright 2002-2020 the original author or authors. |
|
|
|
|
* Copyright 2002-2022 the original author or authors. |
|
|
|
|
* |
|
|
|
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
|
|
|
|
* you may not use this file except in compliance with the License. |
|
|
|
|
@ -22,6 +22,7 @@ import java.beans.Introspector;
@@ -22,6 +22,7 @@ import java.beans.Introspector;
|
|
|
|
|
import java.beans.PropertyDescriptor; |
|
|
|
|
import java.lang.reflect.Method; |
|
|
|
|
import java.lang.reflect.Modifier; |
|
|
|
|
import java.security.ProtectionDomain; |
|
|
|
|
import java.util.Collections; |
|
|
|
|
import java.util.HashSet; |
|
|
|
|
import java.util.LinkedHashMap; |
|
|
|
|
@ -286,9 +287,13 @@ public final class CachedIntrospectionResults {
@@ -286,9 +287,13 @@ public final class CachedIntrospectionResults {
|
|
|
|
|
// This call is slow so we do it once.
|
|
|
|
|
PropertyDescriptor[] pds = this.beanInfo.getPropertyDescriptors(); |
|
|
|
|
for (PropertyDescriptor pd : pds) { |
|
|
|
|
if (Class.class == beanClass && |
|
|
|
|
("classLoader".equals(pd.getName()) || "protectionDomain".equals(pd.getName()))) { |
|
|
|
|
// Ignore Class.getClassLoader() and getProtectionDomain() methods - nobody needs to bind to those
|
|
|
|
|
if (Class.class == beanClass && (!"name".equals(pd.getName()) && !pd.getName().endsWith("Name"))) { |
|
|
|
|
// Only allow all name variants of Class properties
|
|
|
|
|
continue; |
|
|
|
|
} |
|
|
|
|
if (pd.getPropertyType() != null && (ClassLoader.class.isAssignableFrom(pd.getPropertyType()) |
|
|
|
|
|| ProtectionDomain.class.isAssignableFrom(pd.getPropertyType()))) { |
|
|
|
|
// Ignore ClassLoader and ProtectionDomain types - nobody needs to bind to those
|
|
|
|
|
continue; |
|
|
|
|
} |
|
|
|
|
if (logger.isTraceEnabled()) { |
|
|
|
|
@ -337,6 +342,11 @@ public final class CachedIntrospectionResults {
@@ -337,6 +342,11 @@ public final class CachedIntrospectionResults {
|
|
|
|
|
// GenericTypeAwarePropertyDescriptor leniently resolves a set* write method
|
|
|
|
|
// against a declared read method, so we prefer read method descriptors here.
|
|
|
|
|
pd = buildGenericTypeAwarePropertyDescriptor(beanClass, pd); |
|
|
|
|
if (pd.getPropertyType() != null && (ClassLoader.class.isAssignableFrom(pd.getPropertyType()) |
|
|
|
|
|| ProtectionDomain.class.isAssignableFrom(pd.getPropertyType()))) { |
|
|
|
|
// Ignore ClassLoader and ProtectionDomain types - nobody needs to bind to those
|
|
|
|
|
continue; |
|
|
|
|
} |
|
|
|
|
this.propertyDescriptors.put(pd.getName(), pd); |
|
|
|
|
Method readMethod = pd.getReadMethod(); |
|
|
|
|
if (readMethod != null) { |
|
|
|
|
|