BeanIO - слишком мало полей, ожидается минимум 8, почему?

Я использую BeanIO 1.2 в java, и вот мое сопоставление:

  <stream name="RecordImport" format="delimited">
    <record name="Record" minOccurs="1" maxOccurs="unbounded" class="com.myclasses.Record">
      <field name="date" type="date" format="MM/dd/yyyy" trim="true"/>
      <field name="user" type="string" trim="true"/>
      <field name="storage" type="string" trim="true"/>
      <field name="product" type="string" trim="true"/>
      <field name="qty" type="bigdecimal" format="#,##0" trim="true"/>
      <field name="altQty1" type="bigdecimal" format="#,##0" trim="true"/>
      <field name="altQty2" type="bigdecimal" format="#,##0" trim="true"/>
      <field name="altQty3" type="bigdecimal" format="#,##0" trim="true"/>
    </record>
  </stream>

и мой текстовый файл выглядит так:

3/11/2012   lpq 200011  RDD1006 8           
3/11/2012   lpq 200011  RDD1006 8           
3/11/2012   lpq 200011  RDD1006 8   1   2   3
3/11/2012   lpq 200011  RDD1006 8           

В результате я получаю это сообщение:

"- Line 4: Too few fields, expected 8 minimum."

Теперь это странно, потому что у меня есть вкладки, указывающие на то, что в четвертой строке есть 8 полей. Кажется, это происходит из-за того, что последние поля дерева в 4-й строке равны нулю. Мне нужна возможность, чтобы они были нулевыми, но чтобы это сообщение не поднималось. Что еще странно, так это то, что это происходит только для 4-й строки, а не для 1-й или 2-й.

Любые идеи?


person goe    schedule 18.10.2012    source источник
comment
Можете ли вы попробовать добавить minOccurs="0" к необязательным объявлениям <field>? См. также: beanio.org/2.0/docs/reference/index.html #NullFields   -  person Tomasz Nurkiewicz    schedule 18.10.2012
comment
Обязательно ли использовать вкладки? Вы можете использовать запятые в вашем файле? Это было бы более явно   -  person Brian Agnew    schedule 18.10.2012
comment
@Tomasz Nurkiewicz Когда я добавил minOccurs=0 в свои необязательные поля, я получил это исключение: minOccurs должен быть равен 1 или должен быть установлен тип коллекции полей.   -  person goe    schedule 18.10.2012
comment
У кого-нибудь есть другие идеи?   -  person goe    schedule 18.10.2012
comment
в строке 4 есть терминатор записи?   -  person kem    schedule 19.10.2012


Ответы (1)


Я не смог воссоздать проблему, которую вы видите (используя BeanIO 1.2.5), не удалив одно из конечных полей/вкладок. Если они действительно необязательны, вы можете установить minLength="5" в определении записи. BeanIO 2.x немного более гибок и вместо этого позволит вам установить minOccurs="0" для завершающих необязательных полей...

Удачи!

person Kevin    schedule 20.10.2012