0

I have few reports which are using the built-in function DAYS(DATE1, DATE2) to calculate number of days between two dates.

My expression is (DAYS(new SimpleDateFormat("dd/MM/yyyy").parse($F{DATE_DEBUT_ABSENCE}),new SimpleDateFormat("dd/MM/yyyy").parse($V{date_fin_sejour}))+1).

It's working well and without error on Jaspersoft studio 6.4.0 but when i try to generate the same report with JasperReports 6.2.0 i have an error:

net.sf.jasperreports.engine.fill.JRExpressionEvalException: Error evaluating expression for source text: DAYS(new SimpleDateFormat("dd/MM/yyyy").parse($F{DATE_DEBUT_ABSENCE_1}),new SimpleDateFormat("dd/MM/yyyy").parse($V{date_de_fin_absence}))+1 
- UUID : D22C5C66-1B4F-4DF4-BD44-1E639D1F5197 
com.mysoftware.core.shared.exception.SysException: net.sf.jasperreports.engine.fill.JRExpressionEvalException: Error evaluating expression for source text: DAYS(new SimpleDateFormat("dd/MM/yyyy").parse($F{DATE_DEBUT_ABSENCE_1}),new SimpleDateFormat("dd/MM/yyyy").parse($V{date_de_fin_absence}))+1 
at sun.reflect.GeneratedConstructorAccessor1706.newInstance(Unknown Source) 
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
at java.lang.reflect.Constructor.newInstance(Constructor.java:526) 
at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamReader.instantiate(ServerSerializationStreamReader.java:1110) 
at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamReader.deserialize(ServerSerializationStreamReader.java:682) 
at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamReader.readObject(ServerSerializationStreamReader.java:592) 
at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamReader$ValueReader$8.readValue(ServerSerializationStreamReader.java:149) 
at com.google.gwt.user.server.rpc.impl.ServerSerializationStreamReader.deserializeValue(ServerSerializationStreamReader.java:434) 
at com.google.gwt.user.server.rpc.RPC.decodeRequest(RPC.java:312) 
at com.mysoftware.core.server.service.RemoteServiceDispatcher.processCall(RemoteServiceDispatcher.java:64) 
at com.google.gwt.user.server.rpc.RemoteServiceServlet.processPost(RemoteServiceServlet.java:373) 
at com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet.doPost(AbstractRemoteServiceServlet.java:62) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:751) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:844) 
at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:280) 
at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:254) 
at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:136) 
at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:341) 
at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:25) 
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:79) 
at com.mysoftware.core.server.servlet.filter.RoutingFilter.doFilter(RoutingFilter.java:93) 
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:79) 
at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99) 
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:79) 
at weblogic.servlet.internal.RequestEventsFilter.doFilter(RequestEventsFilter.java:27) 
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:79) 
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.wrapRun(WebAppServletContext.java:3367) 
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3333) 
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321) 
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120) 
at weblogic.servlet.provider.WlsSubjectHandle.run(WlsSubjectHandle.java:57) 
at weblogic.servlet.internal.WebAppServletContext.doSecuredExecute(WebAppServletContext.java:2220) 
at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2146) 
at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2124) 
at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1564) 
at weblogic.servlet.provider.ContainerSupportProviderImpl$WlsRequestExecutor.run(ContainerSupportProviderImpl.java:254) 
at weblogic.work.ExecuteThread.execute(ExecuteThread.java:295) 
at weblogic.work.ExecuteThread.run(ExecuteThread.java:254)

And the POM.xml

    <dependency>
        <groupId>net.sf.jasperreports</groupId>
        <artifactId>jasperreports</artifactId>
        <version>6.2.0</version>
        <exclusions>
            <exclusion>
                <artifactId>ecj</artifactId>
                <groupId>org.eclipse.jdt.core.compiler</groupId>
            </exclusion>
            <exclusion>
                <groupId>bouncycastle</groupId>
                <artifactId>bcmail-jdk14</artifactId>
            </exclusion>
            <exclusion>
                <groupId>bouncycastle</groupId>
                <artifactId>bcprov-jdk14</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>net.sf.jasperreports</groupId>
        <artifactId>jasperreports-functions</artifactId>
        <version>6.2.0</version>
    </dependency>

I use JAVA as a language for expressions

How that expression can work properly on Jaspersoft Studio and not on JasperReports?

Siick
  • 491
  • 1
  • 7
  • 23
  • 1
    What libs are at classpath? What is a full stack trace? – Alex K Oct 09 '17 at 10:26
  • I have edited the post with full stack trace. For the libs in classpath, you need all the list of libs i'm using @AlexK? – Siick Oct 09 '17 at 12:37
  • Libraries related to using JasperReports. What is the language of report, Groovy? – Alex K Oct 09 '17 at 14:26
  • 1
    Looks like duplicate: [JasperReports: CONCATENATE function not found](https://stackoverflow.com/q/19450214/876298) – Alex K Oct 09 '17 at 14:29
  • I have edited the post with libs. I have also check inside jasperreports-functions-6.2.0.jar and there is a method called DAYS(object, object) inside DateTimeFunctions.class... – Siick Oct 09 '17 at 15:00
  • Add full stack trace, including Caused by ... lines. – dada67 Oct 10 '17 at 07:04
  • Sorry @dada67 but this is the only stack trace i have access. I don't have full access to all environment to see more log – Siick Oct 10 '17 at 07:08
  • I will check the existence of jasperreports functions and joda time libs on production server and i will see if it's the root of the problem. – Siick Oct 11 '17 at 10:02
  • OK, i can't check directly on production server... But i've tried a test. I have made a small simple report with some of DateTime functions which are inside jasperreports-functions libs... And it's pretty weird... NOW(), DAY(), SECOND(), DATEVALUE() are OK and functionnal, but DAYS(), YEARS(), MONTHS() give me the error mentionned here... – Siick Oct 12 '17 at 07:42

1 Answers1

0

Thanks everyone and especially @AlexK who make search about library.

The problem was not the missing of the jasperreports-functions libs but the missing of the joda-time library which is used by jasperreports-functions inside DAYS(), YEARS() and MONTHS() methods. Adding https://github.com/JodaOrg/joda-time/releases/download/v2.9.9/joda-time-2.9.9.jar solved my problem.

Siick
  • 491
  • 1
  • 7
  • 23