Using YARG in standalone Java swing application

Is it possible use o yarg report engine to generate report in non-CUBA java swing application?

I have downloaded jar file of yarg API but and trying the following code from my swing application developed in Netbeans. Now stuck with datasource. I have database connection (standard java API) but looks like I can’t pass that as parameter to SqlDataLoader. Thanks for any help.


  try {
            ReportBuilder reportBuilder = new ReportBuilder();
            ReportTemplateBuilder reportTemplateBuilder = new ReportTemplateBuilder()
                    .documentPath("/reports/templates/dataMatrixReportTemplate.docx")
                    .documentName("dataMatrixReportTemplate.docx")
                    .outputType(ReportOutputType.docx)
                    .readFileFromPath();
            reportBuilder.template(reportTemplateBuilder.build());
            BandBuilder bandBuilder = new BandBuilder();
            ReportBand serial = bandBuilder.name("IcGrnSerial")
                    .query("IcGrnSerial", "select ProdId, SerialNumber, BarCodeImage from IcGrnSerial", "sql")
                    .build();
            reportBuilder.band(serial);
            Report report = reportBuilder.build();

            Reporting reporting = new Reporting();
            reporting.setFormatterFactory(new DefaultFormatterFactory());
            reporting.setLoaderFactory(
                    new DefaultLoaderFactory().setSqlDataLoader(new SqlDataLoader(datasource)));

            ReportOutputDocument reportOutputDocument = reporting.runReport(
                    new RunParams(report), new FileOutputStream("/reports/out/dataMatrixReportTemplate.docx"));

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

dataMatrixReportTemplate.docx (12.7K)

Hello.

You should create (for instance) the org.apache.commons.dbcp.BasicDataSource instead of simple connection.

Please see the article, it shows how to create the datasource.

Hi Eugene
Thanks. I followed that link but now having a strange null pointer exception:

My code to get the BbasicDatasource is as follows:


   public BasicDataSource getBasicDataSource() {
        try {
            //finding driver
            //JTds Driver
            Class.forName("net.sourceforge.jtds.jdbc.Driver");
System.out.println("place A");
        } catch (java.lang.ClassNotFoundException ec) {
            JOptionPane.showMessageDialog(null, "Could not find Driver");
            ec.printStackTrace();
            //return;
        }
        basicDataSource.setDriverClassName("net.sourceforge.jtds.jdbc.Driver");
        System.out.println("place 1" + basicDataSource);
        basicDataSource.setUrl("jdbc:jtds:sqlserver://" + server + ":1433/" + dbname + "");
        System.out.println("place 2" + basicDataSource);
        basicDataSource.setUsername(sysUser);
        basicDataSource.setPassword(sysPass);
        return basicDataSource;
    }

When I call the above method, I see the driver is detected with no problem but getting exception here in above code:


 basicDataSource.setDriverClassName("net.sourceforge.jtds.jdbc.Driver");

here is the exception


java.lang.NullPointerException
	at com.myapp.lib.SaConnect.getBasicDataSource(SaConnect.java:317)
	at com.myapp.ic.IcGoodsIssueDO.printBarCode2(IcGoodsIssueDO.java:3114)
	at com.myapp.ic.IcGoodsIssueDO.jButton6ActionPerformed(IcGoodsIssueDO.java:1673)
	at com.myapp.ic.IcGoodsIssueDO.access$1700(IcGoodsIssueDO.java:85)
	at com.myapp.ic.IcGoodsIssueDO$18.actionPerformed(IcGoodsIssueDO.java:897)
	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2346)
	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
	at java.awt.Component.processMouseEvent(Component.java:6525)
	at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
	at java.awt.Component.processEvent(Component.java:6290)
	at java.awt.Container.processEvent(Container.java:2234)
	at java.awt.Component.dispatchEventImpl(Component.java:4881)
	at java.awt.Container.dispatchEventImpl(Container.java:2292)
	at java.awt.Component.dispatchEvent(Component.java:4703)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4898)
	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4533)
	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4462)
	at java.awt.Container.dispatchEventImpl(Container.java:2278)
	at java.awt.Window.dispatchEventImpl(Window.java:2739)
	at java.awt.Component.dispatchEvent(Component.java:4703)
	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:746)
	at java.awt.EventQueue.access$400(EventQueue.java:97)
	at java.awt.EventQueue$3.run(EventQueue.java:697)
	at java.awt.EventQueue$3.run(EventQueue.java:691)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:86)
	at java.awt.EventQueue$4.run(EventQueue.java:719)
	at java.awt.EventQueue$4.run(EventQueue.java:717)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:716)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

Hi
I found the problem of the above exception. It was version conflicts of commons library.

However, now getting the follow errors that relates to the main library:


Exception in thread "AWT-EventQueue-0" java.lang.NoClassDefFoundError: com/google/common/base/Preconditions
	at com.haulmont.yarg.structure.impl.ReportBandImpl.validate(ReportBandImpl.java:70)
	at com.haulmont.yarg.structure.impl.ReportBandImpl.<init>(ReportBandImpl.java:54)
	at com.haulmont.yarg.structure.impl.ReportBandImpl.<init>(ReportBandImpl.java:62)
	at com.haulmont.yarg.structure.impl.ReportBuilder.createRootBand(ReportBuilder.java:76)
	at com.haulmont.yarg.structure.impl.ReportBuilder.<init>(ReportBuilder.java:27)
	at com.inteacc.ic.IcGoodsIssueDO.printBarCode2(IcGoodsIssueDO.java:3116)

Which jar file is this exactly?

Hello.

Could you please provide you Maven/Gradle file, to check the dependencies? The library should be loaded transitive with the yarg.jar artifact.