0

I'm attempting to write a Jasper Report program in Scala, where the data structure is created dynamically. The data source would be a list of Data objects (see case class below), where each Data object is a list of Strings and Ints.

Each line in the report will have fields such as Data.strings(0), Data.strings(1) and so on.

import scala.collection.JavaConversions._
import java.io.File;
import java.io.IOException;
import java.util.HashMap;

import net.sf.jasperreports.engine._
import net.sf.jasperreports.engine.data._

case class Data (strings: Array[String], ints: Array[Int] )

val str1 = Array("String11", "String12")
val int1 = Array(11,12)
val str2 = Array("String21", "String22")
val int2 = Array(21,22)

val data1 = Data(str1, int1)
val data2 = Data(str2, int2)

val dataSource = new JRBeanArrayDataSource(Array(data1, data2));      

val params = new HashMap[String,String](Map("1"->"one", "2"->"two"))

val jasperPrint = JasperFillManager.fillReport("test1.jasper", params, dataSource);
JasperExportManager.exportReportToPdfFile(jasperPrint, "test1.pdf");

Problem is that the JasperFillManager.fillReport line doesn't compile with the following error, aparently because the list of Data objects is not supported:

◾overloaded method value fillReport with alternatives: (x$1: net.sf.jasperreports.engine.JasperReport,x$2: java.util.Map[String,Object],x$3: net.sf.jasperreports.engine.JRDataSource)net.sf.jasperreports.engine.JasperPrint (x$1: java.io.InputStream,x$2: java.util.Map[String,Object],x$3: net.sf.jasperreports.engine.JRDataSource)net.sf.jasperreports.engine.JasperPrint (x$1: String,x$2: java.util.Map[String,Object],x$3: net.sf.jasperreports.engine.JRDataSource)net.sf.jasperreports.engine.JasperPrint (x$1: net.sf.jasperreports.engine.JasperReport,x$2: java.util.Map[String,Object],x$3: java.sql.Connection)net.sf.jasperreports.engine.JasperPrint (x$1: java.io.InputStream,x$2: java.util.Map[String,Object],x$3: java.sql.Connection)net.sf.jasperreports.engine.JasperPrint (x$1: String,x$2: java.util.Map[String,Object],x$3: java.sql.Connection)net.sf.jasperreports.engine.JasperPrint cannot be applied to (String, java.util.HashMap[Int,String], net.sf.jasperreports.engine.data.JRBeanArrayDataSource)

Any ideas how this can be achieved?

2
  • Can you show your imports, maybe you are not using java.util.HashMap? Commented Aug 10, 2016 at 11:09
  • added the imports, I'm using java.util.HashMap. Also, changed params to HashMap[String,String] and still same error Commented Aug 11, 2016 at 0:50

1 Answer 1

0

This solved the problem: declaring the HashMap as [String,Object] explicitly:

val params = new HashMap[String,Object](Map("1"->"one", "2"->"two"))
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.