Vraptor + spring UnsatisfiedDependencyException

Prezados, quando subo meu projeto com vraptor + spring recebo a exceção:

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'br.com.caelum.vraptor.validator.JSR303ValidatorFactory': FactoryBean threw exception on object creation; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'JSR303ValidatorFactory': Unsatisfied dependency expressed through constructor argument with index 0 of type [javax.validation.ValidatorFactory]: : No unique bean of type [javax.validation.ValidatorFactory] is defined: expected single matching bean but found 2: [org.springframework.validation.beanvalidation.LocalValidatorFactoryBean#0, br.com.caelum.vraptor.validator.ValidatorFactoryCreator]; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No unique bean of type [javax.validation.ValidatorFactory] is defined: expected single matching bean but found 2: [org.springframework.validation.beanvalidation.LocalValidatorFactoryBean#0, br.com.caelum.vraptor.validator.ValidatorFactoryCreator]

entendo que existem 2 beans qualificados para injeção, porém o problema é em uma classe interna, alguem passou por tal situação?

abrasss

quando tento subir o mongo com a factory dele configurada no meu applicationContext

<mongo:db-factory dbname="fourDataTest" />

	<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
		<constructor-arg name="mongoDbFactory" ref="mongoDbFactory" />
		<constructor-arg name="mongoConverter" ref="mappingConverter" />
	</bean>

ele da isso, vou tentar subir o mongo de outra maneira, porém ainda achei estranho. Seria o caso de sobreescrever a CommonsUploadMultipartInterceptor?

abs

expected single matching bean but found 2: [org.springframework.validation.beanvalidation.LocalValidatorFactoryBean#0, br.com.caelum.vraptor.validator.ValidatorFactoryCreator]

remova o validator factory do xml do spring.

opa, não tenho um validator factory

o erro dá depois que adiciono isto:

<!-- Config mongoDB -->
	<mongo:mapping-converter>
		<mongo:custom-converters>
			<mongo:converter>
				<bean class="br.com.fourdata.util.mongo.converter.DateToLocalDate" />
			</mongo:converter>
			<mongo:converter>
				<bean class="br.com.fourdata.util.mongo.converter.DateToLocalDateTime" />
			</mongo:converter>
			<mongo:converter>
				<bean class="br.com.fourdata.util.mongo.converter.LocalDateTimeToDate" />
			</mongo:converter>
			<mongo:converter>
				<bean class="br.com.fourdata.util.mongo.converter.LocalDateToDate" />
			</mongo:converter>
		</mongo:custom-converters>
	</mongo:mapping-converter>

	<mongo:db-factory dbname="fourDataTest" />
	
	<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
		<constructor-arg name="mongoDbFactory" ref="mongoDbFactory" />
		<constructor-arg name="mongoConverter" ref="mappingConverter" />
	</bean>

abrasss

então provavelmente é o “mongo:” que tá adicionando essa validator factory =(

tenta ver se você consegue achar alguma propriedade desse mongo que deixa configurar o validator factory

procurei um outro jeito de subir o mongoTemplate, porém n teve jeito, ele precisa do factory e nao achei uma maneira de configurar o validator factory pro db-factory.

entao para solucionar o problema subi o mongo com configuração programatica.

Retirei as referencias do mongo do meu applicationContext e criei a seguinte classe, sobreescrevendo o metodo que adiciona os converters:


package br.com.fourdata.dao;

import java.net.UnknownHostException;
import java.util.Arrays;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.mongodb.config.AbstractMongoConfiguration;
import org.springframework.data.mongodb.core.convert.CustomConversions;

import br.com.fourdata.util.mongo.converter.DateToLocalDate;
import br.com.fourdata.util.mongo.converter.DateToLocalDateTime;
import br.com.fourdata.util.mongo.converter.LocalDateTimeToDate;
import br.com.fourdata.util.mongo.converter.LocalDateToDate;

import com.mongodb.Mongo;

@Configuration
public class SpringMongoSetter extends AbstractMongoConfiguration {

	@Override
	public Mongo mongo() throws UnknownHostException {
		return new Mongo();
	}

	@Override
	public String getDatabaseName() {
		return "nomeBanco";
	}

	@Override
	public String getMappingBasePackage() {
		return "pacote.de.model";
	}

	@Bean
	@Override
	public CustomConversions customConversions() {
		return new CustomConversions(Arrays.asList(new DateToLocalDate(), new DateToLocalDateTime(),
				new LocalDateTimeToDate(), new LocalDateToDate()));
	}
}

funciona!

mto obrigado lucas

grande abrassss

Programático >>> XML =)