[Resolvido]Converter para components

Boa noite!

Eu estou tentando utilizar o padrão Strategy para definir alguns comportamentos.

Então eu tenho a interface e suas implementações:

public interface MasterfileDefinition {
	public MasterfileType getType();

	public void setDependencies();
}

@Component
public class CustomerDefinition implements MasterfileDefinition {

	private Result result;
	private CompanyTypeDAO companyTypeDAO;

	public CustomerDefinition(Result result, CompanyTypeDAO companyTypeDAO) {
		this.result = result;
		this.companyTypeDAO = companyTypeDAO;
	}

	@Override
	public MasterfileType getType() {
		return MasterfileType.CUSTOMER;
	}

	@Override
	public void setDependencies() {
		result.include("companyTypes", companyTypeDAO.list());
	}
}

@Component
public class CarrierDefinition implements MasterfileDefinition {

	@Override
	public MasterfileType getType() {
		return MasterfileType.CARRIER;
	}

	@Override
	public void setDependencies() {
	}
}

Eu os anotei com @Component pois o valor que decide qual definition deverá ser usado vem de um converter e ele usa a interface Container para instanciar a classe filha, assim:

@Convert(MasterfileDefinition.class)
public class MasterfileDefinitionConverter implements
		Converter<MasterfileDefinition> {

	private final Logger logger = LoggerFactory.getLogger(this.getClass());
	private Container container;

	public MasterfileDefinitionConverter(Container container) {
		this.container = container;
	}

	@Override
	public MasterfileDefinition convert(String value,
			Class<? extends MasterfileDefinition> type, ResourceBundle bundle) {
		try {
			if (!notEmpty(value))
				throw new IllegalArgumentException(
						"Unable to define query operation.");

			String classPackage = "hamburgsud.frontend.masterfile.strategy.implementation.";
			String className = value + "Definition";

			logger.debug("MasterfileDefinition: " + className);

			return (MasterfileDefinition) container.instanceFor(Class
					.forName(classPackage + className));
		} catch (IllegalArgumentException e) {
			logger.error(
					"Unable to instantiate this masterfile definition, will return null.",
					e);
		} catch (ClassNotFoundException e) {
			logger.error(
					"This  masterfile definition could not be found, will return null.",
					e);
		}
		return null;
	}
}

E eu estou usando assim:

	@Get("/masterfile/{definition}/form/{obj}")
	public void form(MasterfileDefinition definition, Masterfile obj) {
		definition.setDependencies();

		result.include("type", definition.getType());
		result.include("obj", obj);
	}

O problema é que quando eu chamo essa action, ele não passa pelo meu converter e sempre instancia CarrierDefinition. :?
Existe alguma forma de forçar o VRaptor a chamar o converter?

qdo o parametro é uma interface e existe algum @Component com essa interface, o vraptor usa esse componente, para permitir injeção de dependencias no método…

é feio, mas se vc transformar a interface em uma classe abstrata vai funcionar.

É, ficou feio mas funcionou!

Legal, muito obrigado, mais uma vez!