Использование Smooks (1.4
) для чтения CSV и преобразования их в Person
POJO.Чтение CSV с Smooks
CSV-состоит из разделенных запятыми записей в каждой строке, и каждая запись имеет трубные разделителями полей:
Смит | Джон | 45 | мужчина | Johnny | JSmith | JSmizzle,
Смит | Jane | 43 | female | Janey
и т. Д. Таким образом, каждая строка представляет другого человека для создания. Во-первых, POJO:
public class Person
{
private String lastName;
private String firstName;
private int age;
private boolean isMale;
private List<String> aliases;
}
Моя проблема с List
псевдонимов. Вот основные части из моей конфигурации XML:
<reader class="org.milyn.csv.CSVReader">
<param name="fields">lastName,fristName,age,gender,aliases</param>
<param name="separator">|</param>
<param name="strict">false</param>
</reader>
<core:filterSettings type="SAX"/>
<jb:bean beanId="person" class="net.me.myproject.app.Person" createOnElement="csv-set/csv-record/">
<jb:value property="lastName" data="csv-set/csv-record/lastName"/>
<jb:value property="firstName" data="csv-set/csv-record/firstName"/>
<jb:value property="isMale" data="csv-set/csv-record/gender"/>
<jb:value property="age" data="csv-set/csv-record/age"/>
<jb:wiring property="aliases" beanRefId="aliases"/>
</jb:bean>
<jb:bean beanId="aliases" class="java.util.ArrayList" createOnElement="???">
<jb:wiring beanRefId="alias"/>
</jb:bean>
<jb:bean beanId="alias" class="java.util.String" createOnElement="???">
???
</jb:bean>
Так где я задыхался в получении createOnElement
правильно настроить для aliases
ArrayList, а также каждого alias
String. Заранее благодарю любого, кто может подтолкнуть меня в правильном направлении!
У вас есть контроль над формат входящего файла? У нас была аналогичная проблема при сглаживании метаданных медиа-активов из XML в текст, разделенный на трубы, где иногда такие поля, как «жанр» или «актер», должны содержать списки. Мы разделили элементы с таким списком другим разделителем. Колон прекрасно работал в нашем случае. – Olaf
Мне нравится подход Олафа больше, чем принятый ответ. – Alfabravo