我在一个我已经工作了很长时间的 Java EE 6 应用程序中依赖于对 XML 处理的自省。到目前为止,它工作得很好。但是,我不得不重命名属性设置器名称。问题是Introspector.getBeanInfo(Class<?>)
,即使在我检测到旧的和新的二传手之后
- 停止使用 JRebel,
- 清除了我的 Maven 存储库,
- 吹走 GlassFish 并安装了一个新的,然后
- 重建我的网络应用程序。
另外,我确保刷新了内省的缓存:
public class BeanUtils {
public static Map<String, Class> propertyTypes(Class beanType) throws Exception {
HashMap<String, Class> propertyTypes = new HashMap<>();
for (PropertyDescriptor descriptor : Introspector.getBeanInfo(beanType).getPropertyDescriptors()) {
propertyTypes.put(descriptor.getName(), descriptor.getPropertyType());
}
return propertyTypes;
}
// Added this to flush the introspector
static {
Introspector.flushCaches();
}
}
这是我正在反省的课程:
public class AdhocUnavailableTimesRequestTag
{
public AdhocUnavailableTimeRequestTag[] getAdhocUnavailableTimes()
{
return adhocUnavailableTimes;
}
public void setUnavailableTimes(AdhocUnavailableTimeRequestTag[] adhocUnavailableTimes)
{
this.adhocUnavailableTimes = adhocUnavailableTimes;
}
private AdhocUnavailableTimeRequestTag[] adhocUnavailableTimes;
}
并调用BeanUtils.propertyTypes(AdhocUnavailableTimesRequestTag.class)
返回:
"adhocUnavailableTimes" => class [LAdhocUnavailableTimeRequestTag;
"class" => java.lang.Class"
"unavailableTimes" => class [LAdhocUnavailableTimeRequestTag;
unavailableTimes
什么可能导致内省者在它不再存在时捡起它?我该如何解决?