{"record":{"id":"693ccec7556e5276","repo":"apache/dubbo","slug":"provider-is-not-initialized","errorCode":null,"errorMessage":"Provider is not initialized","messagePattern":"Provider is not initialized","errorType":"exception","errorClass":"IllegalStateException","httpStatus":null,"severity":"error","filePath":"dubbo-common/src/main/java/org/apache/dubbo/config/ServiceConfigBase.java","lineNumber":203,"sourceCode":"                    .orElseThrow(() -> new IllegalStateException(\"Default provider is not initialized\"));\n        }\n        // try set properties from `dubbo.service` if not set in current config\n        refreshWithPrefixes(super.getPrefixes(), ConfigMode.OVERRIDE_IF_ABSENT);\n    }\n\n    @Override\n    @Transient\n    public Map<String, String> getMetaData() {\n        return getMetaData(null);\n    }\n\n    @Override\n    public Map<String, String> getMetaData(String prefix) {\n        Map<String, String> metaData = new HashMap<>();\n        ProviderConfig provider = this.getProvider();\n        // provider should be initialized at preProcessRefresh()\n        if (isRefreshed() && provider == null) {\n            throw new IllegalStateException(\"Provider is not initialized\");\n        }\n        // use provider attributes as default value\n        appendAttributes(metaData, provider, prefix);\n        // Finally, put the service's attributes, overriding previous attributes\n        appendAttributes(metaData, this, prefix);\n        return metaData;\n    }\n\n    protected void checkProtocol() {\n        if (provider != null && notHasSelfProtocolProperty()) {\n            setProtocols(provider.getProtocols());\n            setProtocolIds(provider.getProtocolIds());\n        }\n        convertProtocolIdsToProtocols();\n    }\n\n    private boolean notHasSelfProtocolProperty() {\n        return CollectionUtils.isEmpty(protocols) && StringUtils.isEmpty(protocolIds);","sourceCodeStart":185,"sourceCodeEnd":221,"githubUrl":"https://github.com/apache/dubbo/blob/3a3043227f5571d25eb2889de5bca22f2914843b/dubbo-common/src/main/java/org/apache/dubbo/config/ServiceConfigBase.java#L185-L221","documentation":"Thrown by ServiceConfigBase.getMetaData when the config has been refreshed but its ProviderConfig is still null. The provider should be resolved during preProcessRefresh(); its absence after refresh indicates an inconsistent lifecycle state.","triggerScenarios":"Calling getMetaData() on a ServiceConfigBase with isRefreshed() == true but getProvider() == null. The provider is normally resolved by providerIds lookup or default provider during preProcessRefresh().","commonSituations":"providerIds references a ProviderConfig that does not exist. ProviderConfig removed/renamed after the service was refreshed. Refresh invoked outside the normal lifecycle so preProcessRefresh() did not populate the provider. Scope/model changes orphaning the provider lookup.","solutions":["Register a ProviderConfig (explicitly or via dubbo.provider.* properties) reachable from the service's module scope.","Verify providerIds on the ServiceConfigBase points to an existing ProviderConfig.","Run the full refresh lifecycle so preProcessRefresh() resolves the provider."],"exampleFix":"// before\nserviceConfig.setProvider(null); // or providerIds points to a missing config\n\n// after\nProviderConfig provider = new ProviderConfig();\nprovider.setId(\"myProvider\");\nconfigManager.addProvider(provider);\nserviceConfig.setProvider(provider);","handlingStrategy":"validation","validationCode":"// Before getMetaData, ensure provider is resolved if refreshed\nif (serviceConfig.isRefreshed() && serviceConfig.getProvider() == null) {\n    ProviderConfig p = moduleConfigManager\n        .getProvider(serviceConfig.getProviderIds())\n        .orElseThrow(() -> new IllegalStateException(\"ProviderConfig missing\"));\n    serviceConfig.setProvider(p);\n}","typeGuard":null,"tryCatchPattern":"try {\n    Map<String, String> meta = serviceConfig.getMetaData();\n} catch (IllegalStateException e) {\n    if (e.getMessage().contains(\"Provider is not initialized\")) {\n        // re-resolve provider via providerIds or default and retry refresh\n    }\n    throw e;\n}","preventionTips":["Register a ProviderConfig (or dubbo.provider.* defaults) before refreshing services.","Ensure providerIds reference existing ProviderConfig entries.","Run the full refresh lifecycle rather than partial refresh."],"tags":["service-config","provider","lifecycle"],"backgroundTag":null,"analyzedSha":"3a3043227f5571d25eb2889de5bca22f2914843b","analyzedAt":"2026-08-14T00:43:19.853Z","schemaVersion":2},"datasetVersion":"2026-08-14T05:17:29.042Z"}