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/PluginsUtilsTests.java
IllegalStateException e = expectThrows(IllegalStateException.class, () -> PluginsUtils.sortBundles(Collections.singleton(bundle)));
        assertEquals("Cycle found in plugin dependencies: foo -> foo", e.getMessage());
    }
    public void testSortBundlesCycle() throws Exception {
        Path pluginDir = createTempDir();
        Set<PluginBundle> bundles = new LinkedHashSet<>(); 
        PluginDescriptor info = newTestDescriptor("foo", List.of("bar", "other"));
        bundles.add(new PluginBundle(info, pluginDir));
        PluginDescriptor info2 = newTestDescriptor("bar", List.of("baz"));
        bundles.add(new PluginBundle(info2, pluginDir));
        PluginDescriptor info3 = newTestDescriptor("baz", List.of("foo"));
        bundles.add(new PluginBundle(info3, pluginDir));
        PluginDescriptor info4 = newTestDescriptor("other", List.of());
        bundles.add(new PluginBundle(info4, pluginDir));
        IllegalStateException e = expectThrows(IllegalStateException.class, () -> PluginsUtils.sortBundles(bundles));
        assertEquals("Cycle found in plugin dependencies: foo -> bar -> baz -> foo", e.getMessage());
    }
    public void testSortBundlesSingle() throws Exception {
        Path pluginDir = createTempDir();
        PluginDescriptor info = newTestDescriptor("foo", List.of());
        PluginBundle bundle = new PluginBundle(info, pluginDir);
        List<PluginBundle> sortedBundles = PluginsUtils.sortBundles(Collections.singleton(bundle));
        assertThat(sortedBundles, Matchers.contains(bundle));
    }
    public void testSortBundlesNoDeps() throws Exception {
        Path pluginDir = createTempDir();
        Set<PluginBundle> bundles = new LinkedHashSet<>(); 
        PluginDescriptor info1 = newTestDescriptor("foo", List.of());
        PluginBundle bundle1 = new PluginBundle(info1, pluginDir);
        bundles.add(bundle1);