tTEACHER1sSTUDENT1mMATTER1 MATTER2 MATTER3 sSTUDENT2mMATTER1 MATTER2 MATTER3 MATTER4 sSTUDENT3mMATTER1 MATTER2 MATTER3 MATTER4 MATTER5 tTEACHER2sSTUDENT1mMATTER1 MATTER2 MATTER3 MATTER4 MATTER5sSTUDENT2mMATTER1 MATTER2 MATTER3 MATTER5sSTUDENT3mMATTER1 MATTER2 MATTER3
public class Teacher {
private String header; private String name; private List<Student> students;
public class Student {
private String name; private Agenda agenda; } public class Agenda { private String specialCode; private List<Matter> matters; } public class Matter { private String name; private String speciality; }}
<stream name="IRG" format="fixedlength"> <group name="teacher" order="2" minOccurs="1" maxOccurs="unbounded" class="test.Teacher"> <record name="teacher" minOccurs="1" maxOccurs="1" order="1"> <field name="header" at="0" length="1" required="true" rid="true" literal="t" ignore="true" /> <field name="name" at="1" length="1" minOccurs="0" required="false" lazy="true" /> </record> <record name="students" order="2" minOccurs="1" maxOccurs="9" collection="list" class="test.Student"> <field name="header" at="0" length="1" required="true" rid="true" literal="s" ignore="true" /> <field name="name" at="1" length="1" minOccurs="0" required="false" lazy="true" /> <segment name="agenda" class="test.Agenda"> <field name="header" at="0" length="1" required="true" rid="true" literal="m" ignore="true" /> <field name="specialCode" at="1" length="10" required="false" lazy="true" trim="false" keepPadding="true" /> <segment name="matters" collection="list" minOccurs="1" maxOccurs="unbounded" class="test.Matter"> <field name="name" at="0" length="3" required="false" lazy="true" /> <field name="speciality" at="3" length="4" required="false" lazy="true" /> </segment> </segment> </record> </group></stream>package example;
import java.util.Date;
public class Order {
String id;
Date date;
BigDecimal amount;
Customer customer;
List<Item> items;
}
public class Customer {
String firstName;
String lastName;
}
public class Item {
String name;
int quantity;
BigDecimal amount;
}package example;
import java.util.Date;
public class Order {
String id;
Date date;
BigDecimal amount;
Customer customer;
}
public class Customer {
String firstName;
List<Item> items;
}
public class Item {
String name;
int quantity;
BigDecimal amount;
}tTEACHER1sSTUDENT1mMATTER1 MATTER2 MATTER3 sSTUDENT2mMATTER1 MATTER2 MATTER3 MATTER4 sSTUDENT3mMATTER1 MATTER2 MATTER3 MATTER4 MATTER5 tTEACHER2sSTUDENT1sSTUDENT2
sSTUDENT3mMATTER1 MATTER2 MATTER3 MATTER4 MATTER5
--
You received this message because you are subscribed to the Google Groups "beanio-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to beanio+un...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
<field name="header" at="0" length="1" required="true" rid="true" literal="m" ignore="true" />
<field name="specialCode" at="1" length="10" required="false" lazy="true" trim="false" keepPadding="true" />
<segment name="matters" collection="list" minOccurs="1" maxOccurs="unbounded" class="test.Matter">
tTEACHER1
sSTUDENT1
mClass4 MATTER1 MATTER2
sSTUDENT2
mClass4 MATTER1 MATTER2 MATTER3 MATTER4
sSTUDENT3
mClass4 MATTER1 MATTER2 MATTER3 MATTER4 MATTER5
tTEACHER2
sSTUDENT1
sSTUDENT2
sSTUDENT3
mClass4 MATTER1 MATTER2 MATTER3 MATTER4 MATTER5package test;
import java.util.List;
public class TeacherModel {
private String header;
private String name;
private List<StudentModel> students;
}
package test;
import java.util.List;
public class StudentModel {
private String header;
private String name;
private AgendaModel agenda;
}
package test;
import java.util.List;
public class AgendaModel{
private String header;
private String specialClass;
private List<MatterModel> matters;
}
package test;
public class MatterModel{
private String name;
} <?xml version='1.0' encoding='UTF-8' ?>
<beanio xmlns="http://www.beanio.org/2012/03" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.beanio.org/2012/03 http://www.beanio.org/2012/03/mapping.xsd">
<stream name="TEST" format="fixedlength">
<group name="teacherModel" order="2" minOccurs="1" maxOccurs="unbounded"
class="test.TeacherModel">
<record name="teacherModel" minOccurs="1" maxOccurs="1" order="1">
<field name="header" at="0" length="1" required="true" rid="true"
literal="t" ignore="true" />
<field name="name" at="1" length="8" required="false" lazy="true" />
</record>
<record name="students" order="2" minOccurs="1" maxOccurs="9" collection="list" class="test.StudentModel">
<field name="header" at="0" length="1" required="true" rid="true"
literal="s" ignore="true" />
<field name="name" at="1" length="8" minOccurs="0"
required="false" lazy="true" />
<segment name="agenda" class="test.AgendaModel">
<field name="header" at="0" length="1" required="true" rid="true"
literal="m" ignore="true" />
<field name="specialClass" at="1" length="6" required="false"
lazy="true" trim="false" keepPadding="true" />
<segment name="matters" collection="list" minOccurs="1" maxOccurs="unbounded" class="test.MatterModel">
<field name="name" at="0" length="7" required="false"
lazy="true" />
</segment>
</segment>
</record>
</group>
</stream>
</beanio>java.lang.IndexOutOfBoundsException
at org.beanio.internal.parser.UnmarshallingContext.getRecordContext(UnmarshallingContext.java:230)
at org.beanio.internal.parser.BeanReaderImpl.getRecordContext(BeanReaderImpl.java:279)
at com.afklm.astrid.beanio.TestFile.testRecordGroup(TestFile.java:30)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)<?xml version='1.0' encoding='UTF-8' ?>
<beanio xmlns="http://www.beanio.org/2012/03" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.beanio.org/2012/03 http://www.beanio.org/2012/03/mapping.xsd">
<stream name="TEST" format="fixedlength">
<group name="FILE" maxOccurs="1" class="test.TeacherFile">
<group name="teachers" minOccurs="1" maxOccurs="unbounded" collection="list" class="test.TeacherModel">
<record name="teacherModel" minOccurs="1" maxOccurs="1" >
<field name="header" at="0" length="1" rid="true" literal="t" ignore="true" />
<field name="name" at="1" length="8" required="false" lazy="true" />
</record>
<group name="students" minOccurs="1" maxOccurs="9" collection="list" class="test.StudentModel">
<record name="student">
<field name="header" at="0" length="1" required="true" rid="true" literal="s" ignore="true" />
<field name="name" at="1" length="8" minOccurs="0" required="false" lazy="true" />
</record>
<record name="agenda" class="test.AgendaModel" maxOccurs="1">
<field name="header" at="0" length="1" required="true" rid="true" literal="m" ignore="true" />
<field name="specialClass" at="1" length="6" required="false" lazy="true" trim="false" keepPadding="true" />
<segment name="matters" collection="list" minOccurs="1" maxOccurs="unbounded" class="test.MatterModel">
<field name="name" at="7" length="7" required="false" lazy="true" />
</segment>
</record>
</group>
</group>
</group>
</stream>
</beanio>
<segment name="matters" collection="list" minOccurs="1" maxOccurs="unbounded" class="com.afklm.astrid.beanio.antho.MatterModel"> <field name="name" at="7" length="6" required="false" lazy="true" /> <field name="number" at="13" length="1" default=""/> </segment><segment name="matters" collection="list" minOccurs="1" maxOccurs="unbounded" class="com.afklm.astrid.beanio.antho.MatterModel"> <field name="name" at="7" length="6" required="false" lazy="true" /> <field name="number" at="13" length="1" nillable="true"/> </segment><field name="number" at="13" length="1" required="false"/>works fine for me, whether the number is null or have an actual value, the extra character is catered for in the output.
tTEACHER1sSTUDENT1mClass4MATTER MATTER sSTUDENT2mClass4MATTER MATTER MATTER MATTER sSTUDENT3mClass4MATTER1MATTER2MATTER3MATTER4MATTER5tTEACHER2sSTUDENT1sSTUDENT2sSTUDENT3mClass4MATTER1MATTER2MATTER3MATTER4MATTER5tTEACHER1sSTUDENT1mClass4MATTER MATTER sSTUDENT2mClass4MATTER MATTER MATTER MATTER sSTUDENT3mClass4MATTER1MATTER2MATTER3MATTER4MATTER5tTEACHER2sSTUDENT1sSTUDENT2sSTUDENT3mClass4MATTER MATTER MATTER MATTER MATTER