javastringdynamic-class-loaders

How to remove this use of dynamic class loading or replace this class loading?


othersMap.put("maskedPan", Class.forName("Some Class"));

Remove this use of dynamic class loading.

Rule

Changelog Classes should not be loaded dynamically Dynamically loaded classes could contain malicious code executed by a static class initializer. I.E. you wouldn't even have to instantiate or explicitly invoke methods on such classes to be vulnerable to an attack. This rule raises an issue for each use of dynamic class loading. Noncompliant Code Example

String className = System.getProperty("messageClassName");
Class clazz = Class.forName(className);  // Noncompliant

See


Solution

  • One option would be something like that:

    Class<?> cls;
    
    switch (System.getProperty("messageClassName")){
       case "com.example.Message1":
         cls = com.example.Message1.class;
         break;
    ...
    }