{"record":{"id":"fd0331421b693f73","repo":"apache/incubator-seata","slug":"not-support-method-s","errorCode":null,"errorMessage":"not support method:%s","messagePattern":"not support method:(.+?)","errorType":"exception","errorClass":"NotSupportYetException","httpStatus":null,"severity":"error","filePath":"config/seata-config-core/src/main/java/org/apache/seata/config/ConfigurationFactory.java","lineNumber":305,"sourceCode":"                    }\n                }\n            } else if (\"getConfigListeners\".equals(method.getName())) {\n                Method oldMethod =\n                        this.configuration.getClass().getMethod(method.getName(), new Class[] {String.class});\n                Set<io.seata.config.ConfigurationChangeListener> listeners =\n                        (Set<io.seata.config.ConfigurationChangeListener>) oldMethod.invoke(configuration, args);\n                if (CollectionUtils.isEmpty(listeners)) {\n                    return null;\n                }\n                Set<ConfigurationChangeListener> newListeners = new HashSet<>();\n                for (io.seata.config.ConfigurationChangeListener listener : listeners) {\n                    if (listener instanceof OldConfigurationChangeListenerWrapper) {\n                        newListeners.add(((OldConfigurationChangeListenerWrapper) listener).getTargetListener());\n                    }\n                }\n                return newListeners;\n            }\n            throw new NotSupportYetException(String.format(\"not support method:%s\", method.getName()));\n        }\n    }\n\n    static class OldConfigurationChangeListenerWrapper implements io.seata.config.ConfigurationChangeListener {\n        private final ConfigurationChangeListener listener;\n\n        public OldConfigurationChangeListenerWrapper(ConfigurationChangeListener listener) {\n            this.listener = listener;\n        }\n\n        private ConfigurationChangeEvent convert(io.seata.config.ConfigurationChangeEvent event) {\n            ConfigurationChangeEvent newEvent = new ConfigurationChangeEvent();\n            newEvent.setDataId(event.getDataId())\n                    .setOldValue(event.getOldValue())\n                    .setNewValue(event.getNewValue())\n                    .setNamespace(event.getNamespace());\n            if (event.getChangeType() != null) {\n                newEvent.setChangeType(","sourceCodeStart":287,"sourceCodeEnd":323,"githubUrl":"https://github.com/apache/incubator-seata/blob/e01f97c6db397165050caa6764020410c2c8199a/config/seata-config-core/src/main/java/org/apache/seata/config/ConfigurationFactory.java#L287-L323","documentation":"Inside ConfigurationFactory's compatibility InvocationHandler (the proxy bridging legacy io.seata.config.Configuration to the new API), any invoked method that is not one of the recognized compatibility cases falls through to throw NotSupportYetException(String.format('not support method:%s', method.getName())). The proxy only supports a fixed method set; calling anything else through the old interface breaks.","triggerScenarios":"Legacy code holding an io.seata.config.Configuration instance (the proxy from getConfiguration() on the old API) invoking a method the handler does not remap — e.g. new or rarely used methods, or overloaded variants not handled by the if/else chain; reflection-based calls through the old interface.","commonSituations":"Libraries compiled against an older seata version running against a newer one (or vice versa) where the legacy facade changed; custom shims using io.seata.config.Configuration directly instead of org.apache.seata.config.Configuration.","solutions":["Migrate the call site to the new org.apache.seata.config.Configuration API and obtain instances from the new ConfigurationFactory.","If you must stay on the old API, restrict usage to the proxied method set (get*/addConfigListener/getConfigListeners style calls).","Upgrade/downgrade the dependent library to a seata version whose legacy proxy supports the method you call.","Check the exception message for the exact method name and search seata's proxy handler to confirm whether it is handled in your version."],"exampleFix":"// before (legacy proxy path)\nio.seata.config.Configuration cfg = io.seata.config.ConfigurationFactory.getInstance();\ncfg.someUnhandledMethod(...);\n\n// after\norg.apache.seata.config.Configuration cfg =\n    org.apache.seata.config.ConfigurationFactory.getInstance();\ncfg.getShort(\"some.key\", 0);","handlingStrategy":"type-guard","validationCode":null,"typeGuard":"boolean isLegacyProxiedConfiguration(Object cfg) {\n    return cfg instanceof io.seata.config.Configuration\n        && java.lang.reflect.Proxy.isProxyClass(cfg.getClass());\n}","tryCatchPattern":"try {\n    legacyConfig.someMethod(args);\n} catch (NotSupportYetException e) {\n    // message names the unsupported method; migrate call site to org.apache.seata API\n    throw new IllegalStateException(\"legacy proxy cannot handle this method; migrate to new API\", e);\n}","preventionTips":["Migrate all code to org.apache.seata.config.Configuration; treat io.seata.* as legacy","Pin compatible seata versions across all modules in the dependency tree","Wrap the legacy facade once in an adapter you own, so unsupported methods surface in one place"],"tags":["config","compatibility","proxy","unsupported-operation","seata"],"backgroundTag":null,"analyzedSha":"e01f97c6db397165050caa6764020410c2c8199a","analyzedAt":"2026-08-14T10:23:53.097Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}