{"record":{"id":"aacc5e0799fd5b1a","repo":"apache/dubbo","slug":"the-default-protocol-has-not-been-initialized","errorCode":null,"errorMessage":"The default protocol has not been initialized.","messagePattern":"The default protocol has not been initialized\\.","errorType":"exception","errorClass":"IllegalStateException","httpStatus":null,"severity":"error","filePath":"dubbo-common/src/main/java/org/apache/dubbo/config/ServiceConfigBase.java","lineNumber":250,"sourceCode":"                setConfigCenter(provider.getConfigCenter());\n            }\n        }\n    }\n\n    protected void convertProviderIdToProvider() {\n        if (provider == null && StringUtils.hasText(providerIds)) {\n            provider = getModuleConfigManager()\n                    .getProvider(providerIds)\n                    .orElseThrow(() -> new IllegalStateException(\"Provider config not found: \" + providerIds));\n        }\n    }\n\n    protected void convertProtocolIdsToProtocols() {\n        if (StringUtils.isEmpty(protocolIds)) {\n            if (CollectionUtils.isEmpty(protocols)) {\n                List<ProtocolConfig> protocolConfigs = getConfigManager().getDefaultProtocols();\n                if (CollectionUtils.isEmpty(protocolConfigs)) {\n                    throw new IllegalStateException(\"The default protocol has not been initialized.\");\n                }\n                setProtocols(protocolConfigs);\n            }\n        } else {\n            String[] idsArray = COMMA_SPLIT_PATTERN.split(protocolIds);\n            Set<String> idsSet = new LinkedHashSet<>(Arrays.asList(idsArray));\n            List<ProtocolConfig> tmpProtocols = new ArrayList<>();\n            for (String id : idsSet) {\n                Optional<ProtocolConfig> globalProtocol = getConfigManager().getProtocol(id);\n                if (globalProtocol.isPresent()) {\n                    tmpProtocols.add(globalProtocol.get());\n                } else {\n                    throw new IllegalStateException(\"Protocol not found: \" + id);\n                }\n            }\n            setProtocols(tmpProtocols);\n        }\n    }","sourceCodeStart":232,"sourceCodeEnd":268,"githubUrl":"https://github.com/apache/dubbo/blob/3a3043227f5571d25eb2889de5bca22f2914843b/dubbo-common/src/main/java/org/apache/dubbo/config/ServiceConfigBase.java#L232-L268","documentation":"Thrown by ServiceConfigBase.convertProtocolIdsToProtocols when no protocols are configured (protocolIds empty, protocols list empty) and the config manager has no default protocols to fall back to. Dubbo needs at least one protocol to export a service.","triggerScenarios":"Exporting or refreshing a ServiceConfigBase where protocolIds is empty, protocols is empty, and getConfigManager().getDefaultProtocols() returns an empty list.","commonSituations":"No dubbo.protocol.* properties or ProtocolConfig bean defined. Protocol bean excluded by conditional configuration. Misconfigured application where the protocol registration was skipped. Multi-protocol setup where all ids were removed.","solutions":["Define a ProtocolConfig (e.g. dubbo.protocol.name=dubbo, dubbo.protocol.port=20880) or register a ProtocolConfig bean.","Set protocolIds on the ServiceConfig to reference an existing protocol id.","Ensure the ProtocolConfig is registered before the service export/refresh runs."],"exampleFix":"// before\n// no ProtocolConfig defined anywhere\nserviceConfig.export();\n\n// after\nProtocolConfig protocol = new ProtocolConfig();\nprotocol.setName(\"dubbo\");\nprotocol.setPort(20880);\nconfigManager.addProtocol(protocol);\nserviceConfig.export();","handlingStrategy":"validation","validationCode":"// Ensure at least one protocol exists before export\nif (configManager.getDefaultProtocols().isEmpty()\n        && (serviceConfig.getProtocols() == null || serviceConfig.getProtocols().isEmpty())\n        && (serviceConfig.getProtocolIds() == null || serviceConfig.getProtocolIds().isEmpty())) {\n    throw new IllegalStateException(\n        \"No protocol configured; define dubbo.protocol.* or a ProtocolConfig bean\");\n}\nserviceConfig.export();","typeGuard":null,"tryCatchPattern":"try {\n    serviceConfig.export();\n} catch (IllegalStateException e) {\n    if (e.getMessage().contains(\"default protocol has not been initialized\")) {\n        ProtocolConfig pc = new ProtocolConfig(\"dubbo\", 20880);\n        configManager.addProtocol(pc);\n        serviceConfig.export();\n    } else {\n        throw e;\n    }\n}","preventionTips":["Always define at least one dubbo.protocol.* entry or ProtocolConfig bean.","Validate protocol registration in a startup hook before any service export.","Keep protocol config in a shared, always-loaded config source."],"tags":["service-config","protocol","export"],"backgroundTag":null,"analyzedSha":"3a3043227f5571d25eb2889de5bca22f2914843b","analyzedAt":"2026-08-14T00:43:19.853Z","schemaVersion":2},"datasetVersion":"2026-08-14T05:17:29.042Z"}