apache/incubator-seata · error · NotSupportYetException
not support method:%s
Error message
not support method:%s
What it means
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.
Source
Thrown at config/seata-config-core/src/main/java/org/apache/seata/config/ConfigurationFactory.java:305
}
}
} else if ("getConfigListeners".equals(method.getName())) {
Method oldMethod =
this.configuration.getClass().getMethod(method.getName(), new Class[] {String.class});
Set<io.seata.config.ConfigurationChangeListener> listeners =
(Set<io.seata.config.ConfigurationChangeListener>) oldMethod.invoke(configuration, args);
if (CollectionUtils.isEmpty(listeners)) {
return null;
}
Set<ConfigurationChangeListener> newListeners = new HashSet<>();
for (io.seata.config.ConfigurationChangeListener listener : listeners) {
if (listener instanceof OldConfigurationChangeListenerWrapper) {
newListeners.add(((OldConfigurationChangeListenerWrapper) listener).getTargetListener());
}
}
return newListeners;
}
throw new NotSupportYetException(String.format("not support method:%s", method.getName()));
}
}
static class OldConfigurationChangeListenerWrapper implements io.seata.config.ConfigurationChangeListener {
private final ConfigurationChangeListener listener;
public OldConfigurationChangeListenerWrapper(ConfigurationChangeListener listener) {
this.listener = listener;
}
private ConfigurationChangeEvent convert(io.seata.config.ConfigurationChangeEvent event) {
ConfigurationChangeEvent newEvent = new ConfigurationChangeEvent();
newEvent.setDataId(event.getDataId())
.setOldValue(event.getOldValue())
.setNewValue(event.getNewValue())
.setNamespace(event.getNamespace());
if (event.getChangeType() != null) {
newEvent.setChangeType(View on GitHub (pinned to e01f97c6db)
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.
Example fix
// before (legacy proxy path)
io.seata.config.Configuration cfg = io.seata.config.ConfigurationFactory.getInstance();
cfg.someUnhandledMethod(...);
// after
org.apache.seata.config.Configuration cfg =
org.apache.seata.config.ConfigurationFactory.getInstance();
cfg.getShort("some.key", 0); Defensive patterns
Strategy: type-guard
Type guard
boolean isLegacyProxiedConfiguration(Object cfg) {
return cfg instanceof io.seata.config.Configuration
&& java.lang.reflect.Proxy.isProxyClass(cfg.getClass());
} Try / catch
try {
legacyConfig.someMethod(args);
} catch (NotSupportYetException e) {
// message names the unsupported method; migrate call site to org.apache.seata API
throw new IllegalStateException("legacy proxy cannot handle this method; migrate to new API", e);
} Prevention
- 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
When it happens
Trigger: 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.
Common situations: 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.
Related errors
- not support putConfig
- not support atomic operation putConfigIfAbsent
- not support removeConfig
- ERR_CONFIG
- Apollo configuration initialized failed,please check the val
AI-assisted analysis of apache/incubator-seata@e01f97c6db (2026-08-14).
Data as JSON: /api/errors/fd0331421b693f73.
Report an issue: GitHub.