romain, Xavier, can you please test with the latest 1.1.8-SNAPSHOT? I'll roll a 1.1.8 release this evening.
LieGrue, strub >________________________________ > From: Romain Manni-Bucau <[email protected]> >To: [email protected] >Sent: Friday, March 15, 2013 4:17 PM >Subject: Re: CDI and ParameterizedTypes > > >Ok > > >guess the fix was not in > > > > >Romain Manni-Bucau >Twitter: @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]> > >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 >>> > > >
