Package org.apache.tomcat.util.compat
Class JreCompat
- java.lang.Object
- 
- org.apache.tomcat.util.compat.JreCompat
 
- 
- Direct Known Subclasses:
- Jre19Compat
 
 public class JreCompat extends java.lang.ObjectThis is the base implementation class for JRE compatibility and provides an implementation based on Java 7. Sub-classes may extend this class and provide alternative implementations for later JRE versions
- 
- 
Constructor SummaryConstructors Constructor Description JreCompat()
 - 
Method SummaryAll Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description voidaddBootModulePath(java.util.Deque<java.net.URL> classPathUrlsToProcess)Obtains the URLs for all the JARs on the module path when the JVM starts and adds them to the provided Deque.booleancanAccess(java.lang.Object base, java.lang.reflect.AccessibleObject accessibleObject)Is the accessibleObject accessible (as a result of appropriate module exports) on the provided instance?voiddisableCachingForJarUrlConnections()Disables caching for JAR URL connections.java.lang.StringgetApplicationProtocol(javax.net.ssl.SSLEngine sslEngine)Get the application protocol that has been negotiated for connection associated with the given SSLEngine.java.security.KeyStore.LoadStoreParametergetDomainLoadStoreParameter(java.net.URI uri)java.lang.ObjectgetExecutor(java.lang.Thread thread)Obtains the executor, if any, used to create the provided thread.static JreCompatgetInstance()java.lang.StringgetModuleName(java.lang.Class<?> type)What is the module of the given class?static booleanisAlpnSupported()booleanisExported(java.lang.Class<?> type)Is the given class in an exported package?booleanisInstanceOfInaccessibleObjectException(java.lang.Throwable t)Test if the provided exception is an instance of java.lang.reflect.InaccessibleObjectException.static booleanisJre11Available()static booleanisJre19Available()static booleanisJre8Available()static booleanisJre9Available()booleanjarFileIsMultiRelease(java.util.jar.JarFile jarFile)Is this JarFile a multi-release JAR file.java.util.jar.JarFilejarFileNewInstance(java.io.File f)Creates a new JarFile instance.java.util.jar.JarFilejarFileNewInstance(java.lang.String s)Creates a new JarFile instance.intjarFileRuntimeMajorVersion()voidsetApplicationProtocols(javax.net.ssl.SSLParameters sslParameters, java.lang.String[] protocols)Set the application protocols the server will accept for ALPNvoidsetUseServerCipherSuitesOrder(javax.net.ssl.SSLParameters engine, boolean useCipherSuitesOrder)
 
- 
- 
- 
Method Detail- 
getInstancepublic static JreCompat getInstance() 
 - 
isJre8Availablepublic static boolean isJre8Available() 
 - 
setUseServerCipherSuitesOrderpublic void setUseServerCipherSuitesOrder(javax.net.ssl.SSLParameters engine, boolean useCipherSuitesOrder)
 - 
getDomainLoadStoreParameterpublic java.security.KeyStore.LoadStoreParameter getDomainLoadStoreParameter(java.net.URI uri) 
 - 
isAlpnSupportedpublic static boolean isAlpnSupported() 
 - 
isJre9Availablepublic static boolean isJre9Available() 
 - 
isInstanceOfInaccessibleObjectExceptionpublic boolean isInstanceOfInaccessibleObjectException(java.lang.Throwable t) Test if the provided exception is an instance of java.lang.reflect.InaccessibleObjectException.- Parameters:
- t- The exception to test
- Returns:
- trueif the exception is an instance of InaccessibleObjectException, otherwise- false
 
 - 
setApplicationProtocolspublic void setApplicationProtocols(javax.net.ssl.SSLParameters sslParameters, java.lang.String[] protocols)Set the application protocols the server will accept for ALPN- Parameters:
- sslParameters- The SSL parameters for a connection
- protocols- The application protocols to be allowed for that connection
 
 - 
