diff options
Diffstat (limited to 'qpid/java')
| -rw-r--r-- | qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/AttributeValueConverter.java | 96 |
1 files changed, 95 insertions, 1 deletions
diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/AttributeValueConverter.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/AttributeValueConverter.java index 2eaaf37a63..da0c93c5dd 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/AttributeValueConverter.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/AttributeValueConverter.java @@ -20,6 +20,7 @@ */ package org.apache.qpid.server.model; +import java.io.IOException; import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; import java.lang.reflect.TypeVariable; @@ -34,6 +35,8 @@ import java.util.Map; import java.util.Set; import java.util.UUID; +import org.codehaus.jackson.map.ObjectMapper; + import org.apache.qpid.server.util.ServerScopedRuntimeException; abstract class AttributeValueConverter<T> @@ -191,6 +194,19 @@ abstract class AttributeValueConverter<T> { return convert(Arrays.asList((Object[]) value),object); } + else if(value instanceof String) + { + String interpolated = AbstractConfiguredObject.interpolate(object, (String) value); + ObjectMapper objectMapper = new ObjectMapper(); + try + { + return objectMapper.readValue(interpolated, List.class); + } + catch (IOException e) + { + throw new IllegalArgumentException("Cannot convert String " + value + " to a List"); + } + } else if(value == null) { return null; @@ -215,6 +231,19 @@ abstract class AttributeValueConverter<T> { return convert(new HashSet(Arrays.asList((Object[])value)),object); } + else if(value instanceof String) + { + String interpolated = AbstractConfiguredObject.interpolate(object, (String) value); + ObjectMapper objectMapper = new ObjectMapper(); + try + { + return objectMapper.readValue(interpolated, Set.class); + } + catch (IOException e) + { + throw new IllegalArgumentException("Cannot convert String " + value + " to a List"); + } + } else if(value == null) { return null; @@ -239,6 +268,19 @@ abstract class AttributeValueConverter<T> { return convert(Arrays.asList((Object[]) value), object); } + else if(value instanceof String) + { + String interpolated = AbstractConfiguredObject.interpolate(object, (String) value); + ObjectMapper objectMapper = new ObjectMapper(); + try + { + return objectMapper.readValue(interpolated, List.class); + } + catch (IOException e) + { + throw new IllegalArgumentException("Cannot convert String " + value + " to a Collection"); + } + } else if(value == null) { return null; @@ -249,6 +291,7 @@ abstract class AttributeValueConverter<T> } } }; + static final AttributeValueConverter<Map> MAP_CONVERTER = new AttributeValueConverter<Map>() { @Override @@ -271,6 +314,19 @@ abstract class AttributeValueConverter<T> { return null; } + else if(value instanceof String) + { + String interpolated = AbstractConfiguredObject.interpolate(object, (String) value); + ObjectMapper objectMapper = new ObjectMapper(); + try + { + return objectMapper.readValue(interpolated, Map.class); + } + catch (IOException e) + { + throw new IllegalArgumentException("Cannot convert String " + value + " to a Map"); + } + } else { throw new IllegalArgumentException("Cannot convert type " + value.getClass() + " to a Map"); @@ -411,6 +467,19 @@ abstract class AttributeValueConverter<T> } else { + if(value instanceof String) + { + String interpolated = AbstractConfiguredObject.interpolate(object, (String) value); + ObjectMapper objectMapper = new ObjectMapper(); + try + { + return convert(objectMapper.readValue(interpolated, List.class), object); + } + catch (IOException e) + { + // fall through to the non-JSON single object case + } + } return Collections.unmodifiableList(Collections.singletonList(_memberConverter.convert(value, object))); } } @@ -470,6 +539,19 @@ abstract class AttributeValueConverter<T> } else { + if(value instanceof String) + { + String interpolated = AbstractConfiguredObject.interpolate(object, (String) value); + ObjectMapper objectMapper = new ObjectMapper(); + try + { + return convert(objectMapper.readValue(interpolated, Set.class), object); + } + catch (IOException e) + { + // fall through to the non-JSON single object case + } + } return Collections.unmodifiableSet(Collections.singleton(_memberConverter.convert(value, object))); } } @@ -529,6 +611,19 @@ abstract class AttributeValueConverter<T> } else { + if(value instanceof String) + { + String interpolated = AbstractConfiguredObject.interpolate(object, (String) value); + ObjectMapper objectMapper = new ObjectMapper(); + try + { + return convert(objectMapper.readValue(interpolated, List.class), object); + } + catch (IOException e) + { + // fall through to the non-JSON single object case + } + } return Collections.unmodifiableCollection(Collections.singletonList(_memberConverter.convert(value, object))); } } @@ -623,6 +718,5 @@ abstract class AttributeValueConverter<T> throw new IllegalArgumentException("Cannot convert type " + value.getClass() + " to a " + _klazz.getName()); } } - } } |
