You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by lq...@apache.org on 2016/05/04 12:24:59 UTC
svn commit: r1742259 - in /qpid/java/branches/6.0.x: ./
broker-plugins/management-http/
broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/
broker-plugins/management-http/src/test/java/org/apache/qpid/ser...
Author: lquack
Date: Wed May 4 12:24:59 2016
New Revision: 1742259
URL: http://svn.apache.org/viewvc?rev=1742259&view=rev
Log:
QPID-7211: [Java Broker] Introduce request parameter to not transfer context variables
merged from trunk with command:
svn merge -c 1742257 ^/qpid/java/trunk
Modified:
qpid/java/branches/6.0.x/ (props changed)
qpid/java/branches/6.0.x/broker-plugins/management-http/pom.xml
qpid/java/branches/6.0.x/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/ConfiguredObjectToMapConverter.java
qpid/java/branches/6.0.x/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/RestServlet.java
qpid/java/branches/6.0.x/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/servlet/rest/ConfiguredObjectToMapConverterTest.java
Propchange: qpid/java/branches/6.0.x/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Wed May 4 12:24:59 2016
@@ -9,5 +9,5 @@
/qpid/branches/java-broker-vhost-refactor/java:1493674-1494547
/qpid/branches/java-network-refactor/qpid/java:805429-821809
/qpid/branches/qpid-2935/qpid/java:1061302-1072333
-/qpid/java/trunk:1715445-1715447,1715586,1715940,1716086-1716087,1716127-1716128,1716141,1716153,1716155,1716194,1716204,1716209,1716227,1716277,1716357,1716368,1716370,1716374,1716432,1716444-1716445,1716455,1716461,1716474,1716489,1716497,1716515,1716555,1716602,1716606-1716610,1716619,1716636,1717269,1717299,1717401,1717446,1717449,1717626,1717691,1717735,1717780,1718744,1718889,1718893,1718918,1718922,1719026,1719028,1719033,1719037,1719047,1719051,1720340,1720664,1721151,1721198,1722019-1722020,1722246,1722339,1722416,1722674,1722678,1722683,1722711,1723064,1723194,1723563,1724216,1724251,1724257,1724292,1724375,1724397,1724432,1724582,1724603,1724780,1724843-1724844,1725295,1725569,1725760,1726176,1726244-1726246,1726249,1726358,1726436,1726449,1726456,1726646,1726653,1726755,1726778,1727532,1727555,1727608,1727951,1727954,1728089,1728167,1728302,1728497,1728501,1728524,1728639,1728651,1728772,1729215,1729297,1729347,1729356,1729406,1729408,1729412,1729515,1729638,1729656-1729
657,1729783,1729828,1729832,1729841,1729851,1729886,1729904,1729973,1730019,1730025,1730052,1730072,1730088,1730494,1730499,1730547,1730559,1730567,1730578,1730585,1730651,1730697,1730712-1730713,1730805,1731029,1731110,1731210,1731225,1731444,1731551,1731612,1732184,1732452,1732461,1732525,1732812,1734452,1736478,1736751,1736838,1737804,1737835,1737853,1737984,1737992,1738119,1738135,1738231,1738271,1738607,1738610,1738731,1738914,1741702
+/qpid/java/trunk:1715445-1715447,1715586,1715940,1716086-1716087,1716127-1716128,1716141,1716153,1716155,1716194,1716204,1716209,1716227,1716277,1716357,1716368,1716370,1716374,1716432,1716444-1716445,1716455,1716461,1716474,1716489,1716497,1716515,1716555,1716602,1716606-1716610,1716619,1716636,1717269,1717299,1717401,1717446,1717449,1717626,1717691,1717735,1717780,1718744,1718889,1718893,1718918,1718922,1719026,1719028,1719033,1719037,1719047,1719051,1720340,1720664,1721151,1721198,1722019-1722020,1722246,1722339,1722416,1722674,1722678,1722683,1722711,1723064,1723194,1723563,1724216,1724251,1724257,1724292,1724375,1724397,1724432,1724582,1724603,1724780,1724843-1724844,1725295,1725569,1725760,1726176,1726244-1726246,1726249,1726358,1726436,1726449,1726456,1726646,1726653,1726755,1726778,1727532,1727555,1727608,1727951,1727954,1728089,1728167,1728302,1728497,1728501,1728524,1728639,1728651,1728772,1729215,1729297,1729347,1729356,1729406,1729408,1729412,1729515,1729638,1729656-1729
657,1729783,1729828,1729832,1729841,1729851,1729886,1729904,1729973,1730019,1730025,1730052,1730072,1730088,1730494,1730499,1730547,1730559,1730567,1730578,1730585,1730651,1730697,1730712-1730713,1730805,1731029,1731110,1731210,1731225,1731444,1731551,1731612,1732184,1732452,1732461,1732525,1732812,1734452,1736478,1736751,1736838,1737804,1737835,1737853,1737984,1737992,1738119,1738135,1738231,1738271,1738607,1738610,1738731,1738914,1741702,1742257
/qpid/trunk/qpid:796646-796653
Modified: qpid/java/branches/6.0.x/broker-plugins/management-http/pom.xml
URL: http://svn.apache.org/viewvc/qpid/java/branches/6.0.x/broker-plugins/management-http/pom.xml?rev=1742259&r1=1742258&r2=1742259&view=diff
==============================================================================
--- qpid/java/branches/6.0.x/broker-plugins/management-http/pom.xml (original)
+++ qpid/java/branches/6.0.x/broker-plugins/management-http/pom.xml Wed May 4 12:24:59 2016
@@ -99,6 +99,14 @@
<version>${project.version}</version>
<scope>test</scope>
</dependency>
+ <dependency>
+ <groupId>org.apache.qpid</groupId>
+ <artifactId>qpid-broker-core</artifactId>
+ <version>${project.version}</version>
+ <classifier>tests</classifier>
+ <scope>test</scope>
+ </dependency>
+
</dependencies>
<build>
Modified: qpid/java/branches/6.0.x/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/ConfiguredObjectToMapConverter.java
URL: http://svn.apache.org/viewvc/qpid/java/branches/6.0.x/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/ConfiguredObjectToMapConverter.java?rev=1742259&r1=1742258&r2=1742259&view=diff
==============================================================================
--- qpid/java/branches/6.0.x/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/ConfiguredObjectToMapConverter.java (original)
+++ qpid/java/branches/6.0.x/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/ConfiguredObjectToMapConverter.java Wed May 4 12:24:59 2016
@@ -52,28 +52,20 @@ public class ConfiguredObjectToMapConver
public Map<String, Object> convertObjectToMap(final ConfiguredObject<?> confObject,
Class<? extends ConfiguredObject> clazz,
- int depth,
- final boolean useActualValues,
- final boolean inheritedActuals,
- final boolean includeSystemContext,
- final boolean extractAsConfig,
- final int oversizeThreshold,
- final boolean isSecureTransport
+ ConverterOptions converterOptions
)
{
Map<String, Object> object = new LinkedHashMap<>();
- incorporateAttributesIntoMap(confObject, object, useActualValues, inheritedActuals, includeSystemContext,
- extractAsConfig, oversizeThreshold, isSecureTransport);
- if(!extractAsConfig)
+ incorporateAttributesIntoMap(confObject, object, converterOptions);
+ if(!converterOptions.isExtractAsConfig())
{
incorporateStatisticsIntoMap(confObject, object);
}
- if(depth > 0)
+ if(converterOptions.getDepth() > 0)
{
- incorporateChildrenIntoMap(confObject, clazz, depth, object, useActualValues, inheritedActuals,
- includeSystemContext, extractAsConfig, oversizeThreshold, isSecureTransport);
+ incorporateChildrenIntoMap(confObject, clazz, object, converterOptions);
}
return object;
}
@@ -82,15 +74,10 @@ public class ConfiguredObjectToMapConver
private void incorporateAttributesIntoMap(
final ConfiguredObject<?> confObject,
Map<String, Object> object,
- final boolean useActualValues,
- final boolean inheritedActuals,
- final boolean includeSystemContext,
- final boolean extractAsConfig,
- final int oversizeThreshold,
- final boolean isSecureTransport)
+ ConverterOptions converterOptions)
{
// if extracting as config add a fake attribute for each secondary parent
- if(extractAsConfig && confObject.getModel().getParentTypes(confObject.getCategoryClass()).size()>1)
+ if(converterOptions.isExtractAsConfig() && confObject.getModel().getParentTypes(confObject.getCategoryClass()).size()>1)
{
Iterator<Class<? extends ConfiguredObject>> parentClasses =
confObject.getModel().getParentTypes(confObject.getCategoryClass()).iterator();
@@ -112,10 +99,10 @@ public class ConfiguredObjectToMapConver
for(String name : confObject.getAttributeNames())
{
- if (!(extractAsConfig && CONFIG_EXCLUDED_ATTRIBUTES.contains(name)))
+ if (!(converterOptions.isExtractAsConfig() && CONFIG_EXCLUDED_ATTRIBUTES.contains(name)))
{
Object value =
- useActualValues ? confObject.getActualAttributes().get(name) : confObject.getAttribute(name);
+ converterOptions.isUseActualValues() ? confObject.getActualAttributes().get(name) : confObject.getAttribute(name);
if (value instanceof ConfiguredObject)
{
object.put(name, ((ConfiguredObject) value).getName());
@@ -123,17 +110,14 @@ public class ConfiguredObjectToMapConver
else if (ConfiguredObject.CONTEXT.equals(name))
{
Map<String, Object> contextValues = new HashMap<>();
- if (useActualValues)
+ if (!converterOptions.isExcludeInheritedContext())
{
- collectContext(contextValues, confObject.getModel(), confObject, inheritedActuals);
- }
- else
- {
- for (String contextName : confObject.getContextKeys(!includeSystemContext))
- {
- contextValues.put(contextName, confObject.getContextValue(String.class, contextName));
- }
+ contextValues.putAll(confObject.getModel().getTypeRegistry().getDefaultContext());
+ contextValues.putAll(System.getenv());
+ contextValues.putAll((Map) System.getProperties());
}
+ collectContext(contextValues, confObject, converterOptions);
+
if (!contextValues.isEmpty())
{
object.put(ConfiguredObject.CONTEXT, contextValues);
@@ -162,21 +146,21 @@ public class ConfiguredObjectToMapConver
.getAttributeTypes(confObject.getClass())
.get(name);
- if (attribute.isSecureValue(value) && !(isSecureTransport && extractAsConfig))
+ if (attribute.isSecureValue(value) && !(converterOptions.isSecureTransport() && converterOptions.isExtractAsConfig()))
{
// do not expose actual secure attribute value
// getAttribute() returns encoded value
value = confObject.getAttribute(name);
}
- if(attribute.isOversized() && !extractAsConfig && !useActualValues)
+ if(attribute.isOversized() && !converterOptions.isExtractAsConfig() && !converterOptions.isUseActualValues())
{
String valueString = String.valueOf(value);
- if(valueString.length() > oversizeThreshold)
+ if(valueString.length() > converterOptions.getOversizeThreshold())
{
String replacementValue = "".equals(attribute.getOversizedAltText())
- ? String.valueOf(value).substring(0, oversizeThreshold - 4) + "..."
+ ? String.valueOf(value).substring(0, converterOptions.getOversizeThreshold() - 4) + "..."
: attribute.getOversizedAltText();
object.put(name, replacementValue);
@@ -191,7 +175,7 @@ public class ConfiguredObjectToMapConver
object.put(name, value);
}
}
- else if (extractAsConfig)
+ else if (converterOptions.isExtractAsConfig())
{
ConfiguredObjectAttribute<?, ?> attribute = confObject.getModel()
.getTypeRegistry()
@@ -207,10 +191,11 @@ public class ConfiguredObjectToMapConver
}
}
- private void collectContext(Map<String, Object> contextValues, Model model, ConfiguredObject<?> confObject, boolean inheritedContext)
+ private void collectContext(Map<String, Object> contextValues, ConfiguredObject<?> confObject, ConverterOptions options)
{
+ Model model = confObject.getModel();
Object value = confObject.getActualAttributes().get(ConfiguredObject.CONTEXT);
- if (inheritedContext)
+ if (!options.isExcludeInheritedContext())
{
Collection<Class<? extends ConfiguredObject>> parents = model.getParentTypes(confObject.getCategoryClass());
if(parents != null && !parents.isEmpty())
@@ -218,13 +203,23 @@ public class ConfiguredObjectToMapConver
ConfiguredObject parent = confObject.getParent(parents.iterator().next());
if(parent != null)
{
- collectContext(contextValues, model, parent, inheritedContext);
+ collectContext(contextValues, parent, options);
}
}
}
if (value instanceof Map)
{
- contextValues.putAll((Map<String,String>)value);
+ if (options.isUseActualValues())
+ {
+ contextValues.putAll((Map<String,String>)value);
+ }
+ else
+ {
+ for (String contextKey : ((Map<String,String>)value).keySet())
+ {
+ contextValues.put(contextKey, confObject.getContextValue(String.class, contextKey));
+ }
+ }
}
}
@@ -244,14 +239,8 @@ public class ConfiguredObjectToMapConver
private void incorporateChildrenIntoMap(
final ConfiguredObject confObject,
Class<? extends ConfiguredObject> clazz,
- int depth,
Map<String, Object> object,
- final boolean useActualValues,
- final boolean inheritedActuals,
- final boolean includeSystemContext,
- final boolean extractAsConfig,
- final int oversizeThreshold,
- final boolean isSecure)
+ ConverterOptions converterOptions)
{
List<Class<? extends ConfiguredObject>> childTypes = new ArrayList<>(confObject.getModel().getChildTypes(clazz));
@@ -263,9 +252,11 @@ public class ConfiguredObjectToMapConver
return o1.getSimpleName().compareTo(o2.getSimpleName());
}
});
+
+ ConverterOptions childConverterOptions = new ConverterOptions(converterOptions, converterOptions.getDepth() - 1);
for(Class<? extends ConfiguredObject> childClass : childTypes)
{
- if(!(extractAsConfig && confObject.getModel().getParentTypes(childClass).iterator().next() != confObject.getCategoryClass()))
+ if(!(converterOptions.isExtractAsConfig() && confObject.getModel().getParentTypes(childClass).iterator().next() != confObject.getCategoryClass()))
{
Collection children = confObject.getChildren(childClass);
@@ -283,19 +274,14 @@ public class ConfiguredObjectToMapConver
List<Map<String, Object>> childObjects = new ArrayList<>();
+
for (ConfiguredObject child : sortedChildren)
{
- if (!(extractAsConfig && !child.isDurable()))
+ if (!(converterOptions.isExtractAsConfig() && !child.isDurable()))
{
childObjects.add(convertObjectToMap(child,
childClass,
- depth - 1,
- useActualValues,
- inheritedActuals,
- includeSystemContext,
- extractAsConfig,
- oversizeThreshold,
- isSecure));
+ childConverterOptions));
}
}
@@ -310,5 +296,68 @@ public class ConfiguredObjectToMapConver
}
+ public static final class ConverterOptions
+ {
+ private final int _depth;
+ private final boolean _useActualValues;
+ private final boolean _extractAsConfig;
+ private final int _oversizeThreshold;
+ private final boolean _secureTransport;
+ private final boolean _excludeInheritedContext;
+
+ public ConverterOptions(ConverterOptions options, int depth)
+ {
+ this(depth,
+ options.isUseActualValues(),
+ options.isExtractAsConfig(),
+ options.getOversizeThreshold(),
+ options.isSecureTransport(),
+ options.isExcludeInheritedContext());
+ }
+ public ConverterOptions(final int depth,
+ final boolean useActualValues,
+ final boolean extractAsConfig,
+ final int oversizeThreshold,
+ final boolean secureTransport,
+ final boolean excludeInheritedContext)
+ {
+ _depth = depth;
+ _useActualValues = useActualValues;
+ _extractAsConfig = extractAsConfig;
+ _oversizeThreshold = oversizeThreshold;
+ _secureTransport = secureTransport;
+ _excludeInheritedContext = excludeInheritedContext;
+ }
+
+ public int getDepth()
+ {
+ return _depth;
+ }
+
+ public boolean isUseActualValues()
+ {
+ return _useActualValues;
+ }
+
+ public boolean isExtractAsConfig()
+ {
+ return _extractAsConfig;
+ }
+
+ public int getOversizeThreshold()
+ {
+ return _oversizeThreshold;
+ }
+
+ public boolean isSecureTransport()
+ {
+ return _secureTransport;
+ }
+
+ public boolean isExcludeInheritedContext()
+ {
+ return _excludeInheritedContext;
+ }
+ }
}
Modified: qpid/java/branches/6.0.x/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/RestServlet.java
URL: http://svn.apache.org/viewvc/qpid/java/branches/6.0.x/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/RestServlet.java?rev=1742259&r1=1742258&r2=1742259&view=diff
==============================================================================
--- qpid/java/branches/6.0.x/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/RestServlet.java (original)
+++ qpid/java/branches/6.0.x/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/RestServlet.java Wed May 4 12:24:59 2016
@@ -51,12 +51,12 @@ import org.apache.qpid.server.model.Abst
import org.apache.qpid.server.model.Broker;
import org.apache.qpid.server.model.ConfiguredObject;
import org.apache.qpid.server.model.ConfiguredObjectOperation;
+import org.apache.qpid.server.model.Content;
import org.apache.qpid.server.model.IllegalStateTransitionException;
import org.apache.qpid.server.model.IntegrityViolationException;
-import org.apache.qpid.server.model.Content;
import org.apache.qpid.server.model.Model;
-import org.apache.qpid.server.util.urlstreamhandler.data.Handler;
import org.apache.qpid.server.util.ServerScopedRuntimeException;
+import org.apache.qpid.server.util.urlstreamhandler.data.Handler;
import org.apache.qpid.util.DataUrlUtils;
public class RestServlet extends AbstractServlet
@@ -74,6 +74,7 @@ public class RestServlet extends Abstrac
public static final String INCLUDE_SYS_CONTEXT_PARAM = "includeSysContext";
public static final String INHERITED_ACTUALS_PARAM = "inheritedActuals";
public static final String EXTRACT_INITIAL_CONFIG_PARAM = "extractInitialConfig";
+ public static final String EXCLUDE_INHERITED_CONTEXT_PARAM = "excludeInheritedContext";
public static final int SC_UNPROCESSABLE_ENTITY = 422;
/**
@@ -81,7 +82,6 @@ public class RestServlet extends Abstrac
* response with the value attachment. This filename will be derived from the parameter value.
*/
public static final String CONTENT_DISPOSITION_ATTACHMENT_FILENAME_PARAM = "contentDispositionAttachmentFilename";
-
public static final Set<String> RESERVED_PARAMS =
new HashSet<>(Arrays.asList(DEPTH_PARAM,
SORT_PARAM,
@@ -90,7 +90,8 @@ public class RestServlet extends Abstrac
INCLUDE_SYS_CONTEXT_PARAM,
EXTRACT_INITIAL_CONFIG_PARAM,
INHERITED_ACTUALS_PARAM,
- CONTENT_DISPOSITION_ATTACHMENT_FILENAME_PARAM));
+ CONTENT_DISPOSITION_ATTACHMENT_FILENAME_PARAM,
+ EXCLUDE_INHERITED_CONTEXT_PARAM));
public static final int DEFAULT_DEPTH = 1;
public static final int DEFAULT_OVERSIZE = 120;
@@ -379,25 +380,82 @@ public class RestServlet extends Abstrac
int depth;
boolean actuals;
- boolean includeSystemContext;
- boolean inheritedActuals;
int oversizeThreshold;
+ boolean excludeInheritedContext;
if (extractInitialConfig)
{
depth = Integer.MAX_VALUE;
oversizeThreshold = Integer.MAX_VALUE;
actuals = true;
- includeSystemContext = false;
- inheritedActuals = false;
+ excludeInheritedContext = true;
}
else
{
depth = getIntParameterFromRequest(request, DEPTH_PARAM, DEFAULT_DEPTH);
oversizeThreshold = getIntParameterFromRequest(request, OVERSIZE_PARAM, DEFAULT_OVERSIZE);
actuals = getBooleanParameterFromRequest(request, ACTUALS_PARAM);
- includeSystemContext = getBooleanParameterFromRequest(request, INCLUDE_SYS_CONTEXT_PARAM);
- inheritedActuals = getBooleanParameterFromRequest(request, INHERITED_ACTUALS_PARAM);
+ String includeSystemContextParameter = request.getParameter(INCLUDE_SYS_CONTEXT_PARAM);
+ String inheritedActualsParameter = request.getParameter(INHERITED_ACTUALS_PARAM);
+ String excludeInheritedContextParameter = request.getParameter(EXCLUDE_INHERITED_CONTEXT_PARAM);
+
+ if (excludeInheritedContextParameter == null)
+ {
+ /* backward (pre v6.1) compatible behaviour */
+ if (inheritedActualsParameter == null && includeSystemContextParameter == null)
+ {
+ excludeInheritedContext = actuals;
+ }
+ else if (inheritedActualsParameter != null && includeSystemContextParameter != null)
+ {
+ if (actuals)
+ {
+ excludeInheritedContext = !Boolean.parseBoolean(inheritedActualsParameter);
+ }
+ else
+ {
+ excludeInheritedContext = !Boolean.parseBoolean(includeSystemContextParameter);
+ }
+ }
+ else if (inheritedActualsParameter != null)
+ {
+ if (actuals)
+ {
+ excludeInheritedContext = !Boolean.parseBoolean(inheritedActualsParameter);
+ }
+ else
+ {
+ excludeInheritedContext = false;
+ }
+ }
+ else
+ {
+ if (actuals)
+ {
+ excludeInheritedContext = true;
+ }
+ else
+ {
+ excludeInheritedContext = !Boolean.parseBoolean(includeSystemContextParameter);
+ }
+ }
+ }
+ else
+ {
+ if (inheritedActualsParameter != null || includeSystemContextParameter != null)
+ {
+ sendJsonErrorResponse(request,
+ response,
+ SC_UNPROCESSABLE_ENTITY,
+ String.format(
+ "Parameter '%s' cannot be specified together with '%s' or '%s'",
+ EXCLUDE_INHERITED_CONTEXT_PARAM,
+ INHERITED_ACTUALS_PARAM,
+ INCLUDE_SYS_CONTEXT_PARAM));
+ return;
+ }
+ excludeInheritedContext = Boolean.parseBoolean(excludeInheritedContextParameter);
+ }
}
List<Map<String, Object>> output = new ArrayList<>();
@@ -405,7 +463,13 @@ public class RestServlet extends Abstrac
{
output.add(_objectConverter.convertObjectToMap(configuredObject, getConfiguredClass(),
- depth, actuals, inheritedActuals, includeSystemContext, extractInitialConfig, oversizeThreshold, request.isSecure()));
+ new ConfiguredObjectToMapConverter.ConverterOptions(
+ depth,
+ actuals,
+ extractInitialConfig,
+ oversizeThreshold,
+ request.isSecure(),
+ excludeInheritedContext)));
}
@@ -640,10 +704,18 @@ public class RestServlet extends Abstrac
}
else
{
+ final ConfiguredObjectToMapConverter.ConverterOptions converterOptions =
+ new ConfiguredObjectToMapConverter.ConverterOptions(DEFAULT_DEPTH,
+ false,
+ false,
+ DEFAULT_OVERSIZE,
+ request.isSecure(),
+ true);
if (ConfiguredObject.class.isAssignableFrom(operation.getReturnType()))
{
- returnVal = _objectConverter.convertObjectToMap((ConfiguredObject<?>) returnVal, operation.getReturnType(), DEFAULT_DEPTH,
- false, false, false, false, DEFAULT_OVERSIZE, request.isSecure());
+ returnVal = _objectConverter.convertObjectToMap((ConfiguredObject<?>) returnVal,
+ operation.getReturnType(),
+ converterOptions);
}
else if (returnsCollectionOfConfiguredObjects(operation))
{
@@ -651,8 +723,8 @@ public class RestServlet extends Abstrac
for (Object configuredObject : (Collection)returnVal)
{
output.add(_objectConverter.convertObjectToMap((ConfiguredObject<?>) configuredObject,
- getCollectionMemberType((ParameterizedType) operation.getGenericReturnType()),
- DEFAULT_DEPTH, false, false, false, false, DEFAULT_OVERSIZE, request.isSecure()));
+ getCollectionMemberType((ParameterizedType) operation.getGenericReturnType()),
+ converterOptions));
}
returnVal = output;
}
@@ -1013,7 +1085,16 @@ public class RestServlet extends Abstrac
private boolean getBooleanParameterFromRequest(HttpServletRequest request, final String paramName)
{
- return Boolean.parseBoolean(request.getParameter(paramName));
+ return getBooleanParameterFromRequest(request, paramName, false);
}
+ private boolean getBooleanParameterFromRequest(HttpServletRequest request, final String paramName, final boolean defaultValue)
+ {
+ String value = request.getParameter(paramName);
+ if (value == null)
+ {
+ return defaultValue;
+ }
+ return Boolean.parseBoolean(value);
+ }
}
Modified: qpid/java/branches/6.0.x/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/servlet/rest/ConfiguredObjectToMapConverterTest.java
URL: http://svn.apache.org/viewvc/qpid/java/branches/6.0.x/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/servlet/rest/ConfiguredObjectToMapConverterTest.java?rev=1742259&r1=1742258&r2=1742259&view=diff
==============================================================================
--- qpid/java/branches/6.0.x/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/servlet/rest/ConfiguredObjectToMapConverterTest.java (original)
+++ qpid/java/branches/6.0.x/broker-plugins/management-http/src/test/java/org/apache/qpid/server/management/plugin/servlet/rest/ConfiguredObjectToMapConverterTest.java Wed May 4 12:24:59 2016
@@ -41,6 +41,9 @@ import org.apache.qpid.server.model.Conf
import org.apache.qpid.server.model.ConfiguredObjectMethodAttribute;
import org.apache.qpid.server.model.ConfiguredObjectTypeRegistry;
import org.apache.qpid.server.model.Model;
+import org.apache.qpid.server.model.testmodels.hierarchy.TestCar;
+import org.apache.qpid.server.model.testmodels.hierarchy.TestElecEngineImpl;
+import org.apache.qpid.server.model.testmodels.hierarchy.TestEngine;
import org.apache.qpid.test.utils.QpidTestCase;
public class ConfiguredObjectToMapConverterTest extends QpidTestCase
@@ -63,13 +66,13 @@ public class ConfiguredObjectToMapConver
Map<String, Object> resultMap = _converter.convertObjectToMap(_configuredObject,
ConfiguredObject.class,
- 0,
- false,
- false,
- false,
- false,
- 120,
- false);
+ new ConfiguredObjectToMapConverter.ConverterOptions(
+ 0,
+ false,
+ false,
+ 120,
+ false,
+ false));
Map<String, Object> statsAsMap = (Map<String, Object>) resultMap.get(STATISTICS_MAP_KEY);
assertNotNull("Statistics should be part of map", statsAsMap);
assertEquals("Unexpected number of statistics", 1, statsAsMap.size());
@@ -86,13 +89,13 @@ public class ConfiguredObjectToMapConver
Map<String, Object> resultMap = _converter.convertObjectToMap(_configuredObject,
ConfiguredObject.class,
- 0,
- false,
- false,
- false,
- false,
- 120,
- false);
+ new ConfiguredObjectToMapConverter.ConverterOptions(
+ 0,
+ false,
+ false,
+ 120,
+ false,
+ false));
assertEquals("Unexpected number of attributes", 1, resultMap.size());
assertEquals("Unexpected attribute value", attributeValue, resultMap.get(attributeName));
}
@@ -111,13 +114,13 @@ public class ConfiguredObjectToMapConver
Map<String, Object> resultMap = _converter.convertObjectToMap(_configuredObject,
ConfiguredObject.class,
- 0,
- false,
- false,
- false,
- false,
- 120,
- false);
+ new ConfiguredObjectToMapConverter.ConverterOptions(
+ 0,
+ false,
+ false,
+ 120,
+ false,
+ false));
assertEquals("Unexpected number of attributes", 1, resultMap.size());
assertEquals("Unexpected attribute value", "attributeConfiguredObjectName", resultMap.get(attributeName));
}
@@ -137,13 +140,13 @@ public class ConfiguredObjectToMapConver
Map<String, Object> resultMap = _converter.convertObjectToMap(_configuredObject,
ConfiguredObject.class,
- 1,
- false,
- false,
- false,
- false,
- 120,
- false);
+ new ConfiguredObjectToMapConverter.ConverterOptions(
+ 1,
+ false,
+ false,
+ 120,
+ false,
+ false));
assertEquals("Unexpected parent map size", 1, resultMap.size());
final List<Map<String, Object>> childList = (List<Map<String, Object>>) resultMap.get("testchilds");
@@ -182,13 +185,13 @@ public class ConfiguredObjectToMapConver
Map<String, Object> resultMap = _converter.convertObjectToMap(_configuredObject,
ConfiguredObject.class,
- 1,
- true,
- false,
- false,
- false,
- 120,
- false);
+ new ConfiguredObjectToMapConverter.ConverterOptions(
+ 1,
+ true,
+ false,
+ 120,
+ false,
+ true));
assertEquals("Unexpected parent map size", 2, resultMap.size());
assertEquals("Incorrect context", resultMap.get(ConfiguredObject.CONTEXT), actualContext);
List<Map<String, Object>> childList = (List<Map<String, Object>>) resultMap.get("testchilds");
@@ -201,18 +204,16 @@ public class ConfiguredObjectToMapConver
resultMap = _converter.convertObjectToMap(_configuredObject,
ConfiguredObject.class,
- 1,
- false,
- false,
- false,
- false,
- 120,
- false);
+ new ConfiguredObjectToMapConverter.ConverterOptions(1,
+ false,
+ false,
+ 120,
+ false,
+ true));
assertEquals("Unexpected parent map size", 2, resultMap.size());
- Map<String, Object> inheritedContext = new HashMap<>();
- inheritedContext.put("key","value");
- inheritedContext.put("inheritedkey","foo");
- assertEquals("Incorrect context", inheritedContext, resultMap.get(ConfiguredObject.CONTEXT));
+ Map<String, Object> effectiveContext = new HashMap<>();
+ effectiveContext.put("key","value");
+ assertEquals("Incorrect context", effectiveContext, resultMap.get(ConfiguredObject.CONTEXT));
childList = (List<Map<String, Object>>) resultMap.get("testchilds");
assertEquals("Unexpected number of children", 1, childList.size());
childMap = childList.get(0);
@@ -243,14 +244,14 @@ public class ConfiguredObjectToMapConver
Map<String, Object> resultMap = _converter.convertObjectToMap(_configuredObject,
- ConfiguredObject.class,
- 1,
- false,
- false,
- false,
- false,
- 20,
- false);
+ ConfiguredObject.class,
+ new ConfiguredObjectToMapConverter.ConverterOptions(
+ 1,
+ false,
+ false,
+ 20,
+ false,
+ false));
Object children = resultMap.get("testchilds");
assertNotNull(children);
assertTrue(children instanceof Collection);
@@ -263,13 +264,12 @@ public class ConfiguredObjectToMapConver
resultMap = _converter.convertObjectToMap(_configuredObject,
ConfiguredObject.class,
- 1,
- false,
- false,
- false,
- false,
- 8,
- false);
+ new ConfiguredObjectToMapConverter.ConverterOptions(1,
+ false,
+ false,
+ 8,
+ false,
+ false));
children = resultMap.get("testchilds");
assertNotNull(children);
@@ -286,13 +286,12 @@ public class ConfiguredObjectToMapConver
resultMap = _converter.convertObjectToMap(_configuredObject,
ConfiguredObject.class,
- 1,
- false,
- false,
- false,
- false,
- 8,
- false);
+ new ConfiguredObjectToMapConverter.ConverterOptions(1,
+ false,
+ false,
+ 8,
+ false,
+ false));
children = resultMap.get("testchilds");
assertNotNull(children);
@@ -331,14 +330,14 @@ public class ConfiguredObjectToMapConver
when(mockChild.isDurable()).thenReturn(true);
Map<String, Object> resultMap = _converter.convertObjectToMap(_configuredObject,
- ConfiguredObject.class,
- 1,
- false,
- false,
- false,
- false,
- 20,
- false);
+ ConfiguredObject.class,
+ new ConfiguredObjectToMapConverter.ConverterOptions(
+ 1,
+ false,
+ false,
+ 20,
+ false,
+ false));
Object children = resultMap.get("testchilds");
assertNotNull(children);
assertTrue(children instanceof Collection);
@@ -348,14 +347,13 @@ public class ConfiguredObjectToMapConver
assertEquals("*****", ((Map) attrs).get("secureAttribute"));
resultMap = _converter.convertObjectToMap(_configuredObject,
- ConfiguredObject.class,
- 1,
- true,
- true,
- false,
- true,
- 20,
- true);
+ ConfiguredObject.class,
+ new ConfiguredObjectToMapConverter.ConverterOptions(1,
+ true,
+ true,
+ 20,
+ true,
+ false));
children = resultMap.get("testchilds");
assertNotNull(children);
@@ -366,14 +364,13 @@ public class ConfiguredObjectToMapConver
assertEquals("secret", ((Map) attrs).get("secureAttribute"));
resultMap = _converter.convertObjectToMap(_configuredObject,
- ConfiguredObject.class,
- 1,
- true,
- true,
- false,
- false,
- 20,
- true);
+ ConfiguredObject.class,
+ new ConfiguredObjectToMapConverter.ConverterOptions(1,
+ true,
+ false,
+ 20,
+ true,
+ false));
children = resultMap.get("testchilds");
assertNotNull(children);
@@ -384,6 +381,114 @@ public class ConfiguredObjectToMapConver
assertEquals("*****", ((Map) attrs).get("secureAttribute"));
}
+ public void testExcludeInheritedContext()
+ {
+ Model model = org.apache.qpid.server.model.testmodels.hierarchy.TestModel.getInstance();
+ final Map<String, Object> carAttributes = new HashMap<>();
+ carAttributes.put(ConfiguredObject.NAME, "myCar");
+ carAttributes.put(ConfiguredObject.CONTEXT, Collections.singletonMap("parentTest", "parentTestValue"));
+ TestCar car = model.getObjectFactory().create(TestCar.class,
+ carAttributes);
+ final Map<String, Object> engineAttributes = new HashMap<>();
+ engineAttributes.put(ConfiguredObject.NAME, "myEngine");
+ engineAttributes.put(ConfiguredObject.TYPE, TestElecEngineImpl.TEST_ELEC_ENGINE_TYPE);
+ engineAttributes.put(ConfiguredObject.CONTEXT, Collections.singletonMap("test", "testValue"));
+ TestEngine engine = (TestEngine) car.createChild(TestEngine.class, engineAttributes);
+
+ Map<String, Object> resultMap = _converter.convertObjectToMap(engine,
+ ConfiguredObject.class,
+ new ConfiguredObjectToMapConverter.ConverterOptions(
+ 1,
+ false,
+ false,
+ 0,
+ false,
+ false));
+ Object contextValue = resultMap.get("context");
+ assertTrue("Unexpected type of context", contextValue instanceof Map);
+ assertTrue("Unexpected size of context", ((Map)contextValue).size() > 1);
+ assertEquals("Unexpected context content", "testValue", ((Map)contextValue).get("test"));
+ assertEquals("Unexpected context content", "parentTestValue", ((Map)contextValue).get("parentTest"));
+
+ resultMap = _converter.convertObjectToMap(engine,
+ ConfiguredObject.class,
+ new ConfiguredObjectToMapConverter.ConverterOptions(1,
+ false,
+ false,
+ 0,
+ false,
+ true));
+ contextValue = resultMap.get("context");
+ assertTrue("Unexpected type of context", contextValue instanceof Map);
+ assertEquals("Unexpected size of context", 1, ((Map)contextValue).size());
+ assertEquals("Unexpected context content","testValue", ((Map)contextValue).get("test"));
+
+
+
+
+
+ /*
+
+
+
+// Model model = createTestModel();
+ ConfiguredObjectTypeRegistry typeRegistry = model.getTypeRegistry();
+ Map<String, ConfiguredObjectAttribute<?, ?>> attributeTypes = typeRegistry.getAttributeTypes(TestChild.class);
+ ConfiguredObjectAttribute contextAttribute = mock(ConfiguredObjectMethodAttribute.class);
+ when(attributeTypes.get(eq("context"))).thenReturn(contextAttribute);
+
+ TestChild mockChild = mock(TestChild.class);
+ when(mockChild.getModel()).thenReturn(model);
+ when(mockChild.getCategoryClass()).thenReturn(TestChild.class);
+ when(mockChild.getParent(Matchers.<Class>any())).thenReturn(_configuredObject);
+ when(_configuredObject.getModel()).thenReturn(model);
+ when(_configuredObject.getChildren(TestChild.class)).thenReturn(Arrays.asList(mockChild));
+ when(model.getParentTypes(TestChild.class)).thenReturn(Collections.<Class<? extends ConfiguredObject>>singleton(TestChild.class));
+ when(_configuredObject.getCategoryClass()).thenReturn(TestChild.class);
+
+
+ // set encoded value
+ final Map<String,String> context = new HashMap<>();
+ context.put("test", "testValue");
+ configureMockToReturnOneAttribute(mockChild, "context", context);
+ when(mockChild.getContextKeys(anyBoolean())).thenReturn(context.keySet());
+ when(mockChild.getContextValue(String.class, "test")).thenReturn(context.get("test"));
+
+ final Map<String, String> parentContext = new HashMap<>();
+ parentContext.put("parentTest", "parentTestValue");
+ configureMockToReturnOneAttribute(_configuredObject, "context", parentContext);
+ when(_configuredObject.getContextKeys(anyBoolean())).thenReturn(parentContext.keySet());
+ when(_configuredObject.getContextValue(String.class, "parentTest")).thenReturn(parentContext.get("parentTest"));
+
+ Map<String, Object> resultMap = _converter.convertObjectToMap(mockChild,
+ ConfiguredObject.class,
+ new ConfiguredObjectToMapConverter.ConverterOptions(
+ 1,
+ false,
+ false,
+ 0,
+ false,
+ false));
+ Object contextValue = resultMap.get("context");
+ assertTrue("Unexpected type of context", contextValue instanceof Map);
+ assertEquals("Unexpected size of context", 2, ((Map)contextValue).size());
+ assertEquals("Unexpected context content", "testValue", ((Map)contextValue).get("test"));
+ assertEquals("Unexpected context content", "parentTestValue", ((Map)contextValue).get("parentTest"));
+
+ resultMap = _converter.convertObjectToMap(mockChild,
+ ConfiguredObject.class,
+ new ConfiguredObjectToMapConverter.ConverterOptions(1,
+ false,
+ false,
+ 0,
+ false,
+ true));
+ contextValue = resultMap.get("context");
+ assertTrue("Unexpected type of context", contextValue instanceof Map);
+ assertEquals("Unexpected size of context", 1, ((Map)contextValue).size());
+ assertEquals("Unexpected context content","testValue", ((Map)contextValue).get("test"));*/
+ }
+
private Model createTestModel()
{
Model model = mock(Model.class);
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org