Gettting Error getting field value from bean Exception with JasperReports API

I am trying to get a sample report generated by JasperReports, but it throws some kind of exception that I cannot understand.

I have a bean:

class DataBean { public String country; public String name; public String getCountry() { return country; } public void setCountry(String country) { this.country = country; } public String getName() { return name; } public void setName(String name) { this.name = name; } } 

The class that lists the above bean:

 class DataBeanList { public ArrayList<DataBean> getDataBeanList() { ArrayList<DataBean> dataBeanList = new ArrayList<DataBean>(); dataBeanList.add(produce("Manisha", "India")); dataBeanList.add(produce("Dennis Ritchie", "USA")); dataBeanList.add(produce("V.Anand", "India")); dataBeanList.add(produce("Shrinath", "California")); return dataBeanList; } private DataBean produce(String name, String country) { DataBean dataBean = new DataBean(); dataBean.setName(name); dataBean.setCountry(country); return dataBean; } } 

Here is how I do it:

 public static void main(String[] args) throws Exception { String sourceFileName = "/home/oodles/Samples/jasper_report_template.jasper"; DataBeanList DataBeanList = new DataBeanList(); ArrayList<DataBean> dataList = DataBeanList.getDataBeanList(); System.out.println("<<<" + dataList.get(0).getCountry()); JasperReportBuilder report = DynamicReports.report(); JRBeanCollectionDataSource beanColDataSource = new JRBeanCollectionDataSource(dataList, false); report.setDataSource(beanColDataSource); Map parameters = new HashMap(); try { JasperFillManager.fillReportToFile(sourceFileName, parameters, beanColDataSource); } catch (JRException e) { e.printStackTrace(); } } 

An exception:

  net.sf.jasperreports.engine.JRException: Error retrieving field value from bean : country at net.sf.jasperreports.engine.data.JRAbstractBeanDataSource.getBeanProperty(JRAbstractBeanDataSource.java:123) at net.sf.jasperreports.engine.data.JRAbstractBeanDataSource.getFieldValue(JRAbstractBeanDataSource.java:96) at net.sf.jasperreports.engine.data.JRBeanCollectionDataSource.getFieldValue(JRBeanCollectionDataSource.java:100) at net.sf.jasperreports.engine.fill.JRFillDataset.setOldValues(JRFillDataset.java:1331) at net.sf.jasperreports.engine.fill.JRFillDataset.next(JRFillDataset.java:1232) at net.sf.jasperreports.engine.fill.JRFillDataset.next(JRFillDataset.java:1208) at net.sf.jasperreports.engine.fill.JRBaseFiller.next(JRBaseFiller.java:1554) at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReport(JRVerticalFiller.java:149) at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:909) at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:841) at net.sf.jasperreports.engine.fill.JRFiller.fill(JRFiller.java:88) at net.sf.jasperreports.engine.JasperFillManager.fill(JasperFillManager.java:653) at net.sf.jasperreports.engine.JasperFillManager.fillToFile(JasperFillManager.java:542) at net.sf.jasperreports.engine.JasperFillManager.fillToFile(JasperFillManager.java:494) at net.sf.jasperreports.engine.JasperFillManager.fillReportToFile(JasperFillManager.java:874) at com.general.ReportsMain.main(ReportsMain.java:80) Caused by: java.lang.NoSuchMethodException: Property 'country' has no getter method in class 'class com.general.DataBean' at org.apache.commons.beanutils.PropertyUtilsBean.getSimpleProperty(PropertyUtilsBean.java:1318) at org.apache.commons.beanutils.PropertyUtilsBean.getNestedProperty(PropertyUtilsBean.java:762) at org.apache.commons.beanutils.PropertyUtilsBean.getProperty(PropertyUtilsBean.java:837) at org.apache.commons.beanutils.PropertyUtils.getProperty(PropertyUtils.java:426) at net.sf.jasperreports.engine.data.JRAbstractBeanDataSource.getBeanProperty(JRAbstractBeanDataSource.java:111) ... 15 more 

If you need a .jasper file:
I am attaching only the fields to show only the meaningful code here:

 <field name="country" class="java.lang.String"> <fieldDescription><![CDATA[country]]></fieldDescription> </field> <field name="name" class="java.lang.String"> <fieldDescription><![CDATA[name]]></fieldDescription> </field> 
+6
source share
1 answer

Finally, I figured out what you need to do to avoid any exceptions:

Your data source is available in other packages to extract data from it, and if the bean of your data source is not public, then access to the class is not possible.
So you have to make your class public (bean class).

+11
source

All Articles