Details
-
Sub-task
-
Status: Closed
-
Major
-
Resolution: Fixed
-
Upcoming Branch
-
None
-
Java 17
Description
Using JDK 17, we have this issue:
2022-12-06 19:04:30,689 |sse-nio-8443-exec-10 |FreeMarkerWorker |E| null freemarker.core._TemplateModelException: Java method "sun.util.calendar.ZoneInfo.useDaylightTime()" threw an exception when invoked on sun.util.calendar.ZoneInfo object "sun.util.calendar.ZoneInfo[id=\"Europe/Paris\",offset=3600000,dstSa vings=3600000,useDaylight=true,transitions=184,lastRule=java.util.SimpleTimeZone[id=Europe/Paris,offset=3600000,dstSavings=3600000,useDaylight=true,startYear=0,startMode=2,startMonth=2,startDay=-1,startDayOfWeek=1,startTime=3600000,start TimeMode=2,endMode=2,endMonth=9,endDay=-1,endDayOfWeek=1,endTime=3600000,endTimeMode=2]]"; see cause exception in the Java stack trace. ---- FTL stack trace ("~" means nesting-related): - Failed at: ${timeZone.getDisplayName(timeZone.us... [in template "component://helveticus/template/includes/Footer.ftl" at line 21, column 98] ---- at freemarker.ext.beans._MethodUtil.newInvocationTemplateModelException(_MethodUtil.java:292) ~[freemarker-2.3.31.jar:2.3.31] [...] Caused by: java.lang.IllegalAccessException: class freemarker.ext.beans.BeansWrapper cannot access class sun.util.calendar.ZoneInfo (in module java.base) because module java.base does not export sun.util.calendar to unnamed module @1c852c0f at jdk.internal.reflect.Reflection.newIllegalAccessException(Reflection.java:392) ~[?:?] at java.lang.reflect.AccessibleObject.checkAccess(AccessibleObject.java:674) ~[?:?] at java.lang.reflect.Method.invoke(Method.java:560) ~[?:?] at freemarker.ext.beans.BeansWrapper.invokeMethod(BeansWrapper.java:1552) ~[freemarker-2.3.31.jar:2.3.31] at freemarker.ext.beans.SimpleMethodModel.exec(SimpleMethodModel.java:73) ~[freemarker-2.3.31.jar:2.3.31] ... 85 more
The var timeZone is accessible in screen context. The java.util.TimeZone class uses sun.util.calendar.ZoneInfo internally. It's no longer supported by Java 17. We need to replace all occurrences of java.util.TimeZone by java.time.ZoneId.
An easy temporary solution is to set --add-exports=java.base/sun.util.calendar=ALL-UNNAMED in build.gradle:
: ['-Xms128M','-Xmx1024M','-Djdk.serialFilter=maxarray=100000;maxdepth=20;maxrefs=1000;maxbytes=500000','--add-exports=java.base/sun.util.calendar=ALL-UNNAMED']
It has no impact with JDK 11.
Attachments
Issue Links
- blocks
-
OFBIZ-12726 Running integration tests under Gradle 7.6 and JDK 17 fails
- Closed
- is depended upon by
-
OFBIZ-12731 Time zones always displayed using their daylight savings display name
- Open
- links to