Search code examples
javaplayframeworkjasper-reportsrhinonosuchmethoderror

Exception when compiling JasperReport with javascript language


I'm trying to compile a JasperDesign to create a report programmatically. Since I need to include a Conditional Style in Javascript, I set the JasperDesign language accordingly:

val jasperDesign = new JasperDesign
jasperDesign.setLanguage("javascript")

Note that I'm using Scala 2.11 on Java 8, running on Play for Scala 2.5

Since JasperReports 6.4.3 (the version I'm using) has a dependency on rhino 1.7.6, I added it to the classpath:

libraryDependencies += "org.mozilla" % "rhino" % "1.7.6"

The problem is that whenever I compile the JasperDesign I get an exception. This happens even when I don't include a Javascript Conditional Style:

java.lang.NoSuchMethodError: org.mozilla.javascript.ContextFactory.enterContext()Lorg/mozilla/javascript/Context; at net.sf.jasperreports.compilers.JavaScriptClassCompiler.compileUnits(JavaScriptClassCompiler.java:124) at net.sf.jasperreports.engine.design.JRAbstractCompiler.compileReport(JRAbstractCompiler.java:203) at net.sf.jasperreports.engine.JasperCompileManager.compile(JasperCompileManager.java:357) at net.sf.jasperreports.engine.JasperCompileManager.compileToStream(JasperCompileManager.java:326) at net.sf.jasperreports.engine.JasperCompileManager.compileReportToStream(JasperCompileManager.java:599)

If I remove jasperDesign.setLanguage("javascript") I have no compilation errors. What is missing here? Is there a conflict between Nashorn and Rhino?


Solution

  • My solution was to take the rhino 1.7.6 jar and manually put it in the application lib folder. Play loaded it from there with no issues.