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)

Reply via email to