OpenCSV KEINE JAVABEANS mit Anmerkungen abbildenJava

Java-Forum
Anonymous
 OpenCSV KEINE JAVABEANS mit Anmerkungen abbilden

Post by Anonymous »

Ich verwende Version 3.8 der OpenCSV -Bibliothek. Ich verwende Annotation, um die Bean -Felder den Spalten in der CSV -Datei abzubilden. Ich habe es bis zu einem Punkt. Es fällt fehl, wenn ein Datumfeld leer ist. < /p>

java.lang.RuntimeException: Error parsing CSV line: 1
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)

**Caused by: com.opencsv.exceptions.CsvDataTypeMismatchException**
at com.opencsv.bean.BeanFieldDate.convertLocaleInspecific(BeanFieldDate.java:216)
at com.opencsv.bean.BeanFieldDate.convert(BeanFieldDate.java:242)
at com.opencsv.bean.AbstractBeanField.setFieldValue(AbstractBeanField.java:70)
at com.opencsv.bean.CsvToBean.processField(CsvToBean.java:245)
at com.opencsv.bean.CsvToBean.processLine(CsvToBean.java:220)
at com.opencsv.bean.CsvToBean.processLine(CsvToBean.java:189)
at com.opencsv.bean.CsvToBean.parse(CsvToBean.java:166)
... 26 more
**Caused by: org.apache.commons.beanutils.ConversionException: No value specified for 'Date'
at** org.apache.commons.beanutils.converters.AbstractConverter.handleMissing(AbstractConverter.java:327)
at org.apache.commons.beanutils.converters.DateTimeConverter.convertToType(DateTimeConverter.java:327)
at org.apache.commons.beanutils.converters.AbstractConverter.convert(AbstractConverter.java:169)
at com.opencsv.bean.BeanFieldDate.convertLocaleInspecific(BeanFieldDate.java:214)
... 32 more
< /code>

Die Annotation für das spezifische Bean -Feld als "Erforderlich = false", aber sie funktioniert immer noch nicht. Hier ist die Javaban -Annotation, in der ich die Klasse java.util.date verwende: < /p>

@CsvBindByName(column="Sent On", required=true)
@CsvDate(value="MM/dd/yyyy HH:mm:ss a z")
private Date sentOn;

@CsvBindByName(column="Last Activity", required=false)
@CsvDate(value="MM/dd/yyyy HH:mm:ss a z")
private Date lastActivity;

@CsvBindByName(column="Completed On", required=false)
@CsvDate(value="MM/dd/yyyy HH:mm:ss a z")
private Date completedOn;
< /code>

So habe ich den CSV -Reader und Parser erstellt: < /p>

final char QUOTE_CHARACTER = '"';
ClassLoader classLoader = getClass().getClassLoader();
File newFile = new File(classLoader.getResource(fileName).getFile());
CSVReader reader2 = null;

FileReader fileReader2 = null;

List myList = null;

try {

HeaderColumnNameMappingStrategy strat = new HeaderColumnNameMappingStrategy();
strat.setType(My_Data.class);

CsvToBean csv = new CsvToBean();

final CSVParser csvParser = new CSVParserBuilder().withSeparator(delimiter)
.withQuoteChar(QUOTE_CHARACTER)
.withStrictQuotes(true)
.build();

fileReader2 = new FileReader(newFile);

reader2 = new CSVReaderBuilder(fileReader2).withCSVParser(csvParser)
.withVerifyReader(true)
.withKeepCarriageReturn(false)
.build();

myList = csv.parse(strat, reader2);
< /code>

Hier sind CSV -Dateidaten: < /p>

"Subject","Status","Sender Name","Recipient","Sent On","Last Activity","Completed On","Completion Time (DD:HH:MM)","Created Date","Declined Date","Document ID","Reason for Declining","Expiration Date","Date Signed"
"MyCompany: Plan RCP Endorsements Select Bundle","Sent","ENV_PROD","SANDRA BULLOCK","7/21/2016 10:49:38 AM EST","7/21/2016 10:49:38 AM EST","","","7/21/2016 10:49:37 AM EST","","e05e53d8-e8bd-469e-a774-c0dec98481b2","","9/4/2016 10:49:38 AM EST",""
< /code>

Wie ich festgestellt habe, dass dieser Fehler durch den Quellcode geht. Ich hoffe, dass andere ein ähnliches Problem haben und mir einen Vorschlag geben können, wie ich dieses Problem umgehen kann. Ich mag diesen Mapping -Ansatz, da er mir Zeit und Mühe spart. Der Prozess funktioniert, indem sie die Datei nur in eine Liste lesen. Das Problem bei diesem Ansatz ist, dass ich den Werksprozess für die JavaBeans schreiben müsste. < /p>

Vorschläge sind begrüßt. < /p>

Danke, < /p>

Russ < /p>

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post