Внедрение HttpService в поставщик настраиваемых свойств конфигурации Mule 4 - PullRequest
0 голосов
/ 10 ноября 2019

Я работаю над созданием настраиваемого поставщика свойств для загрузки содержимого сервера конфигурации Spring при запуске. Мне нужно сделать один вызов при инициализации провайдера, чтобы получить эти свойства, и я хотел бы использовать Mule HttpService для того, чтобы сделать http-клиент для этого вызова, вместо того, чтобы создавать свой собственный. К сожалению, всякий раз, когда я пытаюсь это сделать, кажется, что HttpService еще не создан и поэтому выдает NPE, как только на него ссылаются.

CustomConfigurationPropertiesProviderFactory.java

public class CustomConfigurationPropertiesProviderFactory implements ConfigurationPropertiesProviderFactory {

  public static final String EXTENSION_NAMESPACE = "custom-properties";
  public static final String CONFIGURATION_PROPERTIES_ELEMENT = "config";
  public static final ComponentIdentifier CUSTOM_CONFIGURATION_PROPERTIES =
      builder().namespace(EXTENSION_NAMESPACE).name(CONFIGURATION_PROPERTIES_ELEMENT).build();

  @Inject
  HttpService httpService;

  @Override
  public ComponentIdentifier getSupportedComponentIdentifier() {
    return CUSTOM_CONFIGURATION_PROPERTIES;
  }

  @Override
  public ConfigurationPropertiesProvider createProvider(ConfigurationParameters parameters,
                                                              ResourceProvider externalResourceProvider) {
    String url = parameters.getStringParameter("url");

    return new CustomConfigurationPropertiesProvider(url, httpService);
  }

}

CustomConfigurationPropertiesProvider.java

public class CustomConfigurationPropertiesProvider implements ConfigurationPropertiesProvider {

  private final static String PREFIX = "custom::";

  private Properties properties = null;

  public CustomConfigurationPropertiesProvider(String url, HttpService httpService) {
    HttpClientConfiguration.Builder builder = new HttpClientConfiguration.Builder();
    builder.setName("customProperties");
    HttpClient client = httpService.getClientFactory().create(builder.build()); //NPE here
    client.start();
    // proceed to create and execute request, then load into properties
  }

  @Override
  public Optional<ConfigurationProperty> getConfigurationProperty(String configurationAttributeKey) {
    if (configurationAttributeKey.startsWith(PREFIX)) {
      String effectiveKey = configurationAttributeKey.substring(PREFIX.length());
      if (properties != null && !properties.isEmpty()) {
        return Optional.of(new ConfigurationProperty() {
          @Override
          public Object getSource() {...}

          @Override
          public Object getRawValue() { return properties.getProperty(effectiveKey); }

          @Override
          public String getKey() { return effectiveKey; }
        });
      }
    }
    return Optional.empty();
  }
}

Что мне нужно изменить, чтобы правильно внедрить этот сервис?

Я следовал советам из этих двух битов документации,для справки:

...