openwebbeans-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Mark Struberg <strub...@yahoo.de>
Subject Re: CDI and ParameterizedTypes
Date Fri, 15 Mar 2013 15:54:37 GMT
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 <rmannibucau@gmail.com>
>To: user@openwebbeans.apache.org 
>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 <kalgon@hotmail.com>
>
>Hi,
>>
>>I'm using the last version available on maven central repo which is 1.1.7.
>>
>>Xavier
>>
>>________________________________
>>> From: rmannibucau@gmail.com
>>> Date: Fri, 15 Mar 2013 15:29:00 +0100
>>> Subject: Re: CDI and ParameterizedTypes
>>> To: user@openwebbeans.apache.org
>>
>>>
>>> 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 <kalgon@hotmail.com<mailto:kalgon@hotmail.com>>
>>
>>> 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
>>>                                         
>
>
>
Mime
View raw message