Description
Since upgrading to 2.6.1 I am seeing failures when invoking IndexResolver::resolveIndexFor(...) for some specific entities.
We have a generic pattern using javax.measure classes using an enum which implements an interface defined in this way:
public interface Uom<T extends javax.measure.Quantity.Quantity<T>> {
javax.measure.Unit.Unit<T> getUnit();
}
public enum UomLength implements Uom<javax.measure.quantity.Length>{
...
}
// This is the embedded object type we actually persist.
public class UomMeasure<T extends Uom...> {
T unit; // the enums are stored here
}
Pre 2.6, index resolution worked just fine on entities containing this object. However, after upgrading to 2.6.1 I get a NullPointerException with the following stack trace (Note: I can "fix" the issue by marking getUnit() as @transient which is an acceptable work-around for our use case -- the persistence mechanism still persists the enum via its string properly and we do not use the annotation based index resolution pattern most of the time).
When I debug into the code and view the state at the time of the NPE I see this:
entity = mappingContext.getPersistentEntity(persistentProperty.getActualType());
persistentProperty.getActualType() -> Integer.class
entity == null
java.lang.NullPointerException
at org.springframework.data.mongodb.core.index.MongoPersistentEntityIndexResolver.appendTextIndexInformation(MongoPersistentEntityIndexResolver.java:338)
at org.springframework.data.mongodb.core.index.MongoPersistentEntityIndexResolver.access$100(MongoPersistentEntityIndexResolver.java:78)
at org.springframework.data.mongodb.core.index.MongoPersistentEntityIndexResolver$1.doWithPersistentProperty(MongoPersistentEntityIndexResolver.java:370)
at org.springframework.data.mongodb.core.index.MongoPersistentEntityIndexResolver$1.doWithPersistentProperty(MongoPersistentEntityIndexResolver.java:338)
at org.springframework.data.mapping.model.BasicPersistentEntity.doWithProperties(BasicPersistentEntity.java:360)
at org.springframework.data.mongodb.core.index.MongoPersistentEntityIndexResolver.appendTextIndexInformation(MongoPersistentEntityIndexResolver.java:338)
at org.springframework.data.mongodb.core.index.MongoPersistentEntityIndexResolver.access$100(MongoPersistentEntityIndexResolver.java:78)
at org.springframework.data.mongodb.core.index.MongoPersistentEntityIndexResolver$1.doWithPersistentProperty(MongoPersistentEntityIndexResolver.java:370)
at org.springframework.data.mongodb.core.index.MongoPersistentEntityIndexResolver$1.doWithPersistentProperty(MongoPersistentEntityIndexResolver.java:338)
at org.springframework.data.mapping.model.BasicPersistentEntity.doWithProperties(BasicPersistentEntity.java:360)
at org.springframework.data.mongodb.core.index.MongoPersistentEntityIndexResolver.appendTextIndexInformation(MongoPersistentEntityIndexResolver.java:338)
at org.springframework.data.mongodb.core.index.MongoPersistentEntityIndexResolver.access$100(MongoPersistentEntityIndexResolver.java:78)
at org.springframework.data.mongodb.core.index.MongoPersistentEntityIndexResolver$1.doWithPersistentProperty(MongoPersistentEntityIndexResolver.java:370)
at org.springframework.data.mongodb.core.index.MongoPersistentEntityIndexResolver$1.doWithPersistentProperty(MongoPersistentEntityIndexResolver.java:338)
at org.springframework.data.mapping.model.BasicPersistentEntity.doWithProperties(BasicPersistentEntity.java:360)
at org.springframework.data.mongodb.core.index.MongoPersistentEntityIndexResolver.appendTextIndexInformation(MongoPersistentEntityIndexResolver.java:338)
at org.springframework.data.mongodb.core.index.MongoPersistentEntityIndexResolver.access$100(MongoPersistentEntityIndexResolver.java:78)
at org.springframework.data.mongodb.core.index.MongoPersistentEntityIndexResolver$1.doWithPersistentProperty(MongoPersistentEntityIndexResolver.java:370)
at org.springframework.data.mongodb.core.index.MongoPersistentEntityIndexResolver$1.doWithPersistentProperty(MongoPersistentEntityIndexResolver.java:338)
at org.springframework.data.mapping.model.BasicPersistentEntity.doWithProperties(BasicPersistentEntity.java:360)
at org.springframework.data.mongodb.core.index.MongoPersistentEntityIndexResolver.appendTextIndexInformation(MongoPersistentEntityIndexResolver.java:338)
at org.springframework.data.mongodb.core.index.MongoPersistentEntityIndexResolver.access$100(MongoPersistentEntityIndexResolver.java:78)
at org.springframework.data.mongodb.core.index.MongoPersistentEntityIndexResolver$1.doWithPersistentProperty(MongoPersistentEntityIndexResolver.java:370)
at org.springframework.data.mongodb.core.index.MongoPersistentEntityIndexResolver$1.doWithPersistentProperty(MongoPersistentEntityIndexResolver.java:338)
at org.springframework.data.mapping.model.BasicPersistentEntity.doWithProperties(BasicPersistentEntity.java:360)
at org.springframework.data.mongodb.core.index.MongoPersistentEntityIndexResolver.appendTextIndexInformation(MongoPersistentEntityIndexResolver.java:338)
at org.springframework.data.mongodb.core.index.MongoPersistentEntityIndexResolver.potentiallyCreateTextIndexDefinition(MongoPersistentEntityIndexResolver.java:314)
at org.springframework.data.mongodb.core.index.MongoPersistentEntityIndexResolver.resolveIndexForEntity(MongoPersistentEntityIndexResolver.java:128)
at org.springframework.data.mongodb.core.index.MongoPersistentEntityIndexResolver.resolveIndexFor(MongoPersistentEntityIndexResolver.java:103)
at org.springframework.data.mongodb.core.index.IndexResolver.resolveIndexFor(IndexResolver.java:69)
at com.blueyonder.lof.bedrock.tenancy.mongo.SpringMongoContextDatabaseInitializer.lambda$execute$4(SpringMongoContextDatabaseInitializer.java:57)