Исключение при попытке динамически назначить ключи для Spring-Batch FlatFileItemReader - PullRequest
0 голосов
/ 03 июня 2019

Мне нужно иметь возможность прочитать файл CSV с динамическим размером.Я не знаю заранее, сколько столбцов будет иметь мой CSV-файл.1) На первом этапе пакетной обработки мне нужно прочитать файл и преобразовать записи плоских линий в объект HashMap.Я пытаюсь достичь этого путем создания специального считывателя, который подклассов класса FlatFileItemReader.
2) Идея состоит в том, чтобы на этапе обработки преобразовать плоскую карту, полученную из reader (), в объектный граф Map object,и наконец
3) превратить этот граф объектов в запрос, который будет отправлен в API (а не сохранен в БД)

Самый первый шаг выдает:

"NotWritablePropertyException: Неверное свойство 'StrategyType' класса бина [java.util.HashMap]: "

Насколько я понимаю, исключение имеет место, поскольку HashMap действительно не имеет свойства с именем" StrategyType ".

Кто-нибудь пытался разобраться с подобной проблемой?

Как лучше подходить к решению описанной проблемы?

До сих пор я пытался реализовать свой собственный читатель, но подумал, что 'Я бы не стал изобретать велосипед, если бы Spring-Batch предоставил инструменты для этого.

public static BatchFileReader createBatchFileReader(String fileName) throws IOException
    {
        ...
        batchFileReader.setLineMapper(batchFileReader.getLineMapper(fileName));
        Resource fileResource = new FileSystemResource(fileName);

        batchFileReader.setResource(fileResource);
        return batchFileReader;
    }

...
    private LineMapper<Map<String, Object>> getLineMapper(String fileName) throws FileNotFoundException, IOException
    {
        DefaultLineMapper<Map<String, Object>> lineMapper = new DefaultLineMapper<>();
        LineTokenizer lineTokenizer = getLineTokenizer(fileName);
        ...
        return lineMapper;
    }

...
    private String[] getFieldNames(InputStream fileStream) throws FileNotFoundException, IOException
    {
    ...
    return fieldNames;
    }

Я ожидаю, что читатель вернется с Картой, содержащейДанные из файла CSV.

Вместо этого выдается исключение:

org.springframework.batch.item.file.FlatFileParseException: Ошибка синтаксического анализа в строке: 2 в resource = [файл [/workspaces/smart-gateway/smart-api-gateway/src/test/resources/test-data/singleRowBatchFile.csv]], вход = [SINGLE, SMS, 447855901971] в org.springframework.batch.item.file.FlatFileItemReader..java: 52) в sun.reflect.NativeMethodAccessorImpl.invoke0 (собственный метод) в sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62) в sun.reflect.DelegatingMethodAccessor.javjjlang.reflect.Method.invoke (Method.java:498) в org.junit.runners.model.FrameworkMethod $1.runReflectiveCall (FrameworkMethod.java:50) в org.junit.internal.runners.model.ReflectiveCallable.run (ReflectiveCallable.java:12) в org.junit.runners.model.FrameworkMethod.invokeExavahod (Framework)в org.junit.internal.runners.statements.InvokeMethod.evaluate (InvokeMethod.java:17) в org.junit.internal.runners.statements.RunBefores.evaluate (RunBefores.java:26) в org.junit.runners.Parent.runLeaf (ParentRunner.java:325) в org.junit.runners.BlockJUnit4ClassRunner.runChild (BlockJUnit4ClassRunner.java:78) в org.junit.runners.BlockJUnit4ClassRunner.rlass57.junjj4 ()ParentRunner $ 3.run (ParentRunner.java:290) в org.junit.runners.ParentRunner $ 1.schedule (ParentRunner.java:71) в org.junit.runners.ParentRunner.runChildren (ParentRunner.java:28jit) или в.runners.ParentRunner.access $ 000 (ParentRunner.java:58) в org.junit.runners.ParentRunner $ 2.evaluate (ParentRunner.java:268) в org.junit.runners.ParentRunner.run (ParentRunner.java:363) в org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run (JUnit4TestReference.java:89) в org.eclipse.jdt.internal.junit.runner.TestExecution.run (TestExecution.run (TestExecution.run (TestExecution.run):41) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests (RemoteTestRunner.java:541) по адресу org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests: удаленный оператор org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run (RemoteTestRunner.java:463) вorg.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main (RemoteTestRunner.java:209) Вызывается: org.springframework.beans.NotWritablePropertyException: недопустимое свойство 'StrategyType' класса бобов [java.util.H:свойство 'StrategyType' недоступно для записи или имеет недопустимый метод установки.Соответствует ли тип параметра установщика типу возвращаемого значения получателя?на org.springframework.beans.BeanWrapperImpl.createNotWritablePropertyException (BeanWrapperImpl.java:243) в org.springframework.beans.AbstractNestablePropertyAccessor.processLocalProperty (AbstractNestablePropertyAccessor.java:426) в org.springframework.beans.AbstractNestablePropertyAccessor.setPropertyValue (AbstractNestablePropertyAccessor.java:278) в org.springframework.beans.AbstractNestablePropertyAccessor.setPropertyValue (AbstractNestablePropertyAccessor.java:266) в org.springframework.beans.AbstractPropertyAccessor.setPropertyValues ​​(AbstractPropertyAccessor.848) в org.springframework.validation.DataBinder.doBind (DataBinder.java:744) в org.springframework.validation.DataBinder.bind (DataBinder.java:729) в org.springframework.batch.item.file.mapping.BeanWrapperField.mapFieldSet (BeanWrapperFieldSetMapper.java:198) в org.springframework.batch.item.file.mapping.DefaultLineMapper.mapLine (DefaultLineMapper.java:43) в org.springframework.batch.item.file.FlatFileItemReader.doRead (FlatFileItemReader.java:180) ... еще 26

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...