mirror of https://github.com/apache/druid.git
bug fix @DruidSecondaryModule plus unit test
This commit is contained in:
parent
9fd14cad4f
commit
1e6be7796e
|
@ -43,7 +43,6 @@ public class DruidSecondaryModule implements Module
|
||||||
private final ObjectMapper jsonMapper;
|
private final ObjectMapper jsonMapper;
|
||||||
private final ObjectMapper smileMapper;
|
private final ObjectMapper smileMapper;
|
||||||
private final Validator validator;
|
private final Validator validator;
|
||||||
private final JsonConfigurator jsonConfigurator;
|
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
public DruidSecondaryModule(
|
public DruidSecondaryModule(
|
||||||
|
@ -51,8 +50,7 @@ public class DruidSecondaryModule implements Module
|
||||||
ConfigurationObjectFactory factory,
|
ConfigurationObjectFactory factory,
|
||||||
@Json ObjectMapper jsonMapper,
|
@Json ObjectMapper jsonMapper,
|
||||||
@Smile ObjectMapper smileMapper,
|
@Smile ObjectMapper smileMapper,
|
||||||
Validator validator,
|
Validator validator
|
||||||
JsonConfigurator jsonConfigurator
|
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
this.properties = properties;
|
this.properties = properties;
|
||||||
|
@ -60,7 +58,6 @@ public class DruidSecondaryModule implements Module
|
||||||
this.jsonMapper = jsonMapper;
|
this.jsonMapper = jsonMapper;
|
||||||
this.smileMapper = smileMapper;
|
this.smileMapper = smileMapper;
|
||||||
this.validator = validator;
|
this.validator = validator;
|
||||||
this.jsonConfigurator = jsonConfigurator;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -69,10 +66,9 @@ public class DruidSecondaryModule implements Module
|
||||||
binder.install(new DruidGuiceExtensions());
|
binder.install(new DruidGuiceExtensions());
|
||||||
binder.bind(Properties.class).toInstance(properties);
|
binder.bind(Properties.class).toInstance(properties);
|
||||||
binder.bind(ConfigurationObjectFactory.class).toInstance(factory);
|
binder.bind(ConfigurationObjectFactory.class).toInstance(factory);
|
||||||
// make objectMapper eager to ensure jackson gets setup with guice injection for JsonConfigurator
|
binder.bind(ObjectMapper.class).to(Key.get(ObjectMapper.class, Json.class));
|
||||||
binder.bind(ObjectMapper.class).to(Key.get(ObjectMapper.class, Json.class)).asEagerSingleton();
|
|
||||||
binder.bind(Validator.class).toInstance(validator);
|
binder.bind(Validator.class).toInstance(validator);
|
||||||
binder.bind(JsonConfigurator.class).toInstance(jsonConfigurator);
|
binder.bind(JsonConfigurator.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Provides @LazySingleton @Json
|
@Provides @LazySingleton @Json
|
||||||
|
|
|
@ -0,0 +1,77 @@
|
||||||
|
package io.druid.guice;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JacksonInject;
|
||||||
|
import com.google.inject.Binder;
|
||||||
|
import com.google.inject.Guice;
|
||||||
|
import com.google.inject.Injector;
|
||||||
|
import com.google.inject.Module;
|
||||||
|
import com.google.inject.Provider;
|
||||||
|
import org.junit.Assert;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
public class GuiceInjectorsTest
|
||||||
|
{
|
||||||
|
@Test public void testSanity()
|
||||||
|
{
|
||||||
|
Injector stageOne = GuiceInjectors.makeStartupInjector();
|
||||||
|
|
||||||
|
Module module = stageOne.getInstance(DruidSecondaryModule.class);
|
||||||
|
|
||||||
|
Injector stageTwo = Guice.createInjector(module, new Module()
|
||||||
|
{
|
||||||
|
@Override public void configure(Binder binder)
|
||||||
|
{
|
||||||
|
binder.bind(String.class).toInstance("Expected String");
|
||||||
|
JsonConfigProvider.bind(binder, "druid.emitter.", Emitter.class);
|
||||||
|
binder.bind(CustomEmitter.class).toProvider(new CustomEmitterFactory());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
CustomEmitter customEmitter = stageTwo.getInstance(CustomEmitter.class);
|
||||||
|
|
||||||
|
Assert.assertEquals("Expected String", customEmitter.getOtherValue());
|
||||||
|
}
|
||||||
|
|
||||||
|
private static class Emitter {
|
||||||
|
|
||||||
|
@JacksonInject
|
||||||
|
private String value;
|
||||||
|
|
||||||
|
public String getValue()
|
||||||
|
{
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private class CustomEmitterFactory implements Provider<CustomEmitter> {
|
||||||
|
|
||||||
|
private Emitter emitter;
|
||||||
|
private Injector injector;
|
||||||
|
|
||||||
|
@com.google.inject.Inject
|
||||||
|
public void configure(Injector injector) {
|
||||||
|
this.injector = injector;
|
||||||
|
emitter = injector.getInstance(Emitter.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override public CustomEmitter get()
|
||||||
|
{
|
||||||
|
return new CustomEmitter(emitter);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static class CustomEmitter
|
||||||
|
{
|
||||||
|
public String getOtherValue()
|
||||||
|
{
|
||||||
|
return emitter.getValue();
|
||||||
|
}
|
||||||
|
|
||||||
|
private Emitter emitter;
|
||||||
|
|
||||||
|
public CustomEmitter(Emitter emitter){
|
||||||
|
this.emitter = emitter;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue