Status: New
Owner: ----
New issue 627 by [email protected]: Bug in
com.google.inject.internal.Initializer
http://code.google.com/p/google-guice/issues/detail?id=627
I sometimes get this exception when using assisted inject:
Caused by: java.lang.NullPointerException: null
at
com.google.inject.internal.Initializer$InjectableReference.get(Initializer.java:147)
~[guice-3.0.jar:na]
at com.google.inject.internal.ConstantFactory.get(ConstantFactory.java:35)
~[guice-3.0.jar:na]
at
com.google.inject.internal.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:46)
~[guice-3.0.jar:na]
at
com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1031)
~[guice-3.0.jar:na]
at
com.google.inject.internal.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40)
~[guice-3.0.jar:na]
at com.google.inject.Scopes$1$1.get(Scopes.java:65) ~[guice-3.0.jar:na]
at
com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:40)
~[guice-3.0.jar:na]
at com.google.inject.internal.InjectorImpl$4$1.call(InjectorImpl.java:978)
~[guice-3.0.jar:na]
at
com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1031)
~[guice-3.0.jar:na]
at com.google.inject.internal.InjectorImpl$4.get(InjectorImpl.java:974)
~[guice-3.0.jar:na]
at com.google.inject.spi.ProviderLookup$1.get(ProviderLookup.java:89)
~[guice-3.0.jar:na]
at
com.google.inject.multibindings.MapBinder$RealMapBinder$2.get(MapBinder.java:387)
~[guice-multibindings-3.0.jar:na]
at
com.google.inject.multibindings.MapBinder$RealMapBinder$2.get(MapBinder.java:383)
~[guice-multibindings-3.0.jar:na]
at
com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:40)
~[guice-3.0.jar:na]
at
com.google.inject.internal.SingleParameterInjector.inject(SingleParameterInjector.java:38)
~[guice-3.0.jar:na]
at
com.google.inject.internal.SingleParameterInjector.getAll(SingleParameterInjector.java:62)
~[guice-3.0.jar:na]
at
com.google.inject.internal.SingleMethodInjector.inject(SingleMethodInjector.java:83)
~[guice-3.0.jar:na]
at
com.google.inject.internal.MembersInjectorImpl.injectMembers(MembersInjectorImpl.java:110)
~[guice-3.0.jar:na]
at
com.google.inject.internal.ConstructorInjector.construct(ConstructorInjector.java:94)
~[guice-3.0.jar:na]
at
com.google.inject.internal.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:254)
~[guice-3.0.jar:na]
at
com.google.inject.internal.BoundProviderFactory.get(BoundProviderFactory.java:53)
~[guice-3.0.jar:na]
at com.google.inject.internal.InjectorImpl$4$1.call(InjectorImpl.java:978)
~[guice-3.0.jar:na]
at
com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1031)
~[guice-3.0.jar:na]
at com.google.inject.internal.InjectorImpl$4.get(InjectorImpl.java:974)
~[guice-3.0.jar:na]
at
com.proofpoint.experimental.json.JsonCodecFactory.createObjectMapper(JsonCodecFactory.java:121)
~[classes/:na]
After a bit of debugging I see that membersInjector is not initialized
because InjectableReference.validate is not being called for some reason.
The obvious workaround it to add an if (membersInjector) validate(errors),
but that seems like a hack.
In my code, if I put the assistedInject in a loop it works the second time
through:
public class JsonCodecFactory
{
private final Provider<ObjectMapper> objectMapperProvider;
private final boolean prettyPrint;
@Inject
public JsonCodecFactory(Provider<ObjectMapper> objectMapperProvider)
{
this.objectMapperProvider = objectMapperProvider;
this.prettyPrint = true;
}
public <T> JsonCodec<T> jsonCodec(Class<T> type)
{
Preconditions.checkNotNull(type, "type is null");
return new JsonCodec<T>(createObjectMapper(), type);
}
private ObjectMapper createObjectMapper()
{
ObjectMapper objectMapper = null;
while (objectMapper == null) {
try {
objectMapper = objectMapperProvider.get();
}
catch (Exception ignored) {
}
}
if (prettyPrint) {
objectMapper.getSerializationConfig().enable(INDENT_OUTPUT);
}
else {
objectMapper.getSerializationConfig().disable(INDENT_OUTPUT);
}
return objectMapper;
}
}
--
You received this message because you are subscribed to the Google Groups
"google-guice-dev" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/google-guice-dev?hl=en.