mmajis / plantuml-serverless

Serverless PlantUML diagram rendering
GNU General Public License v3.0
48 stars 22 forks source link

Java 11 Blocker: Fonts not present in lambda runtime #10

Closed mmajis closed 3 years ago

mmajis commented 4 years ago

Fonts are not included in the Amazon Corretto Java 11 runtime environment.

This happens:

java.lang.InternalError: java.lang.reflect.InvocationTargetException
at java.desktop/sun.font.FontManagerFactory$1.run(Unknown Source)
at java.base/java.security.AccessController.doPrivileged(Native Method)
at java.desktop/sun.font.FontManagerFactory.getInstance(Unknown Source)
at java.desktop/sun.java2d.SunGraphicsEnvironment.getFontManagerForSGE(Unknown Source)
at java.desktop/sun.java2d.SunGraphicsEnvironment.getAvailableFontFamilyNames(Unknown Source)
at java.desktop/sun.java2d.SunGraphicsEnvironment.getAvailableFontFamilyNames(Unknown Source)
at java.desktop/sun.java2d.HeadlessGraphicsEnvironment.getAvailableFontFamilyNames(Unknown Source)
at net.sourceforge.plantuml.ugraphic.UFont.<clinit>(UFont.java:60)
at net.sourceforge.plantuml.SkinParam.getFont(SkinParam.java:464)
at net.sourceforge.plantuml.SkinParamDelegator.getFont(SkinParamDelegator.java:83)
at net.sourceforge.plantuml.skin.rose.Rose.createComponent(Rose.java:95)
at net.sourceforge.plantuml.sequencediagram.graphic.DrawableSetInitializer.prepareParticipant(DrawableSetInitializer.java:626)
at net.sourceforge.plantuml.sequencediagram.graphic.DrawableSetInitializer.createDrawableSet(DrawableSetInitializer.java:140)
at net.sourceforge.plantuml.sequencediagram.graphic.SequenceDiagramFileMakerPuma2.<init>(SequenceDiagramFileMakerPuma2.java:116)
at net.sourceforge.plantuml.sequencediagram.SequenceDiagram.getSequenceDiagramPngMaker(SequenceDiagram.java:241)
at net.sourceforge.plantuml.sequencediagram.SequenceDiagram.getNbImages(SequenceDiagram.java:416)
at net.sourceforge.plantuml.SourceStringReader.outputImage(SourceStringReader.java:155)
at net.sourceforge.plantuml.SourceStringReader.outputImage(SourceStringReader.java:130)
at net.sourceforge.plantuml.SourceStringReader.generateImage(SourceStringReader.java:126)
at com.nitor.plantuml.PlantUmlUtil.renderDiagram(PlantUmlUtil.java:32)
at com.nitor.plantuml.lambda.PngHandler.handleRequest(PngHandler.java:35)
at lambdainternal.EventHandlerLoader$2.call(EventHandlerLoader.java:897)
at lambdainternal.AWSLambda.startRuntime(AWSLambda.java:228)
at lambdainternal.AWSLambda.startRuntime(AWSLambda.java:162)
at lambdainternal.AWSLambda.main(AWSLambda.java:157)
Caused by: java.lang.reflect.InvocationTargetException
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.base/java.lang.reflect.Constructor.newInstance(Unknown Source)
... 25 more
Caused by: java.lang.NullPointerException
at java.desktop/sun.awt.FontConfiguration.getVersion(Unknown Source)
at java.desktop/sun.awt.FontConfiguration.readFontConfigFile(Unknown Source)
at java.desktop/sun.awt.FontConfiguration.init(Unknown Source)
at java.desktop/sun.awt.X11FontManager.createFontConfiguration(Unknown Source)
at java.desktop/sun.font.SunFontManager$2.run(Unknown Source)
at java.base/java.security.AccessController.doPrivileged(Native Method)
at java.desktop/sun.font.SunFontManager.<init>(Unknown Source)
at java.desktop/sun.awt.FcFontManager.<init>(Unknown Source)
at java.desktop/sun.awt.X11FontManager.<init>(Unknown Source)
... 29 more
Could not initialize class net.sourceforge.plantuml.ugraphic.UFont: java.lang.NoClassDefFoundError java.lang.NoClassDefFoundError: Could not initialize class net.sourceforge.plantuml.ugraphic.UFont at net.sourceforge.plantuml.SkinParam.getFont(SkinParam.java:464) at net.sourceforge.plantuml.SkinParamDelegator.getFont(SkinParamDelegator.java:83) at net.sourceforge.plantuml.skin.rose.Rose.createC

Need to figure out how to add fonts as a lambda layer:

AdoptOpenJDK issue: https://github.com/AdoptOpenJDK/openjdk-build/issues/682 Related openjdk bug report: https://bugs.openjdk.java.net/browse/JDK-8204688s

mmajis commented 3 years ago

Maybe build fontconfig and copy it over to lambda as shown here: https://medium.com/creditorwatch/aws-lambda-fonts-libfontconfig-5e837281a4ce

mmajis commented 3 years ago

This got fixed by moving to a custom container based lambda. Java 11 is now the runtime and fonts could be added to the container build.