{"record":{"id":"95eea3f24361bf03","repo":"apache/flink","slug":"unknown-class-resolution-order-resolveorder","errorCode":null,"errorMessage":"Unknown class resolution order: {resolveOrder}","messagePattern":"Unknown class resolution order: (.+?)","errorType":"validation","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"flink-core/src/main/java/org/apache/flink/util/FlinkUserCodeClassLoaders.java","lineNumber":100,"sourceCode":"            URL[] urls,\n            ClassLoader parent,\n            String[] alwaysParentFirstPatterns,\n            Consumer<Throwable> classLoadingExceptionHandler,\n            boolean checkClassLoaderLeak) {\n\n        switch (resolveOrder) {\n            case CHILD_FIRST:\n                return childFirst(\n                        urls,\n                        parent,\n                        alwaysParentFirstPatterns,\n                        classLoadingExceptionHandler,\n                        checkClassLoaderLeak);\n            case PARENT_FIRST:\n                return parentFirst(\n                        urls, parent, classLoadingExceptionHandler, checkClassLoaderLeak);\n            default:\n                throw new IllegalArgumentException(\n                        \"Unknown class resolution order: \" + resolveOrder);\n        }\n    }\n\n    private static MutableURLClassLoader wrapWithSafetyNet(\n            FlinkUserCodeClassLoader classLoader, boolean check) {\n        return check\n                ? new SafetyNetWrapperClassLoader(classLoader, classLoader.getParent())\n                : classLoader;\n    }\n\n    /** Class resolution order for Flink URL {@link ClassLoader}. */\n    public enum ResolveOrder {\n        CHILD_FIRST,\n        PARENT_FIRST;\n\n        public static ResolveOrder fromString(String resolveOrder) {\n            if (resolveOrder.equalsIgnoreCase(\"parent-first\")) {","sourceCodeStart":82,"sourceCodeEnd":118,"githubUrl":"https://github.com/apache/flink/blob/2f3c205e9266cb30240eb7f4fdab15cad629a70f/flink-core/src/main/java/org/apache/flink/util/FlinkUserCodeClassLoaders.java#L82-L118","documentation":"FlinkUserCodeClassLoaders.getClassLoader(...) switch-cases the ResolveOrder enum: CHILD_FIRST and PARENT_FIRST each build a loader; any other value hits the default branch and throws IllegalArgumentException(\"Unknown class resolution order: \" + resolveOrder). Because the enum only has two constants, this is only reachable if someone passes a null or a cast/modified enum value programmatically — config strings normally arrive via ResolveOrder.fromString.","triggerScenarios":"Programmatically calling FlinkUserCodeClassLoaders.getClassLoader / childFirst / parentFirst factory paths with a null ResolveOrder or an enum constant added by a fork/patch; reflective invocation passing the wrong type.","commonSituations":"Custom Flink forks adding a new resolve order without extending the switch; passing an unresolved config value straight into the API instead of using ResolveOrder.fromString(CoreOptions.CLASSLOADER_RESOLVE_ORDER).","solutions":["Pass a value obtained from ResolveOrder.fromString(...) so config strings map to a valid constant","If you forked Flink and added a ResolveOrder constant, add a matching case to this switch","Null-check the resolve order before calling and default it to the documented value (child-first)"],"exampleFix":"// before\nFlinkUserCodeClassLoaders.getUrlClassLoader(urls, parent, null, handler, false); // null order\n\n// after\nResolveOrder order = ResolveOrder.fromString(\n        conf.get(CoreOptions.CLASSLOADER_RESOLVE_ORDER)); // 'child-first'/'parent-first'","handlingStrategy":"validation","validationCode":"ResolveOrder order = ResolveOrder.fromString(conf.get(CoreOptions.CLASSLOADER_RESOLVE_ORDER));","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Always map config strings through ResolveOrder.fromString before calling classloader factories","Fork maintainers: extend the switch when adding enum constants"],"tags":["classloader","configuration","internal-api"],"backgroundTag":null,"analyzedSha":"2f3c205e9266cb30240eb7f4fdab15cad629a70f","analyzedAt":"2026-08-14T08:48:24.518Z","schemaVersion":2},"datasetVersion":"2026-08-14T10:17:34.591Z"}