Package org.conscrypt

Class NativeLibraryLoader


  • final class NativeLibraryLoader
    extends java.lang.Object
    Helper class to load JNI resources.
    • Nested Class Summary

      Nested Classes 
      Modifier and Type Class Description
      (package private) static class  NativeLibraryLoader.LoadResult
      A result of a single attempt to load a library.
    • Constructor Summary

      Constructors 
      Modifier Constructor Description
      private NativeLibraryLoader()  
    • Method Summary

      All Methods Static Methods Concrete Methods 
      Modifier and Type Method Description
      private static byte[] classToByteArray​(java.lang.Class<?> clazz)
      Load the helper Class as a byte array, to be redefined in specified ClassLoader.
      private static void closeQuietly​(java.io.Closeable c)  
      private static void copyLibrary​(java.net.URL classpathUrl, java.io.File tmpFile)
      Copies the given shared library file from classpath to a temporary file.
      private static void debug​(java.lang.String message, java.lang.Throwable t)  
      private static java.io.File getWorkDir()  
      private static boolean load​(java.lang.String name, java.lang.ClassLoader loader, java.util.List<NativeLibraryLoader.LoadResult> results)
      Load the given library with the specified ClassLoader
      (package private) static boolean loadFirstAvailable​(java.lang.ClassLoader loader, java.util.List<NativeLibraryLoader.LoadResult> results, java.lang.String... names)
      Loads the first available library in the collection with the specified ClassLoader.
      private static boolean loadFromWorkdir​(java.lang.String name, java.lang.ClassLoader loader, java.util.List<NativeLibraryLoader.LoadResult> results)  
      private static boolean loadLibrary​(java.lang.ClassLoader loader, java.lang.String name, boolean absolute, java.util.List<NativeLibraryLoader.LoadResult> results)
      Loading the native library into the specified ClassLoader.
      private static NativeLibraryLoader.LoadResult loadLibraryFromCurrentClassloader​(java.lang.String name, boolean absolute)
      Attempts to load the library using the NativeLibraryUtil helper from the current classloader.
      private static NativeLibraryLoader.LoadResult loadLibraryFromHelperClassloader​(java.lang.Class<?> helper, java.lang.String name, boolean absolute)
      Attempts to load the library by reflectively using the NativeLibraryUtil helper from its classloader.
      private static void log​(java.lang.String format, java.lang.Object arg)  
      private static void log​(java.lang.String format, java.lang.Object arg1, java.lang.Object arg2)  
      private static void log​(java.lang.String format, java.lang.Object arg1, java.lang.Object arg2, java.lang.Throwable t)  
      private static java.lang.Class<?> tryToLoadClass​(java.lang.ClassLoader loader, java.lang.Class<?> helper)
      Try to load the helper Class into specified ClassLoader.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • logger

        private static final java.util.logging.Logger logger
      • WORK_DIR_PROPERTY_NAME

        private static final java.lang.String WORK_DIR_PROPERTY_NAME
        See Also:
        Constant Field Values
      • DELETE_LIB_PROPERTY_NAME

        private static final java.lang.String DELETE_LIB_PROPERTY_NAME
        See Also:
        Constant Field Values
      • NATIVE_RESOURCE_HOME

        private static final java.lang.String NATIVE_RESOURCE_HOME
        See Also:
        Constant Field Values
      • WORKDIR

        private static final java.io.File WORKDIR
      • DELETE_NATIVE_LIB_AFTER_LOADING

        private static final boolean DELETE_NATIVE_LIB_AFTER_LOADING
    • Constructor Detail

      • NativeLibraryLoader

        private NativeLibraryLoader()
    • Method Detail

      • getWorkDir

        private static java.io.File getWorkDir()
      • loadFirstAvailable

        static boolean loadFirstAvailable​(java.lang.ClassLoader loader,
                                          java.util.List<NativeLibraryLoader.LoadResult> results,
                                          java.lang.String... names)
        Loads the first available library in the collection with the specified ClassLoader.
      • load

        private static boolean load​(java.lang.String name,
                                    java.lang.ClassLoader loader,
                                    java.util.List<NativeLibraryLoader.LoadResult> results)
        Load the given library with the specified ClassLoader
      • loadFromWorkdir

        private static boolean loadFromWorkdir​(java.lang.String name,
                                               java.lang.ClassLoader loader,
                                               java.util.List<NativeLibraryLoader.LoadResult> results)
      • copyLibrary

        private static void copyLibrary​(java.net.URL classpathUrl,
                                        java.io.File tmpFile)
                                 throws java.io.IOException
        Copies the given shared library file from classpath to a temporary file.
        Parameters:
        classpathUrl - the URL of the library on classpath
        tmpFile - the destination temporary file.
        Throws:
        java.io.IOException
      • loadLibrary

        private static boolean loadLibrary​(java.lang.ClassLoader loader,
                                           java.lang.String name,
                                           boolean absolute,
                                           java.util.List<NativeLibraryLoader.LoadResult> results)
        Loading the native library into the specified ClassLoader.
        Parameters:
        loader - - The ClassLoader where the native library will be loaded into
        name - - The native library path or name
        absolute - - Whether the native library will be loaded by path or by name
        Returns:
        true if the library was successfully loaded.
      • loadLibraryFromHelperClassloader

        private static NativeLibraryLoader.LoadResult loadLibraryFromHelperClassloader​(java.lang.Class<?> helper,
                                                                                       java.lang.String name,
                                                                                       boolean absolute)
        Attempts to load the library by reflectively using the NativeLibraryUtil helper from its classloader.
        Parameters:
        helper - The NativeLibraryUtil helper class
        name - the name of the library to load.
        absolute - true if name is an absolute path to the file.
        Returns:
        the result of the load operation.
      • loadLibraryFromCurrentClassloader

        private static NativeLibraryLoader.LoadResult loadLibraryFromCurrentClassloader​(java.lang.String name,
                                                                                        boolean absolute)
        Attempts to load the library using the NativeLibraryUtil helper from the current classloader.
        Parameters:
        name - the name of the library to load.
        absolute - true if name is an absolute path
        Returns:
        the result of the load operation.
      • tryToLoadClass

        private static java.lang.Class<?> tryToLoadClass​(java.lang.ClassLoader loader,
                                                         java.lang.Class<?> helper)
                                                  throws java.lang.ClassNotFoundException
        Try to load the helper Class into specified ClassLoader.
        Parameters:
        loader - - The ClassLoader where to load the helper Class
        helper - - The helper Class
        Returns:
        A new helper Class defined in the specified ClassLoader.
        Throws:
        java.lang.ClassNotFoundException - Helper class not found or loading failed
      • classToByteArray

        private static byte[] classToByteArray​(java.lang.Class<?> clazz)
                                        throws java.lang.ClassNotFoundException
        Load the helper Class as a byte array, to be redefined in specified ClassLoader.
        Parameters:
        clazz - - The helper Class provided by this bundle
        Returns:
        The binary content of helper Class.
        Throws:
        java.lang.ClassNotFoundException - Helper class not found or loading failed
      • closeQuietly

        private static void closeQuietly​(java.io.Closeable c)
      • log

        private static void log​(java.lang.String format,
                                java.lang.Object arg)
      • log

        private static void log​(java.lang.String format,
                                java.lang.Object arg1,
                                java.lang.Object arg2)
      • log

        private static void log​(java.lang.String format,
                                java.lang.Object arg1,
                                java.lang.Object arg2,
                                java.lang.Throwable t)
      • debug

        private static void debug​(java.lang.String message,
                                  java.lang.Throwable t)