РЕДАКТИРОВАТЬ: Обновленный ответ после комментариев от OP.
Это не ошибка в BeanIO.У вас есть два варианта идентификации записи.Во-первых, у вас есть атрибут literal
, который вы использовали до сих пор.Во-вторых, вы также можете использовать регулярное выражение (regex
) для идентификации записей с.
Вы хотите сопоставить объект Animal
, когда поле type
не кошка или собака, или как вы указали, когдаэто пустая строка / объект.
Ваше определение поля type
может быть одним из двух для записи Animal
.
<field name="type" rid="true" regex="\s*" />
Здесь оно будет соответствовать всякий раз, когда поле типа содержитпробелы, определенные в регулярных выражениях Java.
ИЛИ
<field name="type" rid="true" regex=""^(?:(?!\b(cat|dog)\b).)*$" />
Это будет соответствовать любой записи, где поле type
не содержит слов cat
или dog
.
Попробуйте это с этой записью Animal:
<record name="animal" class="zoo.Animal" >
<field name="color" />
<field name="type" rid="true" regex=""^(?:(?!\b(cat|dog)\b).)*$" />
<field name="legs"/>
</record>
Не по теме .Технически вы не читаете файл CSV
, потому что тогда ваш разделитель должен быть запятой.Вместо этого у вас есть формат с разделителями, в котором в качестве разделителя используется точка с запятой (;).
Я бы также предложил сделать имена определений ваших записей уникальными в файле сопоставления xml.Имя записи используется в сообщениях об ошибках для сообщения о местонахождении проблемы.Если у вас одинаковое имя для всех записей, вы не будете знать, где искать проблему.