Ok guess the fix was not in
*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 using the last version available on maven central repo which is 1.1.7. > > Xavier > > ________________________________ > > From: [email protected] > > Date: Fri, 15 Mar 2013 15:29:00 +0100 > > Subject: Re: CDI and ParameterizedTypes > > To: [email protected] > > > > 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/ > > LinkedIn: http://fr.linkedin.com/in/rmannibucau > > Github: https://github.com/rmannibucau > > > > > > > > 2013/3/15 Xavier Dury <[email protected]<mailto:[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 > > >
