```java
org.apache.dubbo.registry.integration.AbstractConfiguratorListener#initWith
protected final void initWith(String key) {
DynamicConfiguration dynamicConfiguration =
DynamicConfiguration.getDynamicConfiguration();
dynamicConfiguration.addListener(key, this);
String rawConfig = dynamicConfiguration.getRule(key,
DynamicConfiguration.DEFAULT_GROUP);
if (!StringUtils.isEmpty(rawConfig)) {
genConfiguratorsFromRawRule(rawConfig);
}
}
org.apache.dubbo.configcenter.DynamicConfiguration#getDynamicConfiguration
static DynamicConfiguration getDynamicConfiguration() {
Optional<Configuration> optional =
Environment.getInstance().getDynamicConfiguration();
return (DynamicConfiguration) optional.orElseGet(() ->
getExtensionLoader(DynamicConfigurationFactory.class)
.getDefaultExtension()
.getDynamicConfiguration(null));
}
```
在方法配置registry 时,没有协议名称就不会在
Environment.getInstance()中添加DynamicConfiguration,从而在上述的initWith方法中调用了获取getDynamicConfiguration的方法,由于获取不到对象,不得不执行lambda表达式中的获取方式,主要问题在此处传递了null,经测试此处必然报空指针异常,从源码中也能看出异常来自org.apache.dubbo.configcenter.support.zookeeper.ZookeeperDynamicConfiguration#ZookeeperDynamicConfiguration构造方法中根据url获取参数。
这里之所以会报错主要原因在于下面的类被修改了
```java
//@SPI("nop")
@SPI("zookeeper")
public interface DynamicConfigurationFactory {
DynamicConfiguration getDynamicConfiguration(URL url);
}
```
默认值改为了 zookeeper ,而 nop对应的类NopDynamicConfiguration在构造是不会报错的
[ Full content available at: https://github.com/apache/dubbo/issues/5522 ]
This message was relayed via gitbox.apache.org for
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]