My OpenCSV Version is : 5.5.2
I upload a CSV file and call the parseCSVFile method like this
List<CSVCouponData> csvData = CSVFileHelper.parseCSVFile(multipartFile.getInputStream());
Following is my code
public static List<CSVCouponData> parseCSVFile(InputStream inputStream) throws IOException {
CSVReader reader = null;
List<CSVCouponData> rec = null;
try {
reader = new CSVReader(new InputStreamReader(inputStream));
HeaderColumnNameMappingStrategy<CSVCouponData> beanStrategy = new HeaderColumnNameMappingStrategy<>();
beanStrategy.setType(CSVCouponData.class);
CsvToBean<CSVCouponData> csvToBean = new CsvToBean<>();
csvToBean.setCsvReader(reader);
csvToBean.setMappingStrategy(beanStrategy);
csvToBean.setIgnoreEmptyLines(true);
rec = csvToBean.parse();
} finally {
if(reader != null)
reader.close();
}
return rec;
}
The following is my CSVCouponData
public class CSVCouponData {
@CsvBindByName(column = "name", required = true)
private String name;
@CsvBindByName(column = "coupon-type", required = true)
private String couponType;
@CsvBindByName(column = "incentive-program-id", required = true)
private String programId;
@CsvBindByName(column = "coupons-amount")
private Long couponsAmount;
@CsvBindByName(column = "coupon-benefits.unit-of-measure")
private String unitOfMeasure;
@CsvBindByName(column = "coupon-benefits.benefit-target-party")
private String benefitTargetParty;
@CsvBindByName(column = "coupon-benefits.characteristics")
private String characteristics;
@CsvBindByName(column = "coupon-benefits.benefit-type")
private String benefitType;
@CsvBindByName(column = "coupon-benefits.benefit-confirmation-source")
private String benefitConfirmationSource;
@CsvBindByName(column = "coupon-benefits.benefit-currency")
private String benefitCurrency;
@CsvBindByName(column = "coupon-benefits.benefit-amount")
private String benefitAmount;
@CsvBindByName(column = "coupon-benefits.benefit-description", required = true)
private String benefitDescription;
@CsvBindByName(column = "benefit-catalog-info.product-offering-ids")
private String productOfferingIds;
@CsvBindByName(column = "benefit-catalog-info.discount-id")
private String discountId;
@CsvBindByName(column = "benefit-catalog-info.cardinality.min")
private Integer cardinalityMin;
@CsvBindByName(column = "benefit-catalog-info.cardinality.max")
private Integer cardinalityMax;
@CsvBindByName(column = "external-id", required = true)
private String externalId;
@CsvBindByName(column = "valid_from", required = true)
private String validFrom;
@CsvBindByName(column = "valid_to", required = true)
private String validTo;
@CsvBindByName(column = "sales_context.batch-id")
private String batchId;
@CsvBindByName(column = "sales_context.campaign-id")
private String campaignId;
@CsvBindByName(column = "sales_context.chain-id")
private String chainId;
@CsvBindByName(column = "sales_context.channel")
private String channel;
@CsvBindByName(column = "sales_context.dealer-id")
private String dealerId;
@CsvBindByName(column = "sales_context.sales-type")
private String salesType;
@CsvBindByName(column = "sales_context.salesperson-id")
private String salesPersonId;
@CsvBindByName(column = "incentive-coupon-batches.partner-name", required = true)
private String partnerName;
@CsvBindByName(column = "incentive-coupon-batches.redemption-specification-owner", required = true)
private String redemptionSpecificationOwner;
@CsvBindByName(column = "incentive-coupon-batches.distribution-specification.owner", required = true)
private String distributionSpecificationOwner;
@CsvBindByName(column = "incentive-coupon-batches.distribution-specification.method", required = true)
private String distributionSpecificationMethod;
@CsvBindByName(column = "incentive-coupons.code", required = true)
private String code;
@CsvBindByName(column = "brand")
private String brand;
When i debug my code it throws and error at this line rec = csvToBean.parse(); with this error
java.lang.RuntimeException: Error capturing CSV header!
Even though i have provided all the fields which are marked required =true in my CsvCouponData, i see this error
com.opencsv.exceptions.CsvRequiredFieldEmptyException: Header is missing required fields [INCENTIVE-PROGRAM-ID]. The list of headers encountered is [ incentive-program-id,coupon-type,name,coupon-benefits.benefit-description,external-id,valid_from,valid_to,incentive-coupon-batches.partner-name,incentive-coupon-batches.redemption-specification-owner,incentive-coupon-batches.distribution-specification.owner,incentive-coupon-batches.distribution-specification.method,incentive-coupons.code].
Initially i had opencsv version 4.4 and did not have this error.
But when i upgraded the version to 5.5.2 i started seeing this error. I have also upgraded to the latest version which is 5.6, but still no luck.
I have gone through this link which is almost similar to the error i get, but no solutions have helped
OpenCSV throws Error capturing CSV header on parse Any suggestions please