0

我在一个我已经工作了很长时间的 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什么可能导致内省者在它不再存在时捡起它?我该如何解决?

4

1 回答 1

1

这将是方法的名称setUnavailableTimes。您可以通过将方法重命名为setAdhocUnavailableTimes.

于 2013-03-17T19:52:54.957 回答