[Error] Recently Arch Linux upgraded `jdk-openjdk` to v`24.u36-1`

and I get this error when I run languagetool (the GUI doesn’t start, it’s not just a warning):

WARN  o.l.l.i.DefaultLanguageIdentifier fastText not configured - language detection performance will be degraded. See https://dev.languagetool.org/http-server#starting-from-command-line for instructions.
WARNING: A terminally deprecated method in sun.misc.Unsafe has been called
WARNING: sun.misc.Unsafe::objectFieldOffset has been called by com.google.common.util.concurrent.AbstractFuture$UnsafeAtomicHelper (file:/usr/share/java/languagetool/libs/guava.jar)
WARNING: Please consider reporting this to the maintainers of class com.google.common.util.concurrent.AbstractFuture$UnsafeAtomicHelper
WARNING: sun.misc.Unsafe::objectFieldOffset will be removed in a future release
java.lang.RuntimeException: java.lang.RuntimeException: Could not activate rules
	at org.languagetool.gui.LanguageToolSupport.reloadLanguageTool(LanguageToolSupport.java:258)
	at org.languagetool.gui.LanguageToolSupport.init(LanguageToolSupport.java:299)
	at org.languagetool.gui.LanguageToolSupport.<init>(LanguageToolSupport.java:106)
	at org.languagetool.gui.Main.createGUI(Main.java:464)
	at org.languagetool.gui.Main.access$1700(Main.java:140)
	at org.languagetool.gui.Main$7.run(Main.java:1199)
	at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:318)
	at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:723)
	at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:702)
	at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
	at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
	at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
	at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
Caused by: java.lang.RuntimeException: Could not activate rules
	at org.languagetool.JLanguageTool.<init>(JLanguageTool.java:319)
	at org.languagetool.JLanguageTool.<init>(JLanguageTool.java:278)
	at org.languagetool.MultiThreadedJLanguageTool.<init>(MultiThreadedJLanguageTool.java:94)
	at org.languagetool.MultiThreadedJLanguageTool.<init>(MultiThreadedJLanguageTool.java:84)
	at org.languagetool.MultiThreadedJLanguageTool.<init>(MultiThreadedJLanguageTool.java:74)
	at org.languagetool.gui.LanguageToolSupport.reloadLanguageTool(LanguageToolSupport.java:252)
	... 14 more
Caused by: java.io.IOException: Cannot load or parse input stream of '/org/languagetool/rules/de/grammar.xml'
	at org.languagetool.rules.patterns.PatternRuleLoader.getRules(PatternRuleLoader.java:79)
	at org.languagetool.Language.getPatternRules(Language.java:711)
	at org.languagetool.JLanguageTool.activateDefaultPatternRules(JLanguageTool.java:624)
	at org.languagetool.JLanguageTool.<init>(JLanguageTool.java:312)
	... 19 more
Caused by: org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 513; JAXP00010004: Die akkumulierte Größe von Entitys ist "100.025" und überschreitet den Grenzwert "100.000", der von "jdk.xml.totalEntitySizeLimit" festgelegt wurde.
	at java.xml/com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:204)
	at java.xml/com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(ErrorHandlerWrapper.java:178)
	at java.xml/com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:400)
	at java.xml/com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:327)
	at java.xml/com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:284)
	at java.xml/com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.checkLimit(XMLEntityScanner.java:1009)
	at java.xml/com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.checkEntityLimit(XMLEntityScanner.java:968)
	at java.xml/com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.scanContent(XMLEntityScanner.java:1072)
	at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanContent(XMLDocumentFragmentScannerImpl.java:1575)
	at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2872)
	at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:635)
	at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:551)
	at java.xml/com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:890)
	at java.xml/com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:826)
	at java.xml/com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:134)
	at java.xml/com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1225)
	at java.xml/com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:643)
	at java.xml/com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl.parse(SAXParserImpl.java:326)
	at java.xml/javax.xml.parsers.SAXParser.parse(SAXParser.java:197)
	at org.languagetool.rules.patterns.PatternRuleLoader.getRules(PatternRuleLoader.java:76)
	... 22 more

Does adding -Djdk.xml.totalEntitySizeLimit=125000 on the command line help as a workaround? Otherwise, I think JDK24 isn’t supported yet by LT, and you’ll need to use e.g. JDK 17.

Adding -Djdk.. unfortunately doesn’t work (tried it also by adding it to /usr/bin/languagetool (see below for workaround)).

Previous version was 23 (gitlab.archlinux . org/archlinux/packaging/packages/java-openjdk/-/commits/main) btw.

My workaround:

  • sudo pacman -S jre21-openjdk (v21 is the latest non-24 version with long term support, I guess) (installing a concurrent different version is possible and supported on Arch (see))
  • I don’t use archlinux-java, as this would change the java version globally
  • Instead I edited /usr/bin/languagetool and changed the very last line 71 from
    "$JAVA_HOME/bin/java" -cp $CP -Dsun.java2d.uiScale=4 $GUI_command "${argv[@]}"
    to
    "$JAVA_HOME/usr/lib/jvm/java-21-openjdk/bin/java" -cp $CP -Dsun.java2d.uiScale=4 $GUI_command "${argv[@]}"
  • Running languagetool works again
  • The -Dsun.java2d.uiScale=4 is also added by me to fix the GUI being tiny on my 4K screen

I can get all DE unit tests pass except one by adding these two properties:
-Djdk.xml.totalEntitySizeLimit=0 -Djdk.xml.entityExpansionLimit=0
It seems that they changed the limit in jdk24 from 5 million to 100k:

I’ve pushed a commit to mitigate that problem in a jdk24 branch
I’ve set the xml limits at more global level and also updated guava to remove a warning.
Unfortunately there’s another warning coming from jna and even updating it to the latest version didn’t make all warnings go away so I didn’t push it.
Note: there are still other 2 places trying to set xml limits for the SAX parser and we may want to consolidate it.
Note: with jdk24 I have one test in [de] failing and also we have some French tests failing starting with jdk21 (I think there were some regressions since we pushed support for jdk21) so I could not verify it all the way.
It would be nice to make LT 6.6 jdk24-compatible.