getApplicationProtocolpublic java.lang.String getApplicationProtocol(javax.net.ssl.SSLEngine sslEngine) Get the application protocol that has been negotiated for connection associated with the given SSLEngine.- Parameters:
- sslEngine- The SSLEngine for which to obtain the negotiated protocol
- Returns:
- The name of the negotiated protocol
 
 - 
disableCachingForJarUrlConnectionspublic void disableCachingForJarUrlConnections() throws java.io.IOExceptionDisables caching for JAR URL connections. For Java 8 and earlier, this also disables caching for ALL URL connections.- Throws:
- java.io.IOException- If a dummy JAR URLConnection can not be created
 
 - 
addBootModulePathpublic void addBootModulePath(java.util.Deque<java.net.URL> classPathUrlsToProcess) Obtains the URLs for all the JARs on the module path when the JVM starts and adds them to the provided Deque.- Parameters:
- classPathUrlsToProcess- The Deque to which the modules should be added
 
 - 
jarFileNewInstancepublic final java.util.jar.JarFile jarFileNewInstance(java.lang.String s) throws java.io.IOExceptionCreates a new JarFile instance. When running on Java 9 and later, the JarFile will be multi-release JAR aware. While this isn't strictly required to be in this package, it is provided as a convenience method.- Parameters:
- s- The JAR file to open
- Returns:
- A JarFile instance based on the provided path
- Throws:
- java.io.IOException- If an I/O error occurs creating the JarFile instance
 
 - 
jarFileNewInstancepublic java.util.jar.JarFile jarFileNewInstance(java.io.File f) throws java.io.IOExceptionCreates a new JarFile instance. When running on Java 9 and later, the JarFile will be multi-release JAR aware.- Parameters:
- f- The JAR file to open
- Returns:
- A JarFile instance based on the provided file
- Throws:
- java.io.IOException- If an I/O error occurs creating the JarFile instance
 
 - 
jarFileIsMultiReleasepublic boolean jarFileIsMultiRelease(java.util.jar.JarFile jarFile) Is this JarFile a multi-release JAR file.- Parameters:
- jarFile- The JarFile to test
- Returns:
- trueIf it is a multi-release JAR file and is configured to behave as such.
 
 - 
jarFileRuntimeMajorVersionpublic int jarFileRuntimeMajorVersion() 
 - 
canAccesspublic boolean canAccess(java.lang.Object base, java.lang.reflect.AccessibleObject accessibleObject)Is the accessibleObject accessible (as a result of appropriate module exports) on the provided instance?- Parameters:
- base- The specific instance to be tested.
- accessibleObject- The method/field/constructor to be tested.
- Returns:
- {code true} if the AccessibleObject can be accessed otherwise {code false}
 
 - 
isExportedpublic boolean isExported(java.lang.Class<?> type) Is the given class in an exported package?- Parameters:
- type- The class to test
- Returns:
- Always truefor Java 8.trueif the enclosing package is exported for Java 9+
 
 - 
getModuleNamepublic java.lang.String getModuleName(java.lang.Class<?> type) What is the module of the given class?- Parameters:
- type- The class to test
- Returns:
- Always truefor Java 8.trueif the enclosing package is exported for Java 9+
 
 - 
isJre11Availablepublic static boolean isJre11Available() 
 - 
isJre19Availablepublic static boolean isJre19Available() 
 - 
getExecutorpublic java.lang.Object getExecutor(java.lang.Thread thread) throws java.lang.NoSuchFieldException, java.lang.SecurityException, java.lang.IllegalArgumentException, java.lang.IllegalAccessExceptionObtains the executor, if any, used to create the provided thread.- Parameters:
- thread- The thread to examine
- Returns:
- The executor, if any, that created the provided thread
- Throws:
- java.lang.NoSuchFieldException- If a field used via reflection to obtain the executor cannot be found
- java.lang.SecurityException- If a security exception occurs while trying to identify the executor
- java.lang.IllegalArgumentException- If the instance object does not match the class of the field when obtaining a field value via reflection
- java.lang.IllegalAccessException- If a field is not accessible due to access restrictions
 
 
- 
 
-