Hi, if i didn't miss it you didn't mention your version
think it should work with 1.1.8 https://github.com/rmannibucau/cdi-converters was used to work and was using something close https://github.com/rmannibucau/cdi-converters/blob/master/src/test/java/com/github/rmannibucau/converter/ConverterTest.java *Romain Manni-Bucau* *Twitter: @rmannibucau <https://twitter.com/rmannibucau>* *Blog: **http://rmannibucau.wordpress.com/*<http://rmannibucau.wordpress.com/> *LinkedIn: **http://fr.linkedin.com/in/rmannibucau* *Github: https://github.com/rmannibucau* 2013/3/15 Xavier Dury <[email protected]> > Hi, > > I'm trying to implement a simple type conversion framework in CDI. > Typically, you can either implement the TypeConverter interface or annotate > some methods in your beans: > > public interface TypeConverter<S, T> { > > T convert(S source); > } > > public class StringToIntegerTypeConverter implements TypeConverter<String, > Integer> { ... } > > public class StringToLongTypeConverter implements TypeConverter<String, > Long> { ... } > > public MyConverters { > > @Converts public Integer stringToInteger(String value) { ... } > @Converts public Long stringToLong(String value) { ... } > } > > A specific Extension "bridges" the annotated methods to a full > TypeConverter (a custom Bean<?> is registered with an API types of > ParameterizedTypeImpl(rawType = TypeConverter.class, ownerType = null, > actualTypeArguments = [method.getGenericParameterType[0], > method.getGenericReturnType])). > > Then a TypeConversionService is responsible to find the adequate Converter > through the BeanManager and call it with the provided object to be > converted. > > public class TypeConversionService { > > public <T> T convert(Class<T> targetType, Object source) { ... } > public <T> T convert(TypeLiteral<T> targetTypeLiteral, Object source) { > ... } > } > > My problem is the following: as soon as 2 or more TypeConverters are > present in the module (let's say StringToIntegerTypeConverter and > StringToLongTypeConverter), an ambiguous dependency exception is thrown. > > For example: > > public class MyBean { > > @Inject TypeConverter<String, Integer> stringToIntegerTypeConverter; > @Inject TypeConverter<String, Long> stringToLongTypeConverter; > > // won't work > } > > If I delete one of the TypeConverter classes (StringToLongTypeConverter > for example), the remaining TypeConverter (StringToIntegerTypeConverter) is > injected at the 2 injection points (stringToIntegerTypeConverter=ok and > stringToLongTypeConverter=!ok). > > Is it possible with CDI to have such a scenario without using additional > qualifiers to qualify each converter and only rely on the (parameterized) > type information to tell them apart? > > I've seen some discussions on StackOverflow saying the TypeConverter > should belong to the Dependent scope but it didn't work for me. > > Thanks, > > Xavier
