Skip to content

Java 11 Compatibility

Jody Garnett edited this page Aug 23, 2023 · 15 revisions
Date 2018 09 11 Contacts María Arias de Reyna
Status Withdrawn (Outdated) Release GeoNetwork 4.4
Resources Initial research undertaken by GeoCat, expect additional activities to be required across the GeoNetwork community Ticket # OSGeo Java codesprint 2018, #4668
Source code n/a
Funding GeoCat providing initial assessment on behalf of GeoNetwork Enterprise product
  • Withdrawn: This research is outdated

  • Updated: Java 11 is scheduled for GeoNetwork 4.4 release in 2023 Q4

Overview

The Java ecosystem is now lead by OpenJDK and has changed release cadence (two numbered release each year, with long-term-support releases every three years).

With this in mind there are two long-term-support releases:

  • Java 8 (LTS): 2014-2026 AdoptOpenJDK
  • Java 11 (LTS): 2018-2024 AdoptOpenJDK
  • Java 17 (LTS): 2021-TBA

Aside: We were initially concerned that Java 8 would no longer be supported, but an industry response lead by Red Hat, Eclipse Foundation and others is continuing to make OpenJDK 8 available to their customers and for Windows and macOS at http://adoptopenjdk.net.

Approach:

  1. Identify dependencies with issues running in Java 11.

    For each dependency determine if it can be:

    • upgraded: As an example upgrading to Spring 5 is required to work in a Java 11 environment
    • replaced: For old jars where no updated is available we will need to find a replacement or fork the source code.
    • ignored: As an example jai_core produces warnings in the log (due to use of javax namespace) but is able to function

    The most common fatal error is split-package where for example three jars try to add classes to the org.xml.sax.helpers package.

  2. Review geonetwork codebase for issues running in Java 11:

    • Use of api such as jaxb that is no longer provided can be addressed with an explicit dependency on the open source project
    • Use of a JRE module that is off-by-default can be "activated" via JVM parameter used to startup jetty or tomcat.
    • Warnings on the user of internal API is the most common issue, this can be difficult to track down when such access occurs via reflection
    • Use of JRE internal api that is no longer available (such as sun.misc.URLClassPath) needs to be changed to public api

Technical Details

2018 Initial Research

María Arias de Reyna participated in OSGeo Java 2018 Code Sprint:

