私は、かなり長い間取り組んできた 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
イントロスペクターが存在しなくなったときに、イントロスペクターが起動する原因は何ですか? どうすれば修正できますか?