1) you must create getter and setter method, and a static method tha give you data I´m not compile my code 2) in iReport in ReportDatasources new JavaBeans set DataSources... 3) in options/classpath add the path of the complied classes 4) run report and subreport with preview that´s all Code:public class Person { private String name; private String address; private List<Phone> phoneNumbers;// getters// setters// method that return data public static Collection giveMeData(){ Collection<Person> myPersonCollection = new ArrayList<Person>(); myPersonCollection.add(new Person("John","Street in somewhere",Phone.giveMeData())); myPersonCollection.add(new Person("John","Street in somewhere",Phone.giveMeData())); myPersonCollection.add(new Person("John","Street in somewhere",Phone.giveMeData())); return myPersonCollection;}}public class Phone { private String number; private String name; // ie \'Home\', \'Work\', \'Cell\', etc// getters// setters// method that return data public static Collection giveMeData(){ Collection<Phone> myPhoneCollection = new ArrayList<Phone >(); myPhoneCollection .add(new Phone(54245848, "home")); myPhoneCollection .add(new Phone(46846486, "work")); myPhoneCollection .add(new Phone(63546641, "car")); myPhoneCollection .add(new Phone(54544885, "summer")); return myPhoneCollection; }}