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/main/java/org/elasticsearch/plugins/PluginDescriptor.java
String name = pluginDir.getFileName().toString(); 
        if (internalDescriptorExists && stableDescriptorExists) {
            throw new IllegalStateException(
                "Plugin [" + name + "] has both stable and internal descriptor properties. Only one may exist."
            );
        } else if (internalDescriptorExists == false && stableDescriptorExists == false) {
            throw new IllegalStateException("Plugin [" + name + "] is missing a descriptor properties file.");
        } else if (internalDescriptorExists) {
            descriptorFile = internalDescriptorFile;
            reader = PluginDescriptor::readerInternalDescriptor;
        } else {
            descriptorFile = stableDescriptorFile;
            reader = PluginDescriptor::readerStableDescriptor;
        }
        final Map<String, String> propsMap;
        {
            final Properties props = new Properties();
            try (InputStream stream = Files.newInputStream(descriptorFile)) {
                props.load(stream);
            }
            propsMap = props.stringPropertyNames().stream().collect(Collectors.toMap(Function.identity(), props::getProperty));
        }
        PluginDescriptor descriptor = reader.apply(propsMap, descriptorFile.getFileName().toString());
        name = descriptor.getName();
        if (propsMap.isEmpty() == false) {
            throw new IllegalArgumentException("Unknown properties for plugin [" + name + "] in plugin descriptor: " + propsMap.keySet());
        }
        return descriptor;
    }
    private static PluginDescriptor readerInternalDescriptor(Map<String, String> propsMap, String filename) {