public class org.apache.naming.factory.ResourceLinkFactory implements javax.naming.spi.ObjectFactory
  minor version: 0
  major version: 59
  flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: org.apache.naming.factory.ResourceLinkFactory
  super_class: java.lang.Object
{
  protected static final org.apache.naming.StringManager sm;
    descriptor: Lorg/apache/naming/StringManager;
    flags: (0x001c) ACC_PROTECTED, ACC_STATIC, ACC_FINAL

  private static javax.naming.Context globalContext;
    descriptor: Ljavax/naming/Context;
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC

  private static java.util.Map<java.lang.ClassLoader, java.util.Map<java.lang.String, java.lang.String>> globalResourceRegistrations;
    descriptor: Ljava/util/Map;
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Signature: Ljava/util/Map<Ljava/lang/ClassLoader;Ljava/util/Map<Ljava/lang/String;Ljava/lang/String;>;>;

  static void <clinit>();
    descriptor: ()V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=2, locals=0, args_size=0
         0: .line 43
            ldc Lorg/apache/naming/factory/ResourceLinkFactory;
            invokestatic org.apache.naming.StringManager.getManager:(Ljava/lang/Class;)Lorg/apache/naming/StringManager;
            putstatic org.apache.naming.factory.ResourceLinkFactory.sm:Lorg/apache/naming/StringManager;
         1: .line 48
            aconst_null
            putstatic org.apache.naming.factory.ResourceLinkFactory.globalContext:Ljavax/naming/Context;
         2: .line 51
            new java.util.concurrent.ConcurrentHashMap
            dup
            invokespecial java.util.concurrent.ConcurrentHashMap.<init>:()V
         3: .line 50
            putstatic org.apache.naming.factory.ResourceLinkFactory.globalResourceRegistrations:Ljava/util/Map;
         4: .line 51
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  public void <init>();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.apache.naming.factory.ResourceLinkFactory this
         0: .line 39
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
            return
        end local 0 // org.apache.naming.factory.ResourceLinkFactory this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/apache/naming/factory/ResourceLinkFactory;

  public static void setGlobalContext(javax.naming.Context);
    descriptor: (Ljavax/naming/Context;)V
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=6, locals=2, args_size=1
        start local 0 // javax.naming.Context newGlobalContext
         0: .line 61
            invokestatic java.lang.System.getSecurityManager:()Ljava/lang/SecurityManager;
            astore 1 /* sm */
        start local 1 // java.lang.SecurityManager sm
         1: .line 62
            aload 1 /* sm */
            ifnull 5
         2: .line 63
            aload 1 /* sm */
            new java.lang.RuntimePermission
            dup
         3: .line 64
            new java.lang.StringBuilder
            dup
            ldc Lorg/apache/naming/factory/ResourceLinkFactory;
            invokevirtual java.lang.Class.getName:()Ljava/lang/String;
            invokestatic java.lang.String.valueOf:(Ljava/lang/Object;)Ljava/lang/String;
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            ldc ".setGlobalContext"
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokespecial java.lang.RuntimePermission.<init>:(Ljava/lang/String;)V
         4: .line 63
            invokevirtual java.lang.SecurityManager.checkPermission:(Ljava/security/Permission;)V
         5: .line 66
      StackMap locals: java.lang.SecurityManager
      StackMap stack:
            aload 0 /* newGlobalContext */
            putstatic org.apache.naming.factory.ResourceLinkFactory.globalContext:Ljavax/naming/Context;
         6: .line 67
            return
        end local 1 // java.lang.SecurityManager sm
        end local 0 // javax.naming.Context newGlobalContext
      LocalVariableTable:
        Start  End  Slot              Name  Signature
            0    7     0  newGlobalContext  Ljavax/naming/Context;
            1    7     1                sm  Ljava/lang/SecurityManager;
    MethodParameters:
                  Name  Flags
      newGlobalContext  

  public static void registerGlobalResourceAccess(javax.naming.Context, java.lang.String, java.lang.String);
    descriptor: (Ljavax/naming/Context;Ljava/lang/String;Ljava/lang/String;)V
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=3, locals=5, args_size=3
        start local 0 // javax.naming.Context globalContext
        start local 1 // java.lang.String localName
        start local 2 // java.lang.String globalName
         0: .line 72
            aload 0 /* globalContext */
            invokestatic org.apache.naming.factory.ResourceLinkFactory.validateGlobalContext:(Ljavax/naming/Context;)V
         1: .line 73
            invokestatic java.lang.Thread.currentThread:()Ljava/lang/Thread;
            invokevirtual java.lang.Thread.getContextClassLoader:()Ljava/lang/ClassLoader;
            astore 3 /* cl */
        start local 3 // java.lang.ClassLoader cl
         2: .line 74
            getstatic org.apache.naming.factory.ResourceLinkFactory.globalResourceRegistrations:Ljava/util/Map;
            aload 3 /* cl */
            invokeinterface java.util.Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast java.util.Map
            astore 4 /* registrations */
        start local 4 // java.util.Map registrations
         3: .line 75
            aload 4 /* registrations */
            ifnonnull 6
         4: .line 78
            new java.util.HashMap
            dup
            invokespecial java.util.HashMap.<init>:()V
            astore 4 /* registrations */
         5: .line 79
            getstatic org.apache.naming.factory.ResourceLinkFactory.globalResourceRegistrations:Ljava/util/Map;
            aload 3 /* cl */
            aload 4 /* registrations */
            invokeinterface java.util.Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
         6: .line 81
      StackMap locals: java.lang.ClassLoader java.util.Map
      StackMap stack:
            aload 4 /* registrations */
            aload 1 /* localName */
            aload 2 /* globalName */
            invokeinterface java.util.Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
         7: .line 82
            return
        end local 4 // java.util.Map registrations
        end local 3 // java.lang.ClassLoader cl
        end local 2 // java.lang.String globalName
        end local 1 // java.lang.String localName
        end local 0 // javax.naming.Context globalContext
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0    8     0  globalContext  Ljavax/naming/Context;
            0    8     1      localName  Ljava/lang/String;
            0    8     2     globalName  Ljava/lang/String;
            2    8     3             cl  Ljava/lang/ClassLoader;
            3    8     4  registrations  Ljava/util/Map<Ljava/lang/String;Ljava/lang/String;>;
    MethodParameters:
               Name  Flags
      globalContext  
      localName      
      globalName     

  public static void deregisterGlobalResourceAccess(javax.naming.Context, java.lang.String);
    descriptor: (Ljavax/naming/Context;Ljava/lang/String;)V
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=2, locals=4, args_size=2
        start local 0 // javax.naming.Context globalContext
        start local 1 // java.lang.String localName
         0: .line 86
            aload 0 /* globalContext */
            invokestatic org.apache.naming.factory.ResourceLinkFactory.validateGlobalContext:(Ljavax/naming/Context;)V
         1: .line 87
            invokestatic java.lang.Thread.currentThread:()Ljava/lang/Thread;
            invokevirtual java.lang.Thread.getContextClassLoader:()Ljava/lang/ClassLoader;
            astore 2 /* cl */
        start local 2 // java.lang.ClassLoader cl
         2: .line 88
            getstatic org.apache.naming.factory.ResourceLinkFactory.globalResourceRegistrations:Ljava/util/Map;
            aload 2 /* cl */
            invokeinterface java.util.Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast java.util.Map
            astore 3 /* registrations */
        start local 3 // java.util.Map registrations
         3: .line 89
            aload 3 /* registrations */
            ifnull 5
         4: .line 90
            aload 3 /* registrations */
            aload 1 /* localName */
            invokeinterface java.util.Map.remove:(Ljava/lang/Object;)Ljava/lang/Object;
            pop
         5: .line 92
      StackMap locals: java.lang.ClassLoader java.util.Map
      StackMap stack:
            return
        end local 3 // java.util.Map registrations
        end local 2 // java.lang.ClassLoader cl
        end local 1 // java.lang.String localName
        end local 0 // javax.naming.Context globalContext
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0    6     0  globalContext  Ljavax/naming/Context;
            0    6     1      localName  Ljava/lang/String;
            2    6     2             cl  Ljava/lang/ClassLoader;
            3    6     3  registrations  Ljava/util/Map<Ljava/lang/String;Ljava/lang/String;>;
    MethodParameters:
               Name  Flags
      globalContext  
      localName      

  public static void deregisterGlobalResourceAccess(javax.naming.Context);
    descriptor: (Ljavax/naming/Context;)V
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=2, locals=2, args_size=1
        start local 0 // javax.naming.Context globalContext
         0: .line 96
            aload 0 /* globalContext */
            invokestatic org.apache.naming.factory.ResourceLinkFactory.validateGlobalContext:(Ljavax/naming/Context;)V
         1: .line 97
            invokestatic java.lang.Thread.currentThread:()Ljava/lang/Thread;
            invokevirtual java.lang.Thread.getContextClassLoader:()Ljava/lang/ClassLoader;
            astore 1 /* cl */
        start local 1 // java.lang.ClassLoader cl
         2: .line 98
            getstatic org.apache.naming.factory.ResourceLinkFactory.globalResourceRegistrations:Ljava/util/Map;
            aload 1 /* cl */
            invokeinterface java.util.Map.remove:(Ljava/lang/Object;)Ljava/lang/Object;
            pop
         3: .line 99
            return
        end local 1 // java.lang.ClassLoader cl
        end local 0 // javax.naming.Context globalContext
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0    4     0  globalContext  Ljavax/naming/Context;
            2    4     1             cl  Ljava/lang/ClassLoader;
    MethodParameters:
               Name  Flags
      globalContext  

  private static void validateGlobalContext(javax.naming.Context);
    descriptor: (Ljavax/naming/Context;)V
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=4, locals=1, args_size=1
        start local 0 // javax.naming.Context globalContext
         0: .line 103
            getstatic org.apache.naming.factory.ResourceLinkFactory.globalContext:Ljavax/naming/Context;
            ifnull 3
         1: .line 104
            getstatic org.apache.naming.factory.ResourceLinkFactory.globalContext:Ljavax/naming/Context;
            aload 0 /* globalContext */
            if_acmpeq 3
         2: .line 105
            new java.lang.SecurityException
            dup
            getstatic org.apache.naming.factory.ResourceLinkFactory.sm:Lorg/apache/naming/StringManager;
            ldc "resourceLinkFactory.invalidGlobalContext"
            invokevirtual org.apache.naming.StringManager.getString:(Ljava/lang/String;)Ljava/lang/String;
            invokespecial java.lang.SecurityException.<init>:(Ljava/lang/String;)V
            athrow
         3: .line 107
      StackMap locals:
      StackMap stack:
            return
        end local 0 // javax.naming.Context globalContext
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0    4     0  globalContext  Ljavax/naming/Context;
    MethodParameters:
               Name  Flags
      globalContext  

  private static boolean validateGlobalResourceAccess(java.lang.String);
    descriptor: (Ljava/lang/String;)Z
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC
    Code:
      stack=2, locals=3, args_size=1
        start local 0 // java.lang.String globalName
         0: .line 111
            invokestatic java.lang.Thread.currentThread:()Ljava/lang/Thread;
            invokevirtual java.lang.Thread.getContextClassLoader:()Ljava/lang/ClassLoader;
            astore 1 /* cl */
        start local 1 // java.lang.ClassLoader cl
         1: .line 112
            goto 6
         2: .line 113
      StackMap locals: java.lang.ClassLoader
      StackMap stack:
            getstatic org.apache.naming.factory.ResourceLinkFactory.globalResourceRegistrations:Ljava/util/Map;
            aload 1 /* cl */
            invokeinterface java.util.Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast java.util.Map
            astore 2 /* registrations */
        start local 2 // java.util.Map registrations
         3: .line 114
            aload 2 /* registrations */
            ifnull 5
            aload 2 /* registrations */
            aload 0 /* globalName */
            invokeinterface java.util.Map.containsValue:(Ljava/lang/Object;)Z
            ifeq 5
         4: .line 115
            iconst_1
            ireturn
         5: .line 117
      StackMap locals: java.util.Map
      StackMap stack:
            aload 1 /* cl */
            invokevirtual java.lang.ClassLoader.getParent:()Ljava/lang/ClassLoader;
            astore 1 /* cl */
        end local 2 // java.util.Map registrations
         6: .line 112
      StackMap locals:
      StackMap stack:
            aload 1 /* cl */
            ifnonnull 2
         7: .line 119
            iconst_0
            ireturn
        end local 1 // java.lang.ClassLoader cl
        end local 0 // java.lang.String globalName
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0    8     0     globalName  Ljava/lang/String;
            1    8     1             cl  Ljava/lang/ClassLoader;
            3    6     2  registrations  Ljava/util/Map<Ljava/lang/String;Ljava/lang/String;>;
    MethodParameters:
            Name  Flags
      globalName  

  public  getObjectInstance(, javax.naming.Name, javax.naming.Context, java.util.Hashtable<?, ?>);
    descriptor: (Ljava/lang/Object;Ljavax/naming/Name;Ljavax/naming/Context;Ljava/util/Hashtable;)Ljava/lang/Object;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=8, locals=11, args_size=5
        start local 0 // org.apache.naming.factory.ResourceLinkFactory this
        start local 1 // java.lang.Object obj
        start local 2 // javax.naming.Name name
        start local 3 // javax.naming.Context nameCtx
        start local 4 // java.util.Hashtable environment
         0: .line 134
            aload 1 /* obj */
            instanceof org.apache.naming.ResourceLinkRef
            ifne 2
         1: .line 135
            aconst_null
            areturn
         2: .line 139
      StackMap locals:
      StackMap stack:
            aload 1 /* obj */
            checkcast javax.naming.Reference
            astore 5 /* ref */
        start local 5 // javax.naming.Reference ref
         3: .line 142
            aconst_null
            astore 6 /* globalName */
        start local 6 // java.lang.String globalName
         4: .line 143
            aload 5 /* ref */
            ldc "globalName"
            invokevirtual javax.naming.Reference.get:(Ljava/lang/String;)Ljavax/naming/RefAddr;
            astore 7 /* refAddr */
        start local 7 // javax.naming.RefAddr refAddr
         5: .line 144
            aload 7 /* refAddr */
            ifnull 29
         6: .line 145
            aload 7 /* refAddr */
            invokevirtual javax.naming.RefAddr.getContent:()Ljava/lang/Object;
            invokevirtual java.lang.Object.toString:()Ljava/lang/String;
            astore 6 /* globalName */
         7: .line 148
            aload 6 /* globalName */
            invokestatic org.apache.naming.factory.ResourceLinkFactory.validateGlobalResourceAccess:(Ljava/lang/String;)Z
            ifne 9
         8: .line 149
            aconst_null
            areturn
         9: .line 151
      StackMap locals: javax.naming.Reference java.lang.String javax.naming.RefAddr
      StackMap stack:
            aconst_null
            astore 8 /* result */
        start local 8 // java.lang.Object result
        10: .line 152
            getstatic org.apache.naming.factory.ResourceLinkFactory.globalContext:Ljavax/naming/Context;
            aload 6 /* globalName */
            invokeinterface javax.naming.Context.lookup:(Ljava/lang/String;)Ljava/lang/Object;
            astore 8 /* result */
        11: .line 154
            aload 5 /* ref */
            invokevirtual javax.naming.Reference.getClassName:()Ljava/lang/String;
            astore 9 /* expectedClassName */
        start local 9 // java.lang.String expectedClassName
        12: .line 155
            aload 9 /* expectedClassName */
            ifnonnull 16
        13: .line 156
            new java.lang.IllegalArgumentException
            dup
        14: .line 157
            getstatic org.apache.naming.factory.ResourceLinkFactory.sm:Lorg/apache/naming/StringManager;
            ldc "resourceLinkFactory.nullType"
            iconst_2
            anewarray java.lang.Object
            dup
            iconst_0
            aload 2 /* name */
            aastore
            dup
            iconst_1
            aload 6 /* globalName */
            aastore
            invokevirtual org.apache.naming.StringManager.getString:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
        15: .line 156
            invokespecial java.lang.IllegalArgumentException.<init>:(Ljava/lang/String;)V
            athrow
        16: .line 161
      StackMap locals: java.lang.Object java.lang.String
      StackMap stack:
            aload 9 /* expectedClassName */
            iconst_1
            invokestatic java.lang.Thread.currentThread:()Ljava/lang/Thread;
            invokevirtual java.lang.Thread.getContextClassLoader:()Ljava/lang/ClassLoader;
        17: .line 160
            invokestatic java.lang.Class.forName:(Ljava/lang/String;ZLjava/lang/ClassLoader;)Ljava/lang/Class;
            astore 10 /* expectedClazz */
        start local 10 // java.lang.Class expectedClazz
        18: .line 162
            aload 10 /* expectedClazz */
            aload 8 /* result */
            invokevirtual java.lang.Object.getClass:()Ljava/lang/Class;
            invokevirtual java.lang.Class.isAssignableFrom:(Ljava/lang/Class;)Z
            ifne 28
        19: .line 163
            new java.lang.IllegalArgumentException
            dup
            getstatic org.apache.naming.factory.ResourceLinkFactory.sm:Lorg/apache/naming/StringManager;
            ldc "resourceLinkFactory.wrongType"
            iconst_4
            anewarray java.lang.Object
            dup
            iconst_0
        20: .line 164
            aload 2 /* name */
            aastore
            dup
            iconst_1
            aload 6 /* globalName */
            aastore
            dup
            iconst_2
            aload 9 /* expectedClassName */
            aastore
            dup
            iconst_3
            aload 8 /* result */
            invokevirtual java.lang.Object.getClass:()Ljava/lang/Class;
            invokevirtual java.lang.Class.getName:()Ljava/lang/String;
            aastore
        21: .line 163
            invokevirtual org.apache.naming.StringManager.getString:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
            invokespecial java.lang.IllegalArgumentException.<init>:(Ljava/lang/String;)V
            athrow
        end local 10 // java.lang.Class expectedClazz
        22: .line 166
      StackMap locals:
      StackMap stack: java.lang.ClassNotFoundException
            astore 10 /* e */
        start local 10 // java.lang.ClassNotFoundException e
        23: .line 167
            new java.lang.IllegalArgumentException
            dup
            getstatic org.apache.naming.factory.ResourceLinkFactory.sm:Lorg/apache/naming/StringManager;
            ldc "resourceLinkFactory.unknownType"
            iconst_3
            anewarray java.lang.Object
            dup
            iconst_0
        24: .line 168
            aload 2 /* name */
            aastore
            dup
            iconst_1
            aload 6 /* globalName */
            aastore
            dup
            iconst_2
            aload 9 /* expectedClassName */
            aastore
        25: .line 167
            invokevirtual org.apache.naming.StringManager.getString:(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
        26: .line 168
            aload 10 /* e */
        27: .line 167
            invokespecial java.lang.IllegalArgumentException.<init>:(Ljava/lang/String;Ljava/lang/Throwable;)V
            athrow
        end local 10 // java.lang.ClassNotFoundException e
        28: .line 170
      StackMap locals:
      StackMap stack:
            aload 8 /* result */
            areturn
        end local 9 // java.lang.String expectedClassName
        end local 8 // java.lang.Object result
        29: .line 173
      StackMap locals:
      StackMap stack:
            aconst_null
            areturn
        end local 7 // javax.naming.RefAddr refAddr
        end local 6 // java.lang.String globalName
        end local 5 // javax.naming.Reference ref
        end local 4 // java.util.Hashtable environment
        end local 3 // javax.naming.Context nameCtx
        end local 2 // javax.naming.Name name
        end local 1 // java.lang.Object obj
        end local 0 // org.apache.naming.factory.ResourceLinkFactory this
      LocalVariableTable:
        Start  End  Slot               Name  Signature
            0   30     0               this  Lorg/apache/naming/factory/ResourceLinkFactory;
            0   30     1                obj  Ljava/lang/Object;
            0   30     2               name  Ljavax/naming/Name;
            0   30     3            nameCtx  Ljavax/naming/Context;
            0   30     4        environment  Ljava/util/Hashtable<**>;
            3   30     5                ref  Ljavax/naming/Reference;
            4   30     6         globalName  Ljava/lang/String;
            5   30     7            refAddr  Ljavax/naming/RefAddr;
           10   29     8             result  Ljava/lang/Object;
           12   29     9  expectedClassName  Ljava/lang/String;
           18   22    10      expectedClazz  Ljava/lang/Class<*>;
           23   28    10                  e  Ljava/lang/ClassNotFoundException;
      Exception table:
        from    to  target  type
          16    22      22  Class java.lang.ClassNotFoundException
    Exceptions:
      throws javax.naming.NamingException
    Signature: (Ljava/lang/Object;Ljavax/naming/Name;Ljavax/naming/Context;Ljava/util/Hashtable<**>;)Ljava/lang/Object;
    MethodParameters:
             Name  Flags
      obj          
      name         
      nameCtx      
      environment  
}
SourceFile: "ResourceLinkFactory.java"