15
votes

when we migrated from Oracle JDK-8 to Open JDK-11, Apache POI excel generation has issues

tried already -Djava.awt.headless=true

org.springframework.web.util.NestedServletException: Handler dispatch failed; nested exception is java.lang.NoClassDefFoundError: Could not initialize class sun.awt.X11FontManager
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1053)
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:942)
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:998)
    at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:901)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:660)
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:875)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)```
3
we are using openJDK and cannot go back to oracle JDKPurna

3 Answers

27
votes

If you are using the docker 'slim images' of openjdk, the image no longer includes the packages 'fontconfig', and 'libfreetype6'.

Check the difference in docker file of openjdk:11-slim and the docker file of openjdk:8-slim.

You could either pick another docker image (e.g. openjdk:11-windowsservercore), or install the packages yourself in your docker file:

RUN apt-get update; apt-get install -y fontconfig libfreetype6 
2
votes

The underlying issues is something else

I just created a simple class which does class loading of X11FontManager and when I ran it complained

unable to link "libfreetype6"

once I installed it using

apt-get install libfreetype6

started throwing could not link "libfontconfig1.so"

apt-get install libfontconfig1

that fixed the issue

Read this and understood few things https://medium.com/azulsystems/using-jlink-to-build-java-runtimes-for-non-modular-applications-9568c5e70ef4

0
votes
2021-06-23 03:44:37.950  INFO 1 --- [       Thread-7] ReportService   : Template path : /jasper/MgmtSummary.jrxml
Exception in thread "Thread-7" java.lang.NoClassDefFoundError: Could not initialize class sun.awt.X11FontManager
    at java.base/java.lang.Class.forName0(Native Method)
    at java.base/java.lang.Class.forName(Class.java:398)

I was getting the above error when I was using docker image gcr.io/distroless/java-debian10:11

And this was fixed when I change the image to adoptopenjdk/openjdk11