{"record":{"id":"e5218ec1605d6b16","repo":"apache/dubbo","slug":"no-instance-of-configurationutils-for-you","errorCode":null,"errorMessage":"No instance of 'ConfigurationUtils' for you! ","messagePattern":"No instance of 'ConfigurationUtils' for you! ","errorType":"exception","errorClass":"UnsupportedOperationException","httpStatus":null,"severity":"error","filePath":"dubbo-common/src/main/java/org/apache/dubbo/common/config/ConfigurationUtils.java","lineNumber":56,"sourceCode":"import java.util.Objects;\nimport java.util.Properties;\nimport java.util.Set;\n\nimport static org.apache.dubbo.common.constants.CommonConstants.DEFAULT_SERVER_SHUTDOWN_TIMEOUT;\nimport static org.apache.dubbo.common.constants.CommonConstants.SHUTDOWN_WAIT_KEY;\nimport static org.apache.dubbo.common.constants.CommonConstants.SHUTDOWN_WAIT_SECONDS_KEY;\nimport static org.apache.dubbo.common.constants.LoggerCodeConstants.COMMON_PROPERTY_TYPE_MISMATCH;\n\n/**\n * Utilities for manipulating configurations from different sources\n */\npublic final class ConfigurationUtils {\n\n    /**\n     * Forbids instantiation.\n     */\n    private ConfigurationUtils() {\n        throw new UnsupportedOperationException(\"No instance of 'ConfigurationUtils' for you! \");\n    }\n\n    private static final ErrorTypeAwareLogger logger = LoggerFactory.getErrorTypeAwareLogger(ConfigurationUtils.class);\n    private static final Set<String> securityKey;\n\n    private static volatile long expectedShutdownTime = Long.MAX_VALUE;\n\n    static {\n        Set<String> keys = new HashSet<>();\n        keys.add(\"accesslog\");\n        keys.add(\"router\");\n        keys.add(\"rule\");\n        keys.add(\"runtime\");\n        keys.add(\"type\");\n        securityKey = Collections.unmodifiableSet(keys);\n    }\n\n    /**","sourceCodeStart":38,"sourceCodeEnd":74,"githubUrl":"https://github.com/apache/dubbo/blob/3a3043227f5571d25eb2889de5bca22f2914843b/dubbo-common/src/main/java/org/apache/dubbo/common/config/ConfigurationUtils.java#L38-L74","documentation":"Thrown from the private constructor of ConfigurationUtils, which is a final utility class with only static methods. The constructor always throws UnsupportedOperationException to prevent accidental instantiation. This is a standard pattern for enforcing that a utility class is never instantiated.","triggerScenarios":"Any code that calls new ConfigurationUtils() — whether via reflection (Constructor.setAccessible(true) + newInstance) or by a subclass/caller that bypasses the private modifier through an accessibility hack. Normal usage (static method calls) never triggers this.","commonSituations":"Reflection-based frameworks (certain serialization or DI containers) that try to instantiate any class they encounter. Unit-test mocking frameworks that attempt to create instances of classes they should not. A developer unfamiliar with the utility-class pattern writing new ConfigurationUtils().getGlobalProperty(...).","solutions":["Stop instantiating the class — all methods on ConfigurationUtils are static. Call them directly: ConfigurationUtils.getProperty(scopeModel, key).","If a reflection-based framework is responsible, configure it to exclude ConfigurationUtils from instantiation (e.g. Objenesis exclusions, Jackson @JsonIgnoreType, or module-specific excludes).","If testing, mock the static methods (e.g. Mockito mockStatic) rather than constructing an instance."],"exampleFix":"// before\nConfigurationUtils utils = new ConfigurationUtils();\nString v = utils.getProperty(scopeModel, \"key\");\n\n// after\nString v = ConfigurationUtils.getProperty(scopeModel, \"key\");","handlingStrategy":"validation","validationCode":"// Ensure you never call 'new ConfigurationUtils()'.\n// Use static access only:\nConfigurationUtils.getProperty(scopeModel, key);","typeGuard":"if (clazz == ConfigurationUtils.class) {\n    // do not attempt instantiation; all members are static\n    throw new UnsupportedOperationException(\"ConfigurationUtils is a utility class\");\n}","tryCatchPattern":"try {\n    Constructor<?> c = clazz.getDeclaredConstructor();\n    c.setAccessible(true);\n    c.newInstance();\n} catch (InvocationTargetException e) {\n    if (e.getCause() instanceof UnsupportedOperationException) {\n        // expected for utility classes — skip\n    }\n}","preventionTips":["Never instantiate utility classes — use static method calls.","Configure reflection frameworks (Objenesis, serialization libs) to exclude utility classes.","In tests, use mockStatic instead of constructing instances."],"tags":["utility-class","instantiation","reflection"],"backgroundTag":null,"analyzedSha":"3a3043227f5571d25eb2889de5bca22f2914843b","analyzedAt":"2026-08-14T00:43:19.853Z","schemaVersion":2},"datasetVersion":"2026-08-14T05:17:29.042Z"}