protected <S extends Object> S read(TypeInformation<S> type, Bson bson) { return read(type, bson, ObjectPath.ROOT); }
@Nullable @SuppressWarnings("unchecked") <T> T readValue(Object value, TypeInformation<?> type, ObjectPath path) { Class<?> rawType = type.getType(); if (conversions.hasCustomReadTarget(value.getClass(), rawType)) { return (T) conversionService.convert(value, rawType); } else if (value instanceof DBRef) { return potentiallyReadOrResolveDbRef((DBRef) value, type, path, rawType); } else if (value instanceof List) { return (T) readCollectionOrArray(type, (List<Object>) value, path); } else if (value instanceof Document) { return (T) read(type, (Document) value, path); } else if (value instanceof DBObject) { return (T) read(type, (BasicDBObject) value, path); } else { return (T) getPotentiallyConvertedSimpleRead(value, rawType); } }
@SuppressWarnings("unchecked") private <T> List<T> bulkReadAndConvertDBRefs(List<DBRef> dbrefs, TypeInformation<?> type, ObjectPath path, final Class<?> rawType) { if (CollectionUtils.isEmpty(dbrefs)) { return Collections.emptyList(); } List<Document> referencedRawDocuments = dbrefs.size() == 1 ? Collections.singletonList(readRef(dbrefs.iterator().next())) : bulkReadRefs(dbrefs); String collectionName = dbrefs.iterator().next().getCollectionName(); List<T> targeList = new ArrayList<>(dbrefs.size()); for (Document document : referencedRawDocuments) { if (document != null) { maybeEmitEvent(new AfterLoadEvent<>(document, (Class<T>) rawType, collectionName)); } final T target = (T) read(type, document, path); targeList.add(target); if (target != null) { maybeEmitEvent(new AfterConvertEvent<>(document, target, collectionName)); } } return targeList; }
return read((MongoPersistentEntity<S>) entity, target, path);
public <S extends Object> S read(Class<S> clazz, final Bson bson) { return read(ClassTypeInformation.from(clazz), bson); }
return read((MongoPersistentEntity<S>) entity, target, path);
@Nullable @SuppressWarnings("unchecked") <T> T readValue(Object value, TypeInformation<?> type, ObjectPath path) { Class<?> rawType = type.getType(); if (conversions.hasCustomReadTarget(value.getClass(), rawType)) { return (T) conversionService.convert(value, rawType); } else if (value instanceof DBRef) { return potentiallyReadOrResolveDbRef((DBRef) value, type, path, rawType); } else if (value instanceof List) { return (T) readCollectionOrArray(type, (List<Object>) value, path); } else if (value instanceof Document) { return (T) read(type, (Document) value, path); } else if (value instanceof DBObject) { return (T) read(type, (BasicDBObject) value, path); } else { return (T) getPotentiallyConvertedSimpleRead(value, rawType); } }
@SuppressWarnings("unchecked") private <T> List<T> bulkReadAndConvertDBRefs(List<DBRef> dbrefs, TypeInformation<?> type, ObjectPath path, final Class<?> rawType) { if (CollectionUtils.isEmpty(dbrefs)) { return Collections.emptyList(); } List<Document> referencedRawDocuments = dbrefs.size() == 1 ? Collections.singletonList(readRef(dbrefs.iterator().next())) : bulkReadRefs(dbrefs); String collectionName = dbrefs.iterator().next().getCollectionName(); List<T> targeList = new ArrayList<>(dbrefs.size()); for (Document document : referencedRawDocuments) { if (document != null) { maybeEmitEvent(new AfterLoadEvent<>(document, (Class<T>) rawType, collectionName)); } final T target = (T) read(type, document, path); targeList.add(target); if (target != null) { maybeEmitEvent(new AfterConvertEvent<>(document, target, collectionName)); } } return targeList; }
protected <S extends Object> S read(TypeInformation<S> type, Bson bson) { return read(type, bson, ObjectPath.ROOT); }
@Override public <S> S read(Class<S> clazz, Bson source) { return super.read(clazz, source); }
public <S extends Object> S read(Class<S> clazz, final Bson bson) { return read(ClassTypeInformation.from(clazz), bson); }
throw new IllegalStateException("Unsupported 'Bson' type: " + source.getClass()); normalizedHeaders.put(headerName, super.read(typeClass, source));
public <S> S read(Class<S> clazz, Bson source) { if (!MessageWrapper.class.equals(clazz)) { return super.read(clazz, source);
@SuppressWarnings("unchecked") @Test @MongoDbAvailable public void validateSuccessfulQueryWithCustomConverter() throws Exception { MongoDbFactory mongoDbFactory = this.prepareMongoFactory(); MongoTemplate template = new MongoTemplate(mongoDbFactory); template.save(this.createPerson("Manny"), "data"); template.save(this.createPerson("Moe"), "data"); template.save(this.createPerson("Jack"), "data"); Expression queryExpression = new LiteralExpression("{'address.state' : 'PA'}"); MongoDbMessageSource messageSource = new MongoDbMessageSource(mongoDbFactory, queryExpression); MappingMongoConverter converter = new TestMongoConverter(mongoDbFactory, new MongoMappingContext()); messageSource.setBeanFactory(mock(BeanFactory.class)); converter.afterPropertiesSet(); converter = spy(converter); messageSource.setMongoConverter(converter); messageSource.afterPropertiesSet(); List<Person> persons = (List<Person>) messageSource.receive().getPayload(); assertEquals(3, persons.size()); verify(converter, times(3)).read((Class<Person>) Mockito.any(), Mockito.any(Bson.class)); }
@SuppressWarnings("unchecked") @Test @MongoDbAvailable public void validateSuccessfulQueryWithMongoTemplate() throws Exception { MongoDbFactory mongoDbFactory = this.prepareMongoFactory(); MappingMongoConverter converter = new TestMongoConverter(mongoDbFactory, new MongoMappingContext()); converter.afterPropertiesSet(); converter = spy(converter); MongoTemplate template = new MongoTemplate(mongoDbFactory, converter); Expression queryExpression = new LiteralExpression("{'address.state' : 'PA'}"); MongoDbMessageSource messageSource = new MongoDbMessageSource(template, queryExpression); messageSource.setBeanFactory(mock(BeanFactory.class)); messageSource.afterPropertiesSet(); MongoTemplate writingTemplate = new MongoTemplate(mongoDbFactory, converter); writingTemplate.save(this.createPerson("Manny"), "data"); writingTemplate.save(this.createPerson("Moe"), "data"); writingTemplate.save(this.createPerson("Jack"), "data"); List<Person> persons = (List<Person>) messageSource.receive().getPayload(); assertEquals(3, persons.size()); verify(converter, times(3)).read((Class<Person>) Mockito.any(), Mockito.any(Bson.class)); }
throw new IllegalStateException("Unsupported 'Bson' type: " + source.getClass()); normalizedHeaders.put(headerName, super.read(typeClass, source));