Results:

  1. Naive Attempt: Run with maven/jetty

    • As expected Spring fails to load
    • Warnings on use of reflection "All illegal access operations will be denied in a future release"
  2. Build with maven

    • Missing javax classes (and probably even more missing/moved core JDK classes
    • Warnings on use of reflection "All illegal access operations will be denied in a future release"

Summary of sprint results:

  • Need to replace Spring with latest version: from 3.2.0 to 5
  • Locate and replace all imports referencing missing JDK API
  • Replace other dependencies that may be struggling with JDK 11
  • Check all reflection
  • A new release of GeoTools is needed: Java 9 introduced a restriction on Service Registry (used by the GeoTools library to coordinate plugins) a new release of GeoTools will be required before GeoNetwork can run on Java 11
  • With some care releases of GeoNetwork should be compatible with both Java 8 and Java 11.

2020 Follow-up Research

As part of https://github.com/geonetwork/core-geonetwork/wiki/Bolsena-2020:

  • Use of jdeps to short-list dependencies to replace (dreaded split-package problem)

Dependencies

For each dependency we need to look at how it is failing in Java 11, and if a new release is available to address the problem. As an example we know that an upgrade to Spring 5 is required for Java 11 compatibility.

Dependencies have some common failings:

  • Use of some internal com.sun classes or API.

    This can occur when a dependency is using reflection to access a codec or other api directly for greater control, rather than making use of a more limited public api.

    When running often only the first warning is reported, use --illegal-access=warn to report more.

    Mitigation: Check if an official API is now available, this is often the case for reflection on the Unsafe class for improved memory management control. As an alternative look for an open source project that performs a similar function.

  • Unable to access a javax package that is expected to be included in the Java Runtime.

    This can occur when a java runtime module is not turned on during startup (we can adjust this with JVM startup parameters for jetty or tomcat).

    More seriously this can occur when the API is no longer part of Java, either because Java Enterprise Edition content has now moved to the Eclipse Foundation Jakarta project, or because functionality has been dropped from the Java ecosystem completely.

    Example: java.xml.bind is no longer included in Java 11, and must be added as a dependency:

          <dependency>
              <groupId>javax.xml.bind</groupId>
              <artifactId>jaxb-api</artifactId>
              <version>${jaxb.api.version}</version>
          </dependency>
    

    Reference: https://www.dariawan.com/tutorials/java/using-jaxb-java-11/

  • Split package error preventing the jar from being loaded

    This occurs when a jar tries to publish a class into a package that is already used by another jar. As an example many of our xml libraries try to create additional classes in javax.xml package and fail to load as a result. Mitigation: Ideally upgrade to a newer official version, or if we have to recompile our own fork (refactoring the code to use a unique package).

Key dependency upgrades

The following key dependencies require some work to upgrade and have been broken out as specific acvtivities.

How to run jdeps static analysis on a war:

unzip web-app-3.11.0-20200629.221942.war
cd WEB-INF/lib
rm jaxb-runtime-2.4.0-b180830.0438.jar
jdeps --jdk-internals -R *.jar
  • Java 8: fails due to a bug in jdeps

    jdeps -jdkinternals -R . *.jar
    Exception in thread "main" java.lang.InternalError: Missing message: warn.skipped.entry
    
  • Java 9: OpenJDK 9 and Oracle JDK 9.0.4

    jdeps --jdk-internals -R *.jar
    Exception in thread "main" java.lang.module.FindException: Module com.sun.istack.runtime not found, required by com.sun.xml.bind
    

    Go through jars in batches so we can figure out what is wrong:

    • The jar jaxb-runtime-2.4.0-b180830.0438.jar was producing the error in jdeps
  • Java 11: Oracle Java 11

    jdeps --jdk-internals -R *.jar
    Exception in thread "main" java.lang.module.FindException: Module java.activation not found, required by org.jvnet.staxex
    

    Java no longer includes activation component, we need an explicit dependency to even test.

Split packages

The following issues are critical and prevent geonetwork from starting up:

  • Expect many issue to be resolved by taking control of our war generation and preventing the accidental inclusion of jars like javaee-api-7.0.jar that should be provided by the application server

  • Remaining jars will require upgrade, replace or fork evaluation

split package: com.sun.activation.registries [jrt:/java.activation, activation-1.1.1.jar]
split package: com.sun.xml.txw2 [file:///Users/jgarnett/Downloads/web-app-3.11.0-20200629.221942-2/WEB-INF/lib/txw2-2.4.0-b180830.0438.jar, jaxb-core-2.2.7.jar]
split package: com.sun.xml.txw2.annotation [file:///Users/jgarnett/Downloads/web-app-3.11.0-20200629.221942-2/WEB-INF/lib/txw2-2.4.0-b180830.0438.jar, jaxb-core-2.2.7.jar]
split package: com.sun.xml.txw2.output [file:///Users/jgarnett/Downloads/web-app-3.11.0-20200629.221942-2/WEB-INF/lib/txw2-2.4.0-b180830.0438.jar, jaxb-core-2.2.7.jar]
split package: javax.activation [jrt:/java.activation, activation-1.1.1.jar, javax.activation-api-1.2.0.jar]
split package: javax.annotation [jrt:/java.xml.ws.annotation, javaee-api-7.0.jar, jsr305-2.0.1.jar]
split package: javax.jws [jrt:/java.xml.ws, javaee-api-7.0.jar]
split package: javax.jws.soap [jrt:/java.xml.ws, javaee-api-7.0.jar]
split package: javax.transaction [jrt:/java.transaction, geronimo-jta_1.0.1B_spec-1.0.1.jar, javaee-api-7.0.jar, jboss-transaction-api_1.2_spec-1.0.0.Final.jar]
split package: javax.transaction.xa [jrt:/java.sql, geronimo-jta_1.0.1B_spec-1.0.1.jar, javaee-api-7.0.jar, jboss-transaction-api_1.2_spec-1.0.0.Final.jar]
split package: javax.xml [jrt:/java.xml, jsr173_api-1.0.jar, xml-apis-1.4.01.jar]
split package: javax.xml.bind [jrt:/java.xml.bind, javaee-api-7.0.jar, jaxb-api-2.2.11.jar]
split package: javax.xml.bind.annotation [jrt:/java.xml.bind, javaee-api-7.0.jar, jaxb-api-2.2.11.jar]
split package: javax.xml.bind.annotation.adapters [jrt:/java.xml.bind, javaee-api-7.0.jar, jaxb-api-2.2.11.jar]
split package: javax.xml.bind.attachment [jrt:/java.xml.bind, javaee-api-7.0.jar, jaxb-api-2.2.11.jar]
split package: javax.xml.bind.helpers [jrt:/java.xml.bind, javaee-api-7.0.jar, jaxb-api-2.2.11.jar]
split package: javax.xml.bind.util [jrt:/java.xml.bind, javaee-api-7.0.jar, jaxb-api-2.2.11.jar]
split package: javax.xml.datatype [jrt:/java.xml, xml-apis-1.4.01.jar]
split package: javax.xml.namespace [jrt:/java.xml, jsr173_api-1.0.jar, xml-apis-1.4.01.jar]
split package: javax.xml.parsers [jrt:/java.xml, xml-apis-1.4.01.jar, xmlParserAPIs-2.6.2.jar]
split package: javax.xml.soap [jrt:/java.xml.ws, javaee-api-7.0.jar]
split package: javax.xml.stream [jrt:/java.xml, jsr173_api-1.0.jar, xml-apis-1.4.01.jar]
split package: javax.xml.stream.events [jrt:/java.xml, jsr173_api-1.0.jar, xml-apis-1.4.01.jar]
split package: javax.xml.stream.util [jrt:/java.xml, jsr173_api-1.0.jar, xml-apis-1.4.01.jar]
split package: javax.xml.transform [jrt:/java.xml, xml-apis-1.4.01.jar, xmlParserAPIs-2.6.2.jar]
split package: javax.xml.transform.dom [jrt:/java.xml, xml-apis-1.4.01.jar, xmlParserAPIs-2.6.2.jar]
split package: javax.xml.transform.sax [jrt:/java.xml, xml-apis-1.4.01.jar, xmlParserAPIs-2.6.2.jar]
split package: javax.xml.transform.stax [jrt:/java.xml, xml-apis-1.4.01.jar]
split package: javax.xml.transform.stream [jrt:/java.xml, xml-apis-1.4.01.jar, xmlParserAPIs-2.6.2.jar]
split package: javax.xml.validation [jrt:/java.xml, xml-apis-1.4.01.jar]
split package: javax.xml.ws [jrt:/java.xml.ws, javaee-api-7.0.jar]
split package: javax.xml.ws.handler [jrt:/java.xml.ws, javaee-api-7.0.jar]
split package: javax.xml.ws.handler.soap [jrt:/java.xml.ws, javaee-api-7.0.jar]
split package: javax.xml.ws.http [jrt:/java.xml.ws, javaee-api-7.0.jar]
split package: javax.xml.ws.soap [jrt:/java.xml.ws, javaee-api-7.0.jar]
split package: javax.xml.ws.spi [jrt:/java.xml.ws, javaee-api-7.0.jar]
split package: javax.xml.ws.spi.http [jrt:/java.xml.ws, javaee-api-7.0.jar]
split package: javax.xml.ws.wsaddressing [jrt:/java.xml.ws, javaee-api-7.0.jar]
split package: javax.xml.xpath [jrt:/java.xml, xml-apis-1.4.01.jar]
split package: org.w3c.dom [jrt:/java.xml, jaxen-1.1.4.jar, xml-apis-1.4.01.jar, xmlParserAPIs-2.6.2.jar, xom-1.1.jar]
split package: org.w3c.dom.bootstrap [jrt:/java.xml, xml-apis-1.4.01.jar]
split package: org.w3c.dom.css [jrt:/jdk.xml.dom, xml-apis-1.4.01.jar, xmlParserAPIs-2.6.2.jar]
split package: org.w3c.dom.events [jrt:/java.xml, batik-ext-1.10.jar, xml-apis-1.4.01.jar, xmlParserAPIs-2.6.2.jar]
split package: org.w3c.dom.html [jrt:/jdk.xml.dom, xercesImpl-2.11.0.jar, xml-apis-1.4.01.jar, xmlParserAPIs-2.6.2.jar]
split package: org.w3c.dom.ls [jrt:/java.xml, xml-apis-1.4.01.jar]
split package: org.w3c.dom.ranges [jrt:/java.xml, xml-apis-1.4.01.jar, xmlParserAPIs-2.6.2.jar]
split package: org.w3c.dom.stylesheets [jrt:/jdk.xml.dom, xml-apis-1.4.01.jar, xmlParserAPIs-2.6.2.jar]
split package: org.w3c.dom.traversal [jrt:/java.xml, xml-apis-1.4.01.jar, xmlParserAPIs-2.6.2.jar]
split package: org.w3c.dom.views [jrt:/java.xml, xml-apis-1.4.01.jar, xmlParserAPIs-2.6.2.jar]
split package: org.w3c.dom.xpath [jrt:/jdk.xml.dom, xml-apis-1.4.01.jar]
split package: org.xml.sax [jrt:/java.xml, xml-apis-1.4.01.jar, xmlParserAPIs-2.6.2.jar]
split package: org.xml.sax.ext [jrt:/java.xml, xml-apis-1.4.01.jar, xmlParserAPIs-2.6.2.jar]
split package: org.xml.sax.helpers [jrt:/java.xml, xml-apis-1.4.01.jar, xmlParserAPIs-2.6.2.jar]

GeoNetwork Internal API Use

The following either produce warnings at runtime, or prevent startup if the class in question is no longer available:

core-3.11.0-SNAPSHOT.jar -> java.base
   org.fao.geonet.kernel.url.UrlChecker               -> sun.net.ftp.FtpLoginException                      JDK internal API (java.base)
  • geonetwork core issue to fix

  • See UrlChecker

      private LinkStatus getFTPStatus(String url) throws IOException {
          LinkStatus linkStatus = new LinkStatus();
          linkStatus.setFailing(false);
          try {
              URLConnection con = new URL(url).openConnection();
              con.setConnectTimeout(10000);
              con.setReadTimeout(10000);
              con.getInputStream().close();
              linkStatus.setStatusValue("OK");
              linkStatus.setStatusInfo("new URL(url).openStream() success.");
          } catch (FtpLoginException e) {
              linkStatus.setStatusValue("Need username/password");
              linkStatus.setStatusInfo("new URL(url).openStream() need username/password.");
          }
          return linkStatus;
      }  

Dependencies Internal API Use

The following either produce warnings at runtime, or prevent startup if the class in question is no longer available:

ant-1.6.5.jar -> JDK removed internal API
   org.apache.tools.ant.taskdefs.email.UUMailer       -> sun.misc.UUEncoder                                 JDK internal API (JDK removed internal API)
  • What is the ant jar being included in the war for? Is this an accident...
camel-core-2.14.4.jar -> jdk.unsupported
   org.apache.camel.com.googlecode.concurrentlinkedhashmap.ConcurrentHashMapV8 -> sun.misc.Unsafe                                    JDK internal API (jdk.unsupported)
   org.apache.camel.com.googlecode.concurrentlinkedhashmap.ConcurrentHashMapV8$1 -> sun.misc.Unsafe                                    JDK internal API (jdk.unsupported)
   org.apache.camel.com.googlecode.concurrentlinkedhashmap.ConcurrentHashMapV8$TreeBin -> sun.misc.Unsafe                                    JDK internal API (jdk.unsupported)
dom4j-1.6.1.jar -> JDK removed internal API
   org.dom4j.datatype.DatatypeAttribute               -> org.relaxng.datatype.DatatypeException             JDK internal API (JDK removed internal API)
   org.dom4j.datatype.DatatypeAttribute               -> org.relaxng.datatype.ValidationContext             JDK internal API (JDK removed internal API)
   org.dom4j.datatype.DatatypeElement                 -> org.relaxng.datatype.DatatypeException             JDK internal API (JDK removed internal API)
   org.dom4j.datatype.DatatypeElement                 -> org.relaxng.datatype.ValidationContext             JDK internal API (JDK removed internal API)
   org.dom4j.datatype.SchemaParser                    -> org.relaxng.datatype.DatatypeException             JDK internal API (JDK removed internal API)
   org.dom4j.datatype.SchemaParser                    -> org.relaxng.datatype.ValidationContext             JDK internal API (JDK removed internal API)
ehcache-core-2.6.2.jar -> jdk.unsupported
   net.sf.ehcache.pool.sizeof.UnsafeSizeOf            -> sun.misc.Unsafe                                    JDK internal API (jdk.unsupported)
  • https://github.com/ehcache/ehcache3/issues/2671
  • One feature (byte-based sizing) appears to require using eccache as an unnamed module, with some restrictions relaxed to allow eccache to walk the object graph violating module encapsulation --add-opens ${module}/${package}=ALL-UNNAMED
  • aside: GeoServer uses 2.10.3 without any reported problems
groovy-all-2.3.11.jar -> java.desktop
groovy-all-2.3.11.jar -> jdk.unsupported
   groovy.json.internal.FastStringUtils               -> sun.misc.Unsafe                                    JDK internal API (jdk.unsupported)
   groovy.json.internal.FastStringUtils$StringImplementation$1 -> sun.misc.Unsafe                                    JDK internal API (jdk.unsupported)
   groovy.json.internal.FastStringUtils$StringImplementation$2 -> sun.misc.Unsafe                                    JDK internal API (jdk.unsupported)
   groovy.ui.ConsoleApplet                            -> java.awt.peer.ComponentPeer                        JDK internal API (java.desktop)
   groovy.ui.ConsoleApplet                            -> sun.awt.CausedFocusEvent$Cause                     JDK internal API (java.desktop)
   groovy.ui.ConsoleApplet                            -> sun.java2d.pipe.Region                             JDK internal API (java.desktop)
  • activate java.desktop and jdk.unsupported
  • live with these warnings
guava-18.0.jar -> jdk.unsupported
   com.google.common.cache.Striped64                  -> sun.misc.Unsafe                                    JDK internal API (jdk.unsupported)
   com.google.common.cache.Striped64$1                -> sun.misc.Unsafe                                    JDK internal API (jdk.unsupported)
   com.google.common.cache.Striped64$Cell             -> sun.misc.Unsafe                                    JDK internal API (jdk.unsupported)
   com.google.common.primitives.UnsignedBytes$LexicographicalComparatorHolder$UnsafeComparator -> sun.misc.Unsafe                                    JDK internal API (jdk.unsupported)
   com.google.common.primitives.UnsignedBytes$LexicographicalComparatorHolder$UnsafeComparator$1 -> sun.misc.Unsafe                                    JDK internal API (jdk.unsupported)
  • enable jdk.unsupported
  • live with these warnings
  • can consider upgrading to .... guava-29.0.jar!
hadoop-core-1.0.0.jar -> java.base
hadoop-core-1.0.0.jar -> java.security.jgss
   org.apache.hadoop.net.NetUtils$QualifiedHostResolver -> sun.net.dns.ResolverConfiguration                  JDK internal API (java.base)
   org.apache.hadoop.net.NetUtils$QualifiedHostResolver -> sun.net.util.IPAddressUtil                         JDK internal API (java.base)
   org.apache.hadoop.security.KerberosName            -> sun.security.krb5.Config                           JDK internal API (java.security.jgss)
   org.apache.hadoop.security.KerberosName            -> sun.security.krb5.KrbException                     JDK internal API (java.security.jgss)
   org.apache.hadoop.security.SecurityUtil            -> sun.security.jgss.krb5.Krb5Util                    JDK internal API (java.security.jgss)
   org.apache.hadoop.security.SecurityUtil            -> sun.security.krb5.Credentials                      JDK internal API (java.security.jgss)
   org.apache.hadoop.security.SecurityUtil            -> sun.security.krb5.PrincipalName                    JDK internal API (java.security.jgss)
   org.apache.hadoop.security.authentication.client.KerberosAuthenticator$1 -> sun.security.jgss.GSSUtil                          JDK internal API (java.security.jgss)
jai_codec-1.1.3.jar -> JDK removed internal API
jai_codec-1.1.3.jar -> java.base
   com.sun.media.jai.codecimpl.JPEGImage              -> com.sun.image.codec.jpeg.ImageFormatException      JDK internal API (JDK removed internal API)
   com.sun.media.jai.codecimpl.JPEGImage              -> com.sun.image.codec.jpeg.JPEGCodec                 JDK internal API (JDK removed internal API)
   com.sun.media.jai.codecimpl.JPEGImage              -> com.sun.image.codec.jpeg.JPEGImageDecoder          JDK internal API (JDK removed internal API)
   com.sun.media.jai.codecimpl.JPEGImageEncoder       -> com.sun.image.codec.jpeg.JPEGCodec                 JDK internal API (JDK removed internal API)
   com.sun.media.jai.codecimpl.JPEGImageEncoder       -> com.sun.image.codec.jpeg.JPEGEncodeParam           JDK internal API (JDK removed internal API)
   com.sun.media.jai.codecimpl.JPEGImageEncoder       -> com.sun.image.codec.jpeg.JPEGImageEncoder          JDK internal API (JDK removed internal API)
   com.sun.media.jai.codecimpl.JPEGImageEncoder       -> com.sun.image.codec.jpeg.JPEGQTable                JDK internal API (JDK removed internal API)
   com.sun.media.jai.codecimpl.PNMImage               -> sun.security.action.GetPropertyAction              JDK internal API (java.base)
   com.sun.media.jai.codecimpl.PNMImageEncoder        -> sun.security.action.GetPropertyAction              JDK internal API (java.base)
   com.sun.media.jai.codecimpl.TIFFImage              -> com.sun.image.codec.jpeg.JPEGCodec                 JDK internal API (JDK removed internal API)
   com.sun.media.jai.codecimpl.TIFFImage              -> com.sun.image.codec.jpeg.JPEGDecodeParam           JDK internal API (JDK removed internal API)
   com.sun.media.jai.codecimpl.TIFFImage              -> com.sun.image.codec.jpeg.JPEGImageDecoder          JDK internal API (JDK removed internal API)
   com.sun.media.jai.codecimpl.TIFFImageEncoder       -> com.sun.image.codec.jpeg.JPEGCodec                 JDK internal API (JDK removed internal API)
   com.sun.media.jai.codecimpl.TIFFImageEncoder       -> com.sun.image.codec.jpeg.JPEGEncodeParam           JDK internal API (JDK removed internal API)
   com.sun.media.jai.codecimpl.TIFFImageEncoder       -> com.sun.image.codec.jpeg.JPEGImageEncoder          JDK internal API (JDK removed internal API)
   com.sun.media.jai.codecimpl.fpx.FPXImage           -> com.sun.image.codec.jpeg.JPEGCodec                 JDK internal API (JDK removed internal API)
   com.sun.media.jai.codecimpl.fpx.FPXImage           -> com.sun.image.codec.jpeg.JPEGDecodeParam           JDK internal API (JDK removed internal API)
   com.sun.media.jai.codecimpl.fpx.FPXImage           -> com.sun.image.codec.jpeg.JPEGImageDecoder          JDK internal API (JDK removed internal API)
  • evaluation: live with these warnings
  • FPX format no longer used in industry
  • JPEG and TIFF formats now provided by JRE
jai_core-1.1.3.jar -> JDK removed internal API
jai_core-1.1.3.jar -> java.desktop
   com.sun.media.jai.opimage.IIPResolutionOpImage     -> com.sun.image.codec.jpeg.JPEGCodec                 JDK internal API (JDK removed internal API)
   com.sun.media.jai.opimage.IIPResolutionOpImage     -> com.sun.image.codec.jpeg.JPEGDecodeParam           JDK internal API (JDK removed internal API)
   com.sun.media.jai.opimage.IIPResolutionOpImage     -> com.sun.image.codec.jpeg.JPEGImageDecoder          JDK internal API (JDK removed internal API)
   com.sun.media.jai.tilecodec.JPEGTileDecoder        -> com.sun.image.codec.jpeg.JPEGCodec                 JDK internal API (JDK removed internal API)
   com.sun.media.jai.tilecodec.JPEGTileDecoder        -> com.sun.image.codec.jpeg.JPEGDecodeParam           JDK internal API (JDK removed internal API)
   com.sun.media.jai.tilecodec.JPEGTileDecoder        -> com.sun.image.codec.jpeg.JPEGImageDecoder          JDK internal API (JDK removed internal API)
   com.sun.media.jai.tilecodec.JPEGTileDecoder        -> com.sun.image.codec.jpeg.JPEGQTable                JDK internal API (JDK removed internal API)
   com.sun.media.jai.tilecodec.JPEGTileEncoder        -> com.sun.image.codec.jpeg.JPEGCodec                 JDK internal API (JDK removed internal API)
   com.sun.media.jai.tilecodec.JPEGTileEncoder        -> com.sun.image.codec.jpeg.JPEGEncodeParam           JDK internal API (JDK removed internal API)
   com.sun.media.jai.tilecodec.JPEGTileEncoder        -> com.sun.image.codec.jpeg.JPEGImageEncoder          JDK internal API (JDK removed internal API)
   com.sun.media.jai.tilecodec.JPEGTileEncoder        -> com.sun.image.codec.jpeg.JPEGQTable                JDK internal API (JDK removed internal API)
   com.sun.media.jai.tilecodec.JPEGTileEncoder        -> sun.awt.image.codec.JPEGParam                      JDK internal API (JDK removed internal API)
   javax.media.jai.RasterAccessor                     -> sun.awt.image.BytePackedRaster                     JDK internal API (java.desktop)
  • live with these warnings
  • support ImageN development!
jai_imageio-1.1.jar -> java.base
   com.sun.media.imageioimpl.plugins.pnm.PNMImageReader -> sun.security.action.GetPropertyAction              JDK internal API (java.base)
   com.sun.media.imageioimpl.plugins.pnm.PNMImageWriter -> sun.security.action.GetPropertyAction              JDK internal API (java.base)
  • live with these warnings
  • this codec is not used
jcs-1.3.jar -> JDK removed internal API
   org.apache.jcs.utils.servlet.BasicHttpAuthenticator -> sun.misc.BASE64Decoder                             JDK internal API (JDK removed internal API)
je-4.0.92.jar -> jdk.jconsole
   com.sleepycat.je.jmx.plugin.Stats$GraphFrame       -> sun.tools.jconsole.Plotter                         JDK internal API (jdk.jconsole)
   com.sleepycat.je.jmx.plugin.Stats$GraphFrame       -> sun.tools.jconsole.Plotter$Unit                    JDK internal API (jdk.jconsole)
   com.sleepycat.je.jmx.plugin.Stats$GraphFrame       -> sun.tools.jconsole.PlotterPanel                    JDK internal API (jdk.jconsole)
   com.sleepycat.je.jmx.plugin.Stats$GraphFrame       -> sun.tools.jconsole.TimeComboBox                    JDK internal API (jdk.jconsole)
jsp-2.1-6.1.14.jar -> JDK removed internal API
jsp-2.1-6.1.14.jar -> java.xml
   com.sun.appserv.ClassLoaderUtil                    -> sun.misc.URLClassPath                              JDK internal API (JDK removed internal API)
   org.apache.taglibs.standard.tag.common.xml.JSTLXPathFactory -> com.sun.org.apache.xpath.internal.jaxp.XPathFactoryImpl JDK internal API (java.xml)
   org.apache.taglibs.standard.tag.common.xml.JSTLXPathImpl -> com.sun.org.apache.xalan.internal.res.XSLMessages  JDK internal API (java.xml)
   org.apache.taglibs.standard.tag.common.xml.JSTLXPathImpl -> com.sun.org.apache.xml.internal.utils.PrefixResolver JDK internal API (java.xml)
   org.apache.taglibs.standard.tag.common.xml.JSTLXPathImpl -> com.sun.org.apache.xpath.internal.VariableStack    JDK internal API (java.xml)
   org.apache.taglibs.standard.tag.common.xml.JSTLXPathImpl -> com.sun.org.apache.xpath.internal.XPath            JDK internal API (java.xml)
   org.apache.taglibs.standard.tag.common.xml.JSTLXPathImpl -> com.sun.org.apache.xpath.internal.XPathContext     JDK internal API (java.xml)
   org.apache.taglibs.standard.tag.common.xml.JSTLXPathImpl -> com.sun.org.apache.xpath.internal.jaxp.JAXPExtensionsProvider JDK internal API (java.xml)
   org.apache.taglibs.standard.tag.common.xml.JSTLXPathImpl -> com.sun.org.apache.xpath.internal.jaxp.JAXPPrefixResolver JDK internal API (java.xml)
   org.apache.taglibs.standard.tag.common.xml.JSTLXPathImpl -> com.sun.org.apache.xpath.internal.jaxp.JAXPVariableStack JDK internal API (java.xml)
   org.apache.taglibs.standard.tag.common.xml.JSTLXPathImpl -> com.sun.org.apache.xpath.internal.objects.XNodeSet JDK internal API (java.xml)
   org.apache.taglibs.standard.tag.common.xml.JSTLXPathImpl -> com.sun.org.apache.xpath.internal.objects.XObject  JDK internal API (java.xml)
leveldb-0.2.jar -> java.base
   org.iq80.leveldb.util.ByteBufferSupport            -> sun.nio.ch.FileChannelImpl                         JDK internal API (java.base)
metrics-core-3.0.2.jar -> jdk.unsupported
   com.codahale.metrics.Striped64                     -> sun.misc.Unsafe                                    JDK internal API (jdk.unsupported)
   com.codahale.metrics.Striped64$1                   -> sun.misc.Unsafe                                    JDK internal API (jdk.unsupported)
   com.codahale.metrics.Striped64$Cell                -> sun.misc.Unsafe                                    JDK internal API (jdk.unsupported)
scala-library-2.9.1.jar -> jdk.unsupported
   scala.concurrent.forkjoin.ForkJoinPool             -> sun.misc.Unsafe                                    JDK internal API (jdk.unsupported)
   scala.concurrent.forkjoin.ForkJoinPool$1           -> sun.misc.Unsafe                                    JDK internal API (jdk.unsupported)
   scala.concurrent.forkjoin.ForkJoinTask             -> sun.misc.Unsafe                                    JDK internal API (jdk.unsupported)
   scala.concurrent.forkjoin.ForkJoinTask$1           -> sun.misc.Unsafe                                    JDK internal API (jdk.unsupported)
   scala.concurrent.forkjoin.ForkJoinWorkerThread     -> sun.misc.Unsafe                                    JDK internal API (jdk.unsupported)
   scala.concurrent.forkjoin.ForkJoinWorkerThread$1   -> sun.misc.Unsafe                                    JDK internal API (jdk.unsupported)
   scala.concurrent.forkjoin.LinkedTransferQueue      -> sun.misc.Unsafe                                    JDK internal API (jdk.unsupported)
   scala.concurrent.forkjoin.LinkedTransferQueue$1    -> sun.misc.Unsafe                                    JDK internal API (jdk.unsupported)
  • what is scala used for?
soap-2.3.1.jar -> java.base
   org.apache.soap.util.net.SSLUtils                  -> sun.net.www.protocol.http.HttpURLConnection        JDK internal API (java.base)
  • Upgrade to Jakarta dependency
  • Use provided scope if this is expected to be included by tomcat or jetty
spring-core-4.3.0.RELEASE.jar -> jdk.unsupported
   org.springframework.objenesis.instantiator.sun.UnsafeFactoryInstantiator -> sun.misc.Unsafe                                    JDK internal API (jdk.unsupported)
  • upgrade to spring 5
xom-1.1.jar -> java.xml
   nu.xom.JDK15XML1_0Parser                           -> com.sun.org.apache.xerces.internal.parsers.DTDConfiguration JDK internal API (java.xml)
   nu.xom.JDK15XML1_0Parser                           -> com.sun.org.apache.xerces.internal.parsers.SAXParser JDK internal API (java.xml)
   nu.xom.JDK15XML1_0Parser                           -> com.sun.org.apache.xerces.internal.util.SecurityManager JDK internal API (java.xml)
   nu.xom.JDK15XML1_0Parser                           -> com.sun.org.apache.xerces.internal.xni.parser.XMLParserConfiguration JDK internal API 
(java.xml)

Proposal Type:

  • Type: Technical Debt
  • Module: core-geonetwork

Voting History

Project Steering Committee (voting):

  • Vote Proposed: TBA
  • Emanuele Tajariol
  • Florent Gravin
  • Francois Prunayre
  • Jeroen Ticheler - Chair
  • Jesse Eichar
  • Jose Garcia
  • Paul van Genuchten
  • Simon Pigot
  • Jo Cook

Community support (non-voting):

  • Jody Garnett

Participants

  • María Arias de Reyna (initial), Jose Garcia, Jody Garnett, David Blasby
Clone this wiki locally