You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@camel.apache.org by "Claus Ibsen (JIRA)" <ji...@apache.org> on 2019/07/25 06:50:00 UTC

[jira] [Resolved] (CAMEL-13578) Implementation of List and Map utilising TypeConverter

     [ https://issues.apache.org/jira/browse/CAMEL-13578?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Claus Ibsen resolved CAMEL-13578.
---------------------------------
    Resolution: Won't Fix

Lets keep it as is

> Implementation of List and Map utilising TypeConverter
> ------------------------------------------------------
>
>                 Key: CAMEL-13578
>                 URL: https://issues.apache.org/jira/browse/CAMEL-13578
>             Project: Camel
>          Issue Type: New Feature
>          Components: camel-core
>    Affects Versions: 3.0.0-M2
>            Reporter: Jan Bednar
>            Priority: Minor
>
> We have implemented this in our project. This is convenient for working with List<Map<>> and Map<List<>>objects.
> I can implement this into Camel, but there is massive refactoring in Camel 3 about modules and I`m not quite sure if this should be part of core, support, base,... , or event special new module. Any thoughts or docs about camel 3 module architecture?
> *Usage:*
> {code:java}
> //Body contains List<Map<String, String>>
> String.value = exchange.getIn()
> .getBody(TypeConverterList.class)
> .get(0, TypeConverterMap.class)
> .get("key1", String.class);{code}
> which is more flexible alternative to current approach
> {code:java}
> String value = (String)(((Map)exchange.getIn().getBody(List.class).get(0)).get("key1"));{code}
>  
> This is achieved implementing two new TypeConverters: *List -> TypeConverterList* and *Map -> TypeConverterMap*.
> Instances of *TypeConverterList* and *TypeConverterMap* holds reference to org.apache.camel.TypeConverter
>  and looks like:
>  
> {code:java}
> public class TypeConverterMap<K,V> extends ForwardingMap<K,V> {
>     private final TypeConverter typeConverter;
>     private final Map<K,V> delegate;
>     public TypeConverterMap(CamelContext camelContext, Map<K,V> delegate) {
>         this.delegate = delegate;
>         this.typeConverter = camelContext.getTypeConverter();
>     }
>     @Override
>     protected Map<K,V> delegate() {
>         return delegate;
>     }
>     public <T> T get(K key, Class<T> clazz){
>         return typeConverter.convertTo(clazz, get(key));
>     }
>     public <T extends V> T getOrDefault(K key, V defaultValue, Class<T> clazz) {
>         return typeConverter.convertTo(clazz, getOrDefault(key, defaultValue));
>     }
> }{code}
>  



--
This message was sent by Atlassian JIRA
(v7.6.14#76016)