docs: public synchronized static PmiModuleConfig getConfigFromXMLFile(String xmlFilePath, boolean bFromCache, boolean bValidate) {
          //System.out.println ("[PerfModules] getConfigFromXMLFile(): " +xmlFilePath);
          PmiModuleConfig config = null;
          // if xmlFilePath = /com/ibm/websphere/pmi/customMod.xml
          // the moduleName/ID = customMod
  
          // Check in HashMap only if "bFromCache" is true
          // Otherwise, create a new instance of PmiModuleConfig - used in StatsImpl
          // to return the translated static info        
  
          // VELA: PmiModuleConfig is cached with UID and not the shortName
          String modUID = getModuleUID(xmlFilePath);
          //System.out.println("### ModUID="+modUID);
          config = (PmiModuleConfig) moduleConfigs.get(modUID);
          //System.out.println("### config="+config);
          if (bFromCache) {
              // PmiModuleConfig is cached with moduleID (last part of the xml file name) as key.            
              // This ASSUMES that moduleID is same as the XML file name
              // If moduleID and xml file names are different then XML will be parsed and loaded each time
              // NOTE:Module Name *MUST* be unique!
              /*
               * File f = new File (xmlFilePath);
               * String fileName = f.getName();
               * int dotLoc = fileName.lastIndexOf(".");
               * if (dotLoc != -1)
               * {
               * String modName = fileName.substring (0, dotLoc-1);
               * config = (PmiModuleConfig)moduleConfigs.get (modName);
               * 
               * if(config != null)
               * {
               * return config;
               * }
               * }
               */
              if (config != null) {
                  return config;
              }
          } else {
              // FIXED: When bFromCache = false and create a copy of the PmiModuleConfig instead of parsing the XML file again
              // added copy () to PmiModuleConfig and PmiDataInfo
              if (config != null) {
                  return config.copy();
              }
          }
          //System.out.println("#### not found in cache");
          // Not found in cache. Try StatsTemplateLookup before loading from disk.          
          if (bEnableStatsTemplateLookup) {
              int lookupCount = lookupList.size();
              for (int i = 0; i < lookupCount; i++) {
                  config = ((StatsTemplateLookup) lookupList.get(i)).getTemplate(modUID);
                  if (config != null)
                      break;
                  else {
                      // may be pre-defined. cut "com.ibm.websphere.pmi.xml." - 26 chars
                      if (modUID.startsWith(DEFAULT_MODULE_PREFIX)) {
                          config = ((StatsTemplateLookup) lookupList.get(i)).getTemplate(modUID.substring(26));
                          if (config != null)
                              break;
                      }
                  }
              }
  
              if (config != null) {
                  if (tc.isDebugEnabled())
                      Tr.debug(tc, "StatsTemplateLookup available for: " + xmlFilePath);
  
                  config.setMbeanType("");
                  moduleConfigs.put(config.getUID(), config);
  
                  if (!bFromCache)
                      return config.copy();
                  else
                      return config;
              } else {
                  //System.out.println("---1 StatsTemplateLookup NOT available for: " + xmlFilePath );
                  if (tc.isDebugEnabled())
  
                      Tr.debug(tc, "StatsTemplateLookup NOT available for: " + xmlFilePath);
              }
          }
          //System.out.println("StatsTemplateLookup NOT available for: " + xmlFilePath );
  
          // Not found in hard-coded lookup class. Load file from disk and parse it        
          // d175652: ------ security code
          final String _xmlFile = xmlFilePath;
          final boolean _bDTDValidation = bValidate;
          parseException = null;
  
          try {
              //System.out.println("######## tryingt to get Config for "+_xmlFile);
              config = (PmiModuleConfig)
                              AccessController.doPrivileged(
                                              new PrivilegedExceptionAction()
                              {
                                  public Object run() throws Exception
                              {
                                  return parser.parse(_xmlFile, _bDTDValidation);
                              }
                              });
          } catch (PrivilegedActionException e) {
              parseException = e.getException();
          }
  
          // ------ security code
  
          // Not in HashMap. Parse file
          //config = parser.parse(xmlFilePath, bValidate);   // validate with DTD
          //System.out.println("######## Config ="+config);
          if (config != null) {
              if (bFromCache) {
                  // there is no mbean type defined in template for custom pmi template
                  // so set to none - to avoid PMI0006W in PmiJmxMapper
                  config.setMbeanType("");
  
                  //String moduleID = config.getShortName();
                  //moduleConfigs.put(moduleID, config);
  
                  // VELA: cache using UID as key "com.ibm.websphere.pmi.xml.beanModule"
                  moduleConfigs.put(config.getUID(), config);
  
                  if (tc.isDebugEnabled())
                      Tr.debug(tc, "Read PMI config for stats type: " + config.getUID());
  
                  return config;
              } else
                  return config.copy();
          } else {
              return config; // null
          }
      }