Mam kod który generuje mi z jednego beana jego zawartość do PDFa.
Teraz chcę wydrukować beana który zawiera inne beany. Znalazłem informację, iż robi się to z wykorzystaniem subreportów. Czyli główny bean to główny raport, a beany zawarte w głównych są drukowane w subreportach.

Szablony tworzę w jasper Studio.

  1. Jak stworzyć subreport do głównego raportu ?

W tym momencie w Jasper Studio dodaję subreport na którym dodaję pole które chcę wydrukować z zagnieżdzonego beana.
W głównym raporcie wskazuję atrybut z encji który przechowuję listę zagnieżdzonych beanów.
<field name="policyHolder" class="java.util.List" />

BŁĄD Z Konsoli to:
net.sf.jasperreports.engine.JRException: Resource not found at : TestPolisaSub.jasper

Wnioskuję, że mam błędnie połączony RAPORT główny z subreportem.

Proszę o pomoc / wskazówki.

public class PrinterDataFromJasper {



    private String JASPER_MASTER_TEMPLATE_FILE_JASPER = "/home/pawel/JaspersoftWorkspace/Polisy/TestPolisa.jasper";
    private String JASPER_SUB_TEMPLATE_FILE_JASPER = "/home/pawel/JaspersoftWorkspace/Polisy/TestPolisaSub.jasper";
    public String CREATED_PDF_DEST_FOLDER_NAME = "/home/pawel/Pulpit/Dokumenty123-Test/Polisy";
    public String CREATED_PDF_DEST_FILE_NAME = "/home/pawel/Pulpit/Dokumenty123-Test/Polisy/TestPolisa.pdf";

    public static void main(String[] args) throws JRException {
        PrinterDataFromJasper main = new PrinterDataFromJasper();
        main.start();
    }

    public PrinterDataFromJasper() throws JRException {
    }

    private void start() {
        try {
            File jasperMasterTemplateFile = new File(JASPER_MASTER_TEMPLATE_FILE_JASPER);
            FileInputStream jasperMasterTemplateStream = null;
            try {
                jasperMasterTemplateStream = new FileInputStream(jasperMasterTemplateFile);
            } catch (FileNotFoundException e) {
                System.out.println("Failed load master file");
            }
            BufferedInputStream jasperMasterbufferedInputStream = new BufferedInputStream(jasperMasterTemplateStream);

            File jasperSubTemplateFile = new File(JASPER_SUB_TEMPLATE_FILE_JASPER);
            FileInputStream jasperSubTemplateStream = null;
            try {
                jasperSubTemplateStream = new FileInputStream(jasperSubTemplateFile);
            } catch (FileNotFoundException e) {
                System.out.println("Faild to load sub report file");
            }
            BufferedInputStream jasperSubbufferedInputStream = new BufferedInputStream(jasperSubTemplateStream);

            // load jasperMaster file with .jasper format
            JasperReport jasperMasterReport = (JasperReport) JRLoader.loadObject(jasperMasterbufferedInputStream);
            // load jasperSub file with .jasper format
            JasperReport jasperSubReport = (JasperReport) JRLoader.loadObject(jasperSubbufferedInputStream);



            List<Insurance> beanList = generateCollection();
            JRBeanCollectionDataSource beanColDataSource = new JRBeanCollectionDataSource(beanList);

            Map<String, Object> parameters = new HashMap<String, Object>();
            parameters.put("subreportParameter", jasperSubReport);



            JasperPrint jasperPrint = JasperFillManager.fillReport(jasperMasterReport, new HashMap(), beanColDataSource);


            // Make sure the output directory exists.
            File outDir = new File(CREATED_PDF_DEST_FOLDER_NAME);
            outDir.mkdirs();

            // Export to PDF.
            JasperExportManager.exportReportToPdfFile(jasperPrint,
                    CREATED_PDF_DEST_FILE_NAME);

            System.out.println("Done!");

        } catch (JRException e) {
            e.printStackTrace();
        }
    }


    private String getRandomString() {
        return UUID.randomUUID().toString();
    }

    private static List<Insurance> generateCollection() {
        List<Insurance> insuranceList = new ArrayList<Insurance>();
        Insurance insurance = new Insurance();
        insurance.setInsuranceNumber(INSURANCE_NUMBER);
        insurance.setInsuranceDateFROM(INSURANCE_DATE_FROM);
        insurance.setInsuranceDateTO(INSURANCE_DATE_TO);

        List<PolicyHolder> policyHolderList = new ArrayList<PolicyHolder>();
        PolicyHolder policyHolder = new PolicyHolder();
        policyHolder.setName("Jan");
        policyHolder.setSurname("Nowak");
        policyHolder.setPesel("76042512345");
        policyHolder.setZipCode("00-915");
        policyHolder.setCity("Warszawa");
        policyHolder.setStreet("Woronicza");
        policyHolder.setStreetNumber("17");

        policyHolder.setNameAndSurname("lallaa");
        policyHolder.setAddress("bebebeebebe");


        policyHolderList.add(policyHolder);

        System.out.println(policyHolder.getAddress());
        System.out.println(policyHolder.getNameAndSurname());

        insurance.setPolicyHolder(policyHolderList);

        insuranceList.add(insurance);
        return insuranceList ;
    }

    public static final String INSURANCE_NUMBER = "Polisa / Policy 0012545584223";
    public static final String INSURANCE_DATE_FROM = "2015.09.02. 00:00";
    public static final String INSURANCE_DATE_TO = "2015.09.09. 24:00";

}
 

SZABLON GŁÓWNY JASPERA

<?xml version="1.0" encoding="UTF-8"?>
<!-- Created with Jaspersoft Studio version 6.2.0.final using JasperReports Library version 6.2.0  -->
<!-- 2016-02-19T15:24:51 -->
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="TestPolisa" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="0c6d921a-7bfe-480d-b7be-3cabdad53ea4">
	<queryString>
		<![CDATA[]]>
	</queryString>
	<field name="insuranceDateTO" class="java.lang.String"/>
	<field name="insuranceNumber" class="java.lang.String"/>
	<field name="policyHolder" class="java.util.List"/>
	<background>
		<band splitType="Stretch"/>
	</background>
	<detail>
		<band height="453" splitType="Stretch">
			<textField>
				<reportElement x="0" y="80" width="100" height="30" uuid="89bd128f-77a4-440f-9be0-859ea53bd9a3"/>
				<textFieldExpression><![CDATA[$F{insuranceDateTO}]]></textFieldExpression>
			</textField>
			<staticText>
				<reportElement x="0" y="47" width="100" height="30" uuid="1a16c8a1-1d1e-41cc-8333-dc1d4a2bb40a"/>
				<text><![CDATA[Some simple text]]></text>
			</staticText>
			<textField>
				<reportElement x="160" y="0" width="240" height="40" uuid="d5883993-9e67-4a40-873b-2db14af402b2"/>
				<textElement textAlignment="Center">
					<font size="12" isBold="true"/>
				</textElement>
				<textFieldExpression><![CDATA[$F{insuranceNumber}]]></textFieldExpression>
			</textField>
			<subreport>
				<reportElement x="3" y="180" width="549" height="169" uuid="2cff0a97-9d13-40fa-8161-a58cff22fa2a"/>
				<connectionExpression><![CDATA[$P{REPORT_CONNECTION}]]></connectionExpression>
				<subreportExpression><![CDATA["TestPolisaSub.jasper"]]></subreportExpression>
			</subreport>
		</band>
	</detail>
</jasperReport>