docs: public String[] getCodeBaseLoc(Permission perm) {
  
          final Permission inPerm = perm;
  
          return AccessController.doPrivileged(new java.security.PrivilegedAction<String[]>() {
  
              @Override
              public String[] run() {
  
                  Class<?>[] classes = getClassContext();
  
                  StringBuffer sb = new StringBuffer(classes.length * 100);
                  sb.append(lineSep);
  
                  // one for offending class and the other for code base
                  // location
                  String[] retMsg = new String[2];
  
                  for (int i = 0; i < classes.length; i++) {
  
                      Class<?> clazz = classes[i];
                      ProtectionDomain pd = clazz.getProtectionDomain();
  
                      // check for occurrence of checkPermission from stack
                      if (classes[i].getName().indexOf("com.ibm.ws.kernel.launch.internal.NoRethrowSecurityManager") != -1) {
  
                          // found SecurityManager, start to go through
                          // the stack starting next class
                          for (int j = i + 1; j < classes.length; j++) {
  
                              if (classes[j].getName().indexOf("java.lang.ClassLoader") != -1) {
  
                                  if (tc.isDebugEnabled())
                                      Tr.debug(tc, "Not printing AccessError since ClassLoader.getResource returns null per JavaDoc when privileges not there.");
                                  String[] codebaseloc = new String[2];
                                  codebaseloc[0] = "_nolog";
                                  codebaseloc[1] = "";
                                  return codebaseloc;
                              }
  
                              ProtectionDomain pd2 = classes[j].getProtectionDomain();
                              if (isOffendingClass(classes, j, pd2, inPerm)) {
                                  retMsg[0] = lineSep + lineSep +
                                              "     " + classes[j].getName() + "  in  " + "{" + getCodeSource(pd2) + "}" +
                                              lineSep +
                                              lineSep;
  
                                  break;
                              }
  
                          }
  
                      }
  
                      java.security.CodeSource cs = pd.getCodeSource();
                      String csStr = getCodeSource(pd);
  
                      // class name : location
                      sb.append(classes[i].getName()).append(" : ").append(csStr + lineSep);
                      sb.append("  ").append(permissionToString(cs, clazz.getClassLoader(), pd.getPermissions()))
                                      .append(lineSep);
                  }
  
                  if (tc.isDebugEnabled())
                      Tr.debug(tc, "Permission Error Code is " + retMsg[0]);
                  if (tc.isDebugEnabled())
                      Tr.debug(tc, "Code Base Location: is " + sb.toString());
  
                  retMsg[1] = "";
                  return retMsg;
              }
          });
      }