From ad570809aac451390d58617062a0e95000ec8a5c Mon Sep 17 00:00:00 2001 From: buczekp <buczekp> Date: Mon, 6 Dec 2010 17:09:13 +0000 Subject: [PATCH] [LMS-1907] refactorization: simplify NamedInputStream (no need to work on byte array); fixed encoding in upload of library SVN: 19018 --- .../cisd/common/utilities/UnicodeUtils.java | 7 ++ .../shared/parser/NamedInputStream.java | 20 ++-- .../parser/SampleUploadSectionsParser.java | 94 +++++++++++-------- .../client/web/server/DataSetLoader.java | 3 +- .../client/web/server/ExperimentLoader.java | 3 +- .../web/server/GenericClientService.java | 15 +-- .../client/web/server/MaterialLoader.java | 3 +- .../web/server/UpdatedExperimentLoader.java | 3 +- .../client/web/server/LibraryExtractor.java | 5 +- .../LibraryEntityRegistrator.java | 4 +- .../ScreeningLibraryTransformer.java | 16 +++- 11 files changed, 98 insertions(+), 75 deletions(-) diff --git a/common/source/java/ch/systemsx/cisd/common/utilities/UnicodeUtils.java b/common/source/java/ch/systemsx/cisd/common/utilities/UnicodeUtils.java index 5bf5236b4ad..27cedb5aa70 100644 --- a/common/source/java/ch/systemsx/cisd/common/utilities/UnicodeUtils.java +++ b/common/source/java/ch/systemsx/cisd/common/utilities/UnicodeUtils.java @@ -20,6 +20,7 @@ import java.io.InputStream; import java.io.InputStreamReader; import java.io.Reader; import java.io.UnsupportedEncodingException; +import java.nio.charset.Charset; import ch.systemsx.cisd.common.exceptions.EnvironmentFailureException; @@ -38,6 +39,12 @@ public final class UnicodeUtils // Can not be instantiated. } + /** @returns {@link Charset} for {@link #DEFAULT_UNICODE_CHARSET} */ + public final static Charset getDefaultUnicodeCharset() + { + return Charset.forName(UnicodeUtils.DEFAULT_UNICODE_CHARSET); + } + /** * @return {@link Reader} that uses the default Unicode encoding. * @throws EnvironmentFailureException if the encoding is not supported (shouldn't happen). diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/parser/NamedInputStream.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/parser/NamedInputStream.java index 5556981bdb0..23c90fd4610 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/parser/NamedInputStream.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/parser/NamedInputStream.java @@ -17,11 +17,13 @@ package ch.systemsx.cisd.openbis.generic.shared.parser; import java.io.InputStream; +import java.io.Reader; -import org.springframework.web.multipart.MultipartFile; +import ch.systemsx.cisd.common.utilities.UnicodeUtils; /** * @author Izabela Adamczyk + * @author Piotr Buczek */ public class NamedInputStream { @@ -30,15 +32,15 @@ public class NamedInputStream private final String originalName; - private final byte[] bytes; - - public NamedInputStream(InputStream stream, String originalName, byte[] bytes) + public NamedInputStream(InputStream stream, String originalName) { this.stream = stream; this.originalName = originalName; - this.bytes = bytes; } + /** + * NOTE: use {@link #getUnicodeReader()} to get Unicode characters. + */ public InputStream getInputStream() { return stream; @@ -50,10 +52,12 @@ public class NamedInputStream } /** - * @see MultipartFile#getBytes() + * @return Reader of unicode characters from this input stream + * <p> + * Use {@link #getInputStream()} instead to get raw input stream. */ - public byte[] getBytes() + public Reader getUnicodeReader() { - return bytes; + return UnicodeUtils.createReader(stream); } } diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/parser/SampleUploadSectionsParser.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/parser/SampleUploadSectionsParser.java index c96860d8869..4bf7ad36ab8 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/parser/SampleUploadSectionsParser.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/parser/SampleUploadSectionsParser.java @@ -19,7 +19,6 @@ package ch.systemsx.cisd.openbis.generic.shared.parser; import java.io.InputStream; import java.io.Reader; import java.io.StringReader; -import java.io.UnsupportedEncodingException; import java.util.ArrayList; import java.util.Collection; import java.util.List; @@ -95,33 +94,27 @@ public class SampleUploadSectionsParser { final List<NewSamplesWithTypes> newSamples = new ArrayList<NewSamplesWithTypes>(); boolean isAutoGenerateCodes = (sampleCodeGeneratorOrNull != null); - try - { - final List<BatchRegistrationResult> results = - loadSamplesFromFiles(files, sampleType, isAutoGenerateCodes, newSamples, - allowExperiments, operationKind); + final List<BatchRegistrationResult> results = + loadSamplesFromFiles(files, sampleType, isAutoGenerateCodes, newSamples, + allowExperiments, operationKind); - if (defaultGroupIdentifier != null) + if (defaultGroupIdentifier != null) + { + switch (operationKind) { - switch (operationKind) - { - case REGISTRATION: - if (isAutoGenerateCodes) - { - generateIdentifiers(defaultGroupIdentifier, sampleCodeGeneratorOrNull, - isAutoGenerateCodes, newSamples); - } - break; - case UPDATE: - fillIdentifiers(defaultGroupIdentifier, newSamples); - break; - } + case REGISTRATION: + if (isAutoGenerateCodes) + { + generateIdentifiers(defaultGroupIdentifier, sampleCodeGeneratorOrNull, + isAutoGenerateCodes, newSamples); + } + break; + case UPDATE: + fillIdentifiers(defaultGroupIdentifier, newSamples); + break; } - return new BatchSamplesOperation(newSamples, results, parseCodes(newSamples)); - } catch (UnsupportedEncodingException ex) - { - throw new UserFailureException(ex.getMessage()); } + return new BatchSamplesOperation(newSamples, results, parseCodes(newSamples)); } private static String[] parseCodes(final List<NewSamplesWithTypes> newSamples) @@ -167,19 +160,43 @@ public class SampleUploadSectionsParser static class FileSection { - private final String content; + private final String contentOrNull; + + private final InputStream contentStreamOrNull; private final String sectionName; - public FileSection(String content, String sectionName) + // assumption that the given string is encoded using Unicode + public static FileSection createFromString(String content, String sectionName) + { + return new FileSection(content, sectionName, null); + } + + public static FileSection createFromInputStream(InputStream contentStream, + String sectionName) { + return new FileSection(null, sectionName, contentStream); + } + + private FileSection(String contentOrNull, String sectionName, + InputStream contentStreamOrNull) + { + assert (contentOrNull != null && contentStreamOrNull == null) + || (contentOrNull == null && contentStreamOrNull != null); this.sectionName = sectionName; - this.content = content; + this.contentOrNull = contentOrNull; + this.contentStreamOrNull = contentStreamOrNull; } - public String getContent() + public Reader getContentReader() { - return content; + if (contentOrNull != null) + { + return new StringReader(contentOrNull); + } else + { + return UnicodeUtils.createReader(contentStreamOrNull); + } } public String getSectionName() @@ -188,13 +205,11 @@ public class SampleUploadSectionsParser } } - private static List<FileSection> extractSections(InputStream stream) + private static List<FileSection> extractSections(Reader reader) { List<FileSection> sections = new ArrayList<FileSection>(); - Reader reader = null; try { - reader = UnicodeUtils.createReader(stream); LineIterator it = IOUtils.lineIterator(reader); StringBuilder sb = null; String sectionName = null; @@ -206,7 +221,7 @@ public class SampleUploadSectionsParser { if (sectionName != null && sb != null) { - sections.add(new FileSection(sb.toString(), sectionName)); + sections.add(FileSection.createFromString(sb.toString(), sectionName)); } sectionName = newSectionName; sb = new StringBuilder(); @@ -223,7 +238,7 @@ public class SampleUploadSectionsParser } if (it.hasNext() == false) { - sections.add(new FileSection(sb.toString(), sectionName)); + sections.add(FileSection.createFromString(sb.toString(), sectionName)); } } } finally @@ -255,7 +270,6 @@ public class SampleUploadSectionsParser Collection<NamedInputStream> uploadedFiles, SampleType sampleType, boolean isAutoGenerateCodes, final List<NewSamplesWithTypes> newSamples, boolean allowExperiments, BatchOperationKind operationKind) - throws UnsupportedEncodingException { final List<BatchRegistrationResult> results = new ArrayList<BatchRegistrationResult>(uploadedFiles.size()); @@ -264,16 +278,16 @@ public class SampleUploadSectionsParser List<FileSection> sampleSections = new ArrayList<FileSection>(); if (sampleType.isDefinedInFileEntityTypeCode()) { - sampleSections.addAll(extractSections(multipartFile.getInputStream())); + sampleSections.addAll(extractSections(multipartFile.getUnicodeReader())); } else { - sampleSections.add(new FileSection(new String(multipartFile.getBytes(), - UnicodeUtils.DEFAULT_UNICODE_CHARSET), sampleType.getCode())); + sampleSections.add(FileSection.createFromInputStream( + multipartFile.getInputStream(), sampleType.getCode())); } int sampleCounter = 0; for (FileSection fs : sampleSections) { - final StringReader stringReader = new StringReader(fs.getContent()); + Reader reader = fs.getContentReader(); SampleType typeFromSection = new SampleType(); typeFromSection.setCode(fs.getSectionName()); final BisTabFileLoader<NewSample> tabFileLoader = @@ -282,7 +296,7 @@ public class SampleUploadSectionsParser String sectionInFile = sampleSections.size() == 1 ? "" : " (section:" + fs.getSectionName() + ")"; final List<NewSample> loadedSamples = - tabFileLoader.load(new DelegatedReader(stringReader, multipartFile + tabFileLoader.load(new DelegatedReader(reader, multipartFile .getOriginalFilename() + sectionInFile)); if (loadedSamples.size() > 0) { diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/server/DataSetLoader.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/server/DataSetLoader.java index 84427112c89..a53b7407149 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/server/DataSetLoader.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/server/DataSetLoader.java @@ -25,7 +25,6 @@ import ch.systemsx.cisd.common.parser.IParserObjectFactory; import ch.systemsx.cisd.common.parser.IParserObjectFactoryFactory; import ch.systemsx.cisd.common.parser.IPropertyMapper; import ch.systemsx.cisd.common.parser.ParserException; -import ch.systemsx.cisd.common.utilities.UnicodeUtils; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.BatchRegistrationResult; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.NewDataSet; import ch.systemsx.cisd.openbis.generic.shared.parser.BisTabFileLoader; @@ -61,7 +60,7 @@ public class DataSetLoader results = new ArrayList<BatchRegistrationResult>(files.size()); for (final NamedInputStream file : files) { - final Reader reader = UnicodeUtils.createReader(file.getInputStream()); + final Reader reader = file.getUnicodeReader(); final List<NewDataSet> loadedMaterials = tabFileLoader.load(new DelegatedReader(reader, file.getOriginalFilename())); newObjects.addAll(loadedMaterials); diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/server/ExperimentLoader.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/server/ExperimentLoader.java index 23b9e0b945f..e46cb10816a 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/server/ExperimentLoader.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/server/ExperimentLoader.java @@ -26,7 +26,6 @@ import ch.systemsx.cisd.common.parser.IParserObjectFactory; import ch.systemsx.cisd.common.parser.IParserObjectFactoryFactory; import ch.systemsx.cisd.common.parser.IPropertyMapper; import ch.systemsx.cisd.common.parser.ParserException; -import ch.systemsx.cisd.common.utilities.UnicodeUtils; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.BatchRegistrationResult; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.NewBasicExperiment; import ch.systemsx.cisd.openbis.generic.shared.parser.BisTabFileLoader; @@ -64,7 +63,7 @@ public class ExperimentLoader results = new ArrayList<BatchRegistrationResult>(files.size()); for (final NamedInputStream file : files) { - final Reader reader = UnicodeUtils.createReader(file.getInputStream()); + final Reader reader = file.getUnicodeReader(); final List<NewBasicExperiment> loadedExperiments = tabFileLoader.load(new DelegatedReader(reader, file.getOriginalFilename())); newExperiments.addAll(loadedExperiments); diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/server/GenericClientService.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/server/GenericClientService.java index 8c19f982985..1c9b8c22812 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/server/GenericClientService.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/server/GenericClientService.java @@ -259,8 +259,7 @@ public class GenericClientService extends AbstractClientService implements IGene new ArrayList<NamedInputStream>(uploadedFiles.size()); for (IUncheckedMultipartFile f : uploadedFiles.iterable()) { - files.add(new NamedInputStream(f.getInputStream(), f.getOriginalFilename(), f - .getBytes())); + files.add(new NamedInputStream(f.getInputStream(), f.getOriginalFilename())); } return SampleUploadSectionsParser.prepareSamples(sampleType, files, defaultGroupIdentifier, sampleCodeGeneratorOrNull, allowExperiments, @@ -369,8 +368,7 @@ public class GenericClientService extends AbstractClientService implements IGene new ArrayList<NamedInputStream>(uploadedFiles.size()); for (IUncheckedMultipartFile f : uploadedFiles.iterable()) { - files.add(new NamedInputStream(f.getInputStream(), f.getOriginalFilename(), f - .getBytes())); + files.add(new NamedInputStream(f.getInputStream(), f.getOriginalFilename())); } ExperimentLoader loader = new ExperimentLoader(); loader.load(files); @@ -392,8 +390,7 @@ public class GenericClientService extends AbstractClientService implements IGene new ArrayList<NamedInputStream>(uploadedFiles.size()); for (IUncheckedMultipartFile f : uploadedFiles.iterable()) { - files.add(new NamedInputStream(f.getInputStream(), f.getOriginalFilename(), f - .getBytes())); + files.add(new NamedInputStream(f.getInputStream(), f.getOriginalFilename())); } MaterialLoader loader = new MaterialLoader(); loader.load(files); @@ -556,8 +553,7 @@ public class GenericClientService extends AbstractClientService implements IGene new ArrayList<NamedInputStream>(uploadedFiles.size()); for (IUncheckedMultipartFile f : uploadedFiles.iterable()) { - files.add(new NamedInputStream(f.getInputStream(), f.getOriginalFilename(), f - .getBytes())); + files.add(new NamedInputStream(f.getInputStream(), f.getOriginalFilename())); } DataSetLoader loader = new DataSetLoader(); loader.load(files); @@ -586,8 +582,7 @@ public class GenericClientService extends AbstractClientService implements IGene new ArrayList<NamedInputStream>(uploadedFiles.size()); for (IUncheckedMultipartFile f : uploadedFiles.iterable()) { - files.add(new NamedInputStream(f.getInputStream(), f.getOriginalFilename(), f - .getBytes())); + files.add(new NamedInputStream(f.getInputStream(), f.getOriginalFilename())); } UpdatedExperimentLoader loader = new UpdatedExperimentLoader(); loader.load(files); diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/server/MaterialLoader.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/server/MaterialLoader.java index 613a18dd227..065cc012372 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/server/MaterialLoader.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/server/MaterialLoader.java @@ -10,7 +10,6 @@ import ch.systemsx.cisd.common.parser.IParserObjectFactory; import ch.systemsx.cisd.common.parser.IParserObjectFactoryFactory; import ch.systemsx.cisd.common.parser.IPropertyMapper; import ch.systemsx.cisd.common.parser.ParserException; -import ch.systemsx.cisd.common.utilities.UnicodeUtils; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.BatchRegistrationResult; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.NewMaterial; import ch.systemsx.cisd.openbis.generic.shared.parser.BisTabFileLoader; @@ -41,7 +40,7 @@ public class MaterialLoader results = new ArrayList<BatchRegistrationResult>(files.size()); for (final NamedInputStream file : files) { - final Reader reader = UnicodeUtils.createReader(file.getInputStream()); + final Reader reader = file.getUnicodeReader(); final List<NewMaterial> loadedMaterials = tabFileLoader.load(new DelegatedReader(reader, file.getOriginalFilename())); newMaterials.addAll(loadedMaterials); diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/server/UpdatedExperimentLoader.java b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/server/UpdatedExperimentLoader.java index a5ef23ae77a..12d79fc40f0 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/server/UpdatedExperimentLoader.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/plugin/generic/client/web/server/UpdatedExperimentLoader.java @@ -26,7 +26,6 @@ import ch.systemsx.cisd.common.parser.IParserObjectFactory; import ch.systemsx.cisd.common.parser.IParserObjectFactoryFactory; import ch.systemsx.cisd.common.parser.IPropertyMapper; import ch.systemsx.cisd.common.parser.ParserException; -import ch.systemsx.cisd.common.utilities.UnicodeUtils; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.BatchRegistrationResult; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.UpdatedBasicExperiment; import ch.systemsx.cisd.openbis.generic.shared.parser.BisTabFileLoader; @@ -64,7 +63,7 @@ public class UpdatedExperimentLoader results = new ArrayList<BatchRegistrationResult>(files.size()); for (final NamedInputStream file : files) { - final Reader reader = UnicodeUtils.createReader(file.getInputStream()); + final Reader reader = file.getUnicodeReader(); final List<UpdatedBasicExperiment> loadedExperiments = tabFileLoader.load(new DelegatedReader(reader, file.getOriginalFilename())); newExperiments.addAll(loadedExperiments); diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/server/LibraryExtractor.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/server/LibraryExtractor.java index 3001cfc0f38..a8773b455e5 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/server/LibraryExtractor.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/server/LibraryExtractor.java @@ -106,8 +106,7 @@ class LibraryExtractor BatchSamplesOperation prepared = SampleUploadSectionsParser.prepareSamples(typeInFile, Arrays .asList(new NamedInputStream(new FileInputStream(platesFile), platesFile - .getName(), null)), null, null, true, - BatchOperationKind.REGISTRATION); + .getName())), null, null, true, BatchOperationKind.REGISTRATION); List<NewSamplesWithTypes> samples = prepared.getSamples(); setUpdatableTypes(samples); return samples; @@ -125,7 +124,7 @@ class LibraryExtractor { MaterialLoader loader = new MaterialLoader(); loader.load(Arrays.asList(new NamedInputStream(new FileInputStream(genesFile), genesFile - .getName(), null))); + .getName()))); return loader.getNewMaterials(); } diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/server/library_tools/LibraryEntityRegistrator.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/server/library_tools/LibraryEntityRegistrator.java index ab65c746953..fb1face1d11 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/server/library_tools/LibraryEntityRegistrator.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/server/library_tools/LibraryEntityRegistrator.java @@ -30,6 +30,7 @@ import java.util.Set; import org.apache.commons.io.IOUtils; import org.apache.commons.lang.StringUtils; +import ch.systemsx.cisd.common.utilities.UnicodeUtils; import ch.systemsx.cisd.openbis.plugin.screening.shared.basic.dto.ScreeningConstants; /** @@ -114,7 +115,8 @@ public class LibraryEntityRegistrator private void writeLine(String line) throws IOException { - IOUtils.writeLines(Arrays.asList(line), "\n", stream); + IOUtils.writeLines(Arrays.asList(line), "\n", stream, + UnicodeUtils.DEFAULT_UNICODE_CHARSET); } public void close() throws IOException diff --git a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/server/library_tools/ScreeningLibraryTransformer.java b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/server/library_tools/ScreeningLibraryTransformer.java index 5393aa87230..3f9e18ad982 100644 --- a/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/server/library_tools/ScreeningLibraryTransformer.java +++ b/screening/source/java/ch/systemsx/cisd/openbis/plugin/screening/client/web/server/library_tools/ScreeningLibraryTransformer.java @@ -21,12 +21,12 @@ import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; -import java.nio.charset.Charset; import com.csvreader.CsvReader; import ch.systemsx.cisd.common.exceptions.Status; import ch.systemsx.cisd.common.exceptions.UserFailureException; +import ch.systemsx.cisd.common.utilities.UnicodeUtils; /** * Transforms a screening library file and produces files which can be uploaded to openBIS: genes, @@ -36,7 +36,7 @@ import ch.systemsx.cisd.common.exceptions.UserFailureException; */ public class ScreeningLibraryTransformer { - private final static char SEPARATOR = ','; + private final static char SEPARATOR = ','; // TODO parametrize private static final String GENES_FILE_NAME = "genes.txt"; @@ -79,9 +79,10 @@ public class ScreeningLibraryTransformer String plateGeometry, String groupCode, String genesFile, String oligosFile, String platesFile) { + CsvReader csvReader = null; try { - CsvReader csvReader = readFile(input); + csvReader = readFile(input); boolean headerPresent = csvReader.readRecord(); if (headerPresent == false) { @@ -99,18 +100,23 @@ public class ScreeningLibraryTransformer registrator.register(extractor, row); } registrator.saveResults(); - csvReader.close(); return Status.OK; } catch (Exception ex) { return Status.createError(ex.getMessage()); + } finally + { + if (csvReader != null) + { + csvReader.close(); + } } } static CsvReader readFile(InputStream input) throws FileNotFoundException, IOException, UserFailureException { - CsvReader csvReader = new CsvReader(input, Charset.defaultCharset()); + CsvReader csvReader = new CsvReader(input, UnicodeUtils.getDefaultUnicodeCharset()); csvReader.setDelimiter(SEPARATOR); csvReader.setSafetySwitch(false); return csvReader; -- GitLab