Author: rgodfrey
Date: Thu Apr 24 13:59:02 2014
New Revision: 1589730
URL: http://svn.apache.org/r1589730
Log:
QPID-5721 : [Java Broker] allow interpolation and parsing of string values as
maps/list/collections if the String is of the correct JSON form
Modified:
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/AttributeValueConverter.java
Modified:
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/AttributeValueConverter.java
URL:
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/AttributeValueConverter.java?rev=1589730&r1=1589729&r2=1589730&view=diff
==============================================================================
---
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/AttributeValueConverter.java
(original)
+++
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/AttributeValueConverter.java
Thu Apr 24 13:59:02 2014
@@ -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());
}
}
-
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]