Jasper Reports
January 14, 2022

Jasper Reports: The method LEN() is undefined for the type...

Поймали вот такую ошибку при попытке построения отчётов через библиотеку Jasper Reports:

Caused by: net.sf.jasperreports.engine.JRException: Errors were encountered when compiling report expressions class file:
1. The method LEN(String) is undefined for the type MemberReport_1642148363598_325885
                value = new Boolean(LEN(((java.lang.String)parameter_stats.getValue())) > 0); //$JR_EXPR_ID=65$
                                    <->
2. The method LEN(String) is undefined for the type MemberReport_1642148363598_325885
                value = new Boolean(LEN(((java.lang.String)parameter_stats.getValue())) > 0); //$JR_EXPR_ID=65$
                                    <->
3. The method LEN(String) is undefined for the type MemberReport_1642148363598_325885
                value = new Boolean(LEN(((java.lang.String)parameter_stats.getValue())) > 0); //$JR_EXPR_ID=65$
                                    <->
3 errors
.
	at net.sf.jasperreports.engine.design.JRAbstractCompiler.compileReport(JRAbstractCompiler.java:206)
	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.compileToStream(JasperCompileManager.java:309)
	at net.sf.jasperreports.engine.JasperCompileManager.compileReportToStream(JasperCompileManager.java:587)
	at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
	at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:771)

При этом через Jaspersoft Studio шаблон компилировался без ошибок.

Место в коде:

<reportElement positionType="Float" mode="Transparent" x="0" y="18" width="555" height="22" isRemoveLineWhenBlank="true" backcolor="#FFFFFF" uuid="65afa82a-5c2f-4da0-afd7-08da341ba544">
	<property name="com.jaspersoft.studio.element.name" value="FrameBlock3"/>
	<property name="com.jaspersoft.studio.unit.y" value="px"/>
	<property name="com.jaspersoft.studio.unit.height" value="px"/>
	<printWhenExpression><![CDATA[new Boolean(LEN($P{stats}) > 0)]]></printWhenExpression>
</reportElement>ment>

В ходе поиска аналогичных ошибок было установлено, что не хватает библиотеки Jasper для работы со вспомогательными функциями — jasperreports-functions.

<dependency>
    <groupId>net.sf.jasperreports</groupId>
    <artifactId>jasperreports-functions</artifactId>
    <version>6.18.1</version>
</dependency>

Добавили последнюю на текущий день версию (14.01.2022), перезапустили, всё заработало!

И небольшой кусочек pom.xml со списком всех библиотек, которые находятся в нашем проекте (для справки).

<dependency>
    <groupId>net.sf.jasperreports</groupId>
    <artifactId>jasperreports</artifactId>
    <version>6.6.0</version>
</dependency>
<dependency>
    <groupId>net.sf.jasperreports</groupId>
    <artifactId>jasperreports-fonts</artifactId>
    <version>6.0.0</version>
</dependency>
<dependency>
    <groupId>com.jaspersoft</groupId>
    <artifactId>jrs-rest-java-client</artifactId>
    <version>6.3.1</version>
</dependency>
<dependency>
    <groupId>net.sf.jasperreports</groupId>
    <artifactId>jasperreports-functions</artifactId>
    <version>6.18.1</version>
</dependency>