I'm trying to create a converter that will fetch object from DB by it's ObjectId. But the mongoTemplate is always empty in converter:
org.springframework.core.convert.ConversionFailedException:
Failed to convert from type org.bson.types.ObjectId to type com.atlas.mymodule.datadomain.MyObject for value '130000000000000000000013';
nested exception is java.lang.NullPointerException
Code:
@Component public class ObjectIdToMyObjectConverter implements Converter<ObjectId, MyObject> { @Autowired private MongoTemplate mongoTemplate; // null ??? public MyObject convert(ObjectId objectId) { return mongoTemplate.findById(objectId, MyObject.class); // <- NullPointerException } }
Configuration:
@Configuration @ComponentScan @EnableMongoRepositories public abstract class MyModuleConfiguration extends AbstractMongoConfiguration { @Override public MongoClient mongo() throws Exception { List<MongoCredential> mongoCredential = getMongoCredentials(); return mongoCredential == null ? new MongoClient(getMongoServerAddresses()) : new MongoClient(getMongoServerAddresses(), mongoCredential, getMongoClientOptions()); } protected abstract List<MongoCredential> getMongoCredentials(); protected abstract MongoClientOptions getMongoClientOptions(); protected abstract List<ServerAddress> getMongoServerAddresses() throws UnknownHostException; @Bean public ObjectIdToMyObjectConverter objectIdToMyObjectConverter() { return new ObjectIdToMyObjectConverter()); } @Override public CustomConversions customConversions() { List<Converter<?, ?>> converters = new ArrayList<Converter<?, ?>>(); converters.add(objectIdToMyObjectConverter()); return new CustomConversions(converters); } }
Test Configuration:
public class MyModuleTestConfiguration extends MyModuleConfiguration { // overrides abstract methods, defines connection details... }
update:
I've updated the code according to @mavarazy suggestion (added ObjectIdToMyObjectConverter bean definition) but got an exception:
Error creating bean with name 'mongoTemplate': Requested bean is currently in creation: Is there an unresolvable circular reference?
Full exception:
Error creating bean with name 'mongoTemplate' defined in com.atlas.MyModule.MyModuleTestConfiguration: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.data.mongodb.core.MongoTemplate]: Factory method 'mongoTemplate' threw exception; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'mappingMongoConverter' defined in com.atlas.MyModule.MyModuleTestConfiguration: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.data.mongodb.core.convert.MappingMongoConverter]: Factory method 'mappingMongoConverter' threw exception; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'mongoMappingContext' defined in com.atlas.MyModule.MyModuleTestConfiguration: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.data.mongodb.core.mapping.MongoMappingContext]: Factory method 'mongoMappingContext' threw exception; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'customConversions' defined in com.atlas.MyModule.MyModuleTestConfiguration: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.data.mongodb.core.convert.CustomConversions]: Factory method 'customConversions' threw exception; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'objectIdToMyObjectConverter': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private org.springframework.data.mongodb.core.MongoTemplate com.atlas.MyModule.ObjectIdToMyObjectConverter.mongoTemplate; nested exception is org.springframework.beans.factory.BeanCurrentlyInCreationException: Error creating bean with name 'mongoTemplate': Requested bean is currently in creation: Is there an unresolvable circular reference?
Thanks.