You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@camel.apache.org by "Jan Bednar (JIRA)" <ji...@apache.org> on 2019/05/25 17:36:00 UTC
[jira] [Created] (CAMEL-13578) Implementation of List and Map
utilising TypeConverter
Jan Bednar created CAMEL-13578:
----------------------------------
Summary: 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
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.3#76005)