We pass `null` for the class name here:

https://github.com/elastic/elasticsearch/blob/f086dd18ddc705bf84a1ff99d35196ec2498fd52/server/src/main/java/org/elasticsearch/plugins/PluginDescriptor.java#L261

However the class name is mandatory for the transport protocol today:

https://github.com/elastic/elasticsearch/blob/f086dd18ddc705bf84a1ff99d35196ec2498fd52/server/src/main/java/org/elasticsearch/plugins/PluginDescriptor.java#L156

This prevents various APIs from working in a cluster with stable plugins installed.
server/src/test/java/org/elasticsearch/plugins/PluginsServiceTests.java
return reader;
                }
            }
            """)));
        Path namedComponentFile = plugin.resolve("named_components.json");
        Files.writeString(namedComponentFile, """
            {
              "org.elasticsearch.plugin.analysis.CharFilterFactory": {
                "a_name": "p.A"
              }
            }
            """);
        var pluginService = newPluginsService(settings);
        try {
            Map<String, Plugin> stringPluginMap = pluginService.pluginMap();
            assertThat(stringPluginMap.get("stable-plugin"), instanceOf(StablePluginPlaceHolder.class));
            PluginsAndModules info = pluginService.info();
            List<PluginRuntimeInfo> pluginInfos = info.getPluginInfos();
            assertEquals(pluginInfos.size(), 1);
            assertThat(pluginInfos.get(0).descriptor().getName(), equalTo("stable-plugin"));
            assertThat(pluginInfos.get(0).descriptor().isStable(), is(true));
            
            Collection<PluginInfo> stablePluginInfos = pluginService.getStablePluginRegistry()
                .getPluginInfosForExtensible("org.elasticsearch.plugin.analysis.CharFilterFactory");
            assertThat(stablePluginInfos, hasSize(1));
            ClassLoader stablePluginClassLoader = stablePluginInfos.stream().findFirst().orElseThrow().loader();
            assertThat(stablePluginClassLoader, instanceOf(UberModuleClassLoader.class));
            if (CharFilterFactory.class.getModule().isNamed() == false) {