Я работаю над созданием настраиваемого поставщика свойств для загрузки содержимого сервера конфигурации 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();
}
}
Что мне нужно изменить, чтобы правильно внедрить этот сервис?
Я следовал советам из этих двух битов документации,для справки: