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

Reply via email to