私はHeaderColumnNameMappingStrategyを使用して、ヘッダー付きのcsvファイルをJavaBeanにマップしています。文字列値は正常に解析されますが、csvの「true」または「false」値はJavaBeanにマップされず、PropertyDescriptorから次の例外が発生します。
java.lang.IllegalArgumentException: argument type mismatch
それが発生するコードは、CsvToBeanの64行目にあります。
protected T processLine(MappingStrategy<T> mapper, String[] line) throws
IllegalAccessException, InvocationTargetException, InstantiationException, IntrospectionException {
T bean = mapper.createBean();
for(int col = 0; col < line.length; col++) {
String value = line[col];
PropertyDescriptor prop = mapper.findDescriptor(col);
if (null != prop) {
Object obj = convertValue(value, prop);
// this is where exception is thrown for a "true" value in csv
prop.getWriteMethod().invoke(bean, new Object[] {obj});
}
}
return bean;
}
protected PropertyEditor getPropertyEditor(PropertyDescriptor desc) throws
InstantiationException, IllegalAccessException {
Class<?> cls = desc.getPropertyEditorClass();
if (null != cls) return (PropertyEditor) cls.newInstance();
return getPropertyEditorValue(desc.getPropertyType());
}
この時点で、setterメソッドIDが正しく取得されたことを(デバッガーを介して)確認できます。
nullを返すため、desc.getPropertyEditorClass()で問題が発生します。プリミティブ型とそのラッパーがサポートされていると仮定しました。そうじゃないの?