Module: Initializer
Module Version: My fork, rebased off the lastest master (1f55548).
Issue or Question: When I run Initializer (Iniz) with a CSV containing newlines, it freaks out:
example.csv
(\M
here means carriage return)
uuid,Void/Retire,text,some bool
41a3e98e-9ca1-acdd-0c5b-db6fc785f706,FALSE,"single line",FALSE
dfcdca5e-887f-330c-9b03-7717072a558d,FALSE,"Some text\M
that runs across multiple\M
\M
lines",FALSE
Output:
ERROR - CsvParser.saveAll(205) |2019-03-07 10:36:53,068| An OpenMRS object could not be constructed or saved from the following CSV line: [that runs across multiple]
java.lang.IllegalArgumentException: 'that runs across multiple' did not pass the soft check for being a valid OpenMRS UUID.
at org.openmrs.module.initializer.api.BaseLineProcessor.getUuid(BaseLineProcessor.java:75)
at org.openmrs.module.initializer.api.BaseLineProcessor.getUuid(BaseLineProcessor.java:85)
at org.openmrs.module.initializer.api.obs.ObsLineProcessor.bootstrap(ObsLineProcessor.java:49)
at org.openmrs.module.initializer.api.obs.ObsLineProcessor.bootstrap(ObsLineProcessor.java:25)
at org.openmrs.module.initializer.api.CsvParser.createInstance(CsvParser.java:90)
at org.openmrs.module.initializer.api.CsvParser.saveAll(CsvParser.java:186)
at org.openmrs.module.initializer.api.ConfigDirUtil.loadCsvFiles(ConfigDirUtil.java:428)
at org.openmrs.module.initializer.api.impl.InitializerServiceImpl.loadObservations(InitializerServiceImpl.java:216)
...
ERROR - CsvParser.saveAll(205) |2019-03-07 10:36:53,069| An OpenMRS object could not be constructed or saved from the following CSV line: [null]
java.lang.ArrayIndexOutOfBoundsException: 1
at org.openmrs.module.initializer.api.BaseLineProcessor.getVoidOrRetire(BaseLineProcessor.java:91)
at org.openmrs.module.initializer.api.BaseLineProcessor.getVoidOrRetire(BaseLineProcessor.java:99)
at org.openmrs.module.initializer.api.obs.ObsLineProcessor.bootstrap(ObsLineProcessor.java:59)
at org.openmrs.module.initializer.api.obs.ObsLineProcessor.bootstrap(ObsLineProcessor.java:25)
at org.openmrs.module.initializer.api.CsvParser.createInstance(CsvParser.java:90)
at org.openmrs.module.initializer.api.CsvParser.saveAll(CsvParser.java:186)
at org.openmrs.module.initializer.api.ConfigDirUtil.loadCsvFiles(ConfigDirUtil.java:428)
at org.openmrs.module.initializer.api.impl.InitializerServiceImpl.loadObservations(InitializerServiceImpl.java:216)
...
ERROR - CsvParser.saveAll(205) |2019-03-07 10:36:53,068| An OpenMRS object could not be constructed or saved from the following CSV line: [lines,FALSE]
java.lang.IllegalArgumentException: 'lines' did not pass the soft check for being a valid OpenMRS UUID.
at org.openmrs.module.initializer.api.BaseLineProcessor.getUuid(BaseLineProcessor.java:75)
...
Unfortunately and bizarrely, I haven’t been able to reproduce this in a unit test. When I add newlines to a quoted field in a test CSV, I get no such error; the field parses as it should. This is true whether I add carriage returns or not.
@mksd @mksrom I’m going to continue investigating, but do either of you have any intuitions about what might be going on?
Thanks!