You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@ofbiz.apache.org by "Jacques Le Roux (Jira)" <ji...@apache.org> on 2022/12/08 07:47:00 UTC

[jira] [Created] (OFBIZ-12721) Teplace all occurrences of java.util.TimeZone by java.time.ZoneId

Jacques Le Roux created OFBIZ-12721:
---------------------------------------

             Summary: Teplace all occurrences of java.util.TimeZone by java.time.ZoneId
                 Key: OFBIZ-12721
                 URL: https://issues.apache.org/jira/browse/OFBIZ-12721
             Project: OFBiz
          Issue Type: Task
          Components: ALL COMPONENTS
    Affects Versions: Upcoming Branch
         Environment: Java 17
            Reporter: Jacques Le Roux


Using JDK 17, we have this issue:

{noformat}
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
{noformat}


[The var timeZone is accessible in screen context|https://cwiki.apache.org/confluence/display/OFBIZ/Variables+always+available+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.







--
This message was sent by Atlassian Jira
(v8.20.10#820010)