Uploaded image for project: 'OFBiz'
  1. OFBiz
  2. OFBIZ-12400 Upgrade to gradle 7.6 - support JDK 11 -> 17
  3. OFBIZ-12721

Replace all occurrences of java.util.TimeZone by java.time.ZoneId

    XMLWordPrintableJSON

Details

    • Sub-task
    • Status: Closed
    • Major
    • Resolution: Fixed
    • Upcoming Branch
    • 22.01.01
    • ALL COMPONENTS
    • 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

          Activity

            People

              ieugen Ioan Eugen Stan
              jleroux Jacques Le Roux
              Votes:
              0 Vote for this issue
              Watchers:
              4 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: