Синглтон Enum вызывает исключение: «Причина: java.lang.NoSuchMethodException:», но метод уже существует - PullRequest
0 голосов
/ 11 марта 2019

Я создаю перечисление Singleton для подключения эластичного поиска, но каждый раз при создании экземпляра перечисления я получаю сообщение об ошибке:

Caused by: java.lang.NoSuchMethodException: ngp.search.core.impl.elasticsearch.connection.ElasticSearchEnum.<init>()

     Error during instantiation of the implementation object 
java.lang.InstantiationException: ngp.search.core.impl.elasticsearch.connection.ElasticSearchEnum
        at java.lang.Class.newInstance(Class.java:427)
Caused by: java.lang.NoSuchMethodException: ngp.search.core.impl.elasticsearch.connection.ElasticSearchEnum.<init>()
        at java.lang.Class.getConstructor0(Class.java:3082)
        at java.lang.Class.newInstance(Class.java:412)
        ... 36 more

Вот мой класс Enum:

@Component(
        configurationPid = "ngp.search.core.configuration.NgpSearch"
)

public enum ElasticSearchEnum {
    INSTANCE;

    ElasticSearchEnum() {}

    @Activate
    @Modified
    protected void activate(Map<String, Object> properties) {

        _moduleConfiguration = ConfigurableUtil.createConfigurable(
            ModuleConfiguration.class, properties);
    }

    public Client getClient() throws UnknownHostException {

        String cluster = _moduleConfiguration.liferayElasticSearchClusterName();
        String host = _moduleConfiguration.transportAddressHost();
        int port = _moduleConfiguration.transportAddressPort();

        Settings settings = Settings.settingsBuilder()
                .put("cluster.name", cluster)
                .put("client.transport.sniff", true).build();

        TransportClient client = TransportClient.builder().settings(settings).build()
                .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(host), port));

        return client;
    }

    private volatile ModuleConfiguration _moduleConfiguration;

}

Я называю метод:

Client client = ElasticSearchEnum.INSTANCE.getClient();

Я думаю, что это из-за отражения Java.

Как я могу обойти отражение или правильный способ создания синглтона

...