我的答案与上面相同,但代码更清晰。我在我的项目中尝试过它,它工作正常。
import org.apache.camel.dataformat.bindy.BindyAbstractFactory;
import org.apache.camel.dataformat.bindy.BindyCsvFactory;
import org.apache.camel.dataformat.bindy.csv.BindyCsvDataFormat;
import org.apache.camel.spi.PackageScanClassResolver;
import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableSet;
public class CustomBindyCsvDataFormat extends BindyCsvDataFormat {
private Class<?> modelClass;
public CustomBindyCsvDataFormat(Class<?> modelClass) {
this.modelClass = modelClass;
}
public Class<?> getModelClass() {
return modelClass;
}
@Override
protected BindyAbstractFactory createModelFactory(PackageScanClassResolver resolver) throws Exception {
return new CustomBindyCsvFactory(resolver, getModelClass());
}
private class CustomBindyCsvFactory extends BindyCsvFactory {
public CustomBindyCsvFactory(PackageScanClassResolver resolver, Class<?> modelClass) throws Exception {
super(resolver, new String[] {});
Preconditions.checkNotNull(modelClass);
models = ImmutableSet.of(modelClass);
initCsvModel();
}
}
}
而不是使用 packageName 作为字符串参数调用 BindyCsvDataFormat,我们可以使用带有完全限定类名作为参数的 CustomBindyCsvDataFormat。