This closes #670

This commit is contained in:
jbertram 2016-07-26 15:10:28 -05:00
commit ec605e6643
5 changed files with 66 additions and 29 deletions

View File

@ -260,6 +260,44 @@ public final class JsonUtil {
return Json.createReader(new StringReader(jsonString)).readObject();
}
public static Object convertJsonValue(Object jsonValue, Class desiredType) {
if (jsonValue instanceof JsonNumber) {
JsonNumber number = (JsonNumber) jsonValue;
if (desiredType == null || desiredType == Long.class || desiredType == Long.TYPE) {
return number.longValue();
}
else if (desiredType == Integer.class || desiredType == Integer.TYPE) {
return number.intValue();
}
else if (desiredType == Double.class || desiredType == Double.TYPE) {
return number.doubleValue();
}
else {
return number.longValue();
}
}
else if (jsonValue instanceof JsonString) {
return ((JsonString) jsonValue).getString();
}
else if (jsonValue instanceof JsonValue) {
if (jsonValue == JsonValue.TRUE) {
return true;
}
else if (jsonValue == JsonValue.FALSE) {
return false;
}
else {
return jsonValue.toString();
}
}
else {
return jsonValue;
}
}
private JsonUtil() {
}

View File

@ -21,7 +21,6 @@ import org.apache.activemq.artemis.api.core.Message;
import org.apache.activemq.artemis.api.core.SimpleString;
import javax.json.JsonArray;
import javax.json.JsonNumber;
/**
* Helper class to use ActiveMQ Artemis Core messages to manage server resources.
@ -216,15 +215,20 @@ public final class ManagementHelper {
* and the result will be a String corresponding to the server exception.
*/
public static Object getResult(final Message message) throws Exception {
return getResult(message, null);
}
/**
* Returns the result of an operation invocation or an attribute value.
* <br>
* If an error occurred on the server, {@link #hasOperationSucceeded(Message)} will return {@code false}.
* and the result will be a String corresponding to the server exception.
*/
public static Object getResult(final Message message, Class desiredType) throws Exception {
Object[] res = ManagementHelper.getResults(message);
if (res != null) {
if (res[0] instanceof JsonNumber) {
return ((JsonNumber)res[0]).longValue();
}
else {
return res[0];
}
return JsonUtil.convertJsonValue(res[0], desiredType);
}
else {
return null;

View File

@ -33,6 +33,7 @@ import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ScheduledExecutorService;
import org.apache.activemq.artemis.api.core.BroadcastGroupConfiguration;
import org.apache.activemq.artemis.api.core.JsonUtil;
import org.apache.activemq.artemis.api.core.SimpleString;
import org.apache.activemq.artemis.api.core.TransportConfiguration;
import org.apache.activemq.artemis.api.core.management.AcceptorControl;
@ -721,6 +722,9 @@ public class ManagementServiceImpl implements ManagementService {
if (params[i] == null) {
continue;
}
params[i] = JsonUtil.convertJsonValue(params[i], paramTypes[i]);
if (paramTypes[i].isAssignableFrom(params[i].getClass()) || paramTypes[i] == Long.TYPE && params[i].getClass() == Integer.class ||
paramTypes[i] == Double.TYPE && params[i].getClass() == Integer.class ||
paramTypes[i] == Long.TYPE && params[i].getClass() == Long.class ||

View File

@ -175,7 +175,7 @@ public class ActiveMQServerControlUsingCoreTest extends ActiveMQServerControlTes
@Override
public int getConnectionCount() {
return (Integer) proxy.retrieveAttributeValue("connectionCount");
return (Integer) proxy.retrieveAttributeValue("connectionCount", Integer.class);
}
@Override
@ -245,7 +245,7 @@ public class ActiveMQServerControlUsingCoreTest extends ActiveMQServerControlTes
@Override
public int getIDCacheSize() {
return (Integer) proxy.retrieveAttributeValue("IDCacheSize");
return (Integer) proxy.retrieveAttributeValue("IDCacheSize", Integer.class);
}
public String[] getInterceptorClassNames() {
@ -269,17 +269,17 @@ public class ActiveMQServerControlUsingCoreTest extends ActiveMQServerControlTes
@Override
public int getJournalFileSize() {
return (Integer) proxy.retrieveAttributeValue("journalFileSize");
return (Integer) proxy.retrieveAttributeValue("journalFileSize", Integer.class);
}
@Override
public int getJournalMaxIO() {
return (Integer) proxy.retrieveAttributeValue("journalMaxIO");
return (Integer) proxy.retrieveAttributeValue("journalMaxIO", Integer.class);
}
@Override
public int getJournalMinFiles() {
return (Integer) proxy.retrieveAttributeValue("journalMinFiles");
return (Integer) proxy.retrieveAttributeValue("journalMinFiles", Integer.class);
}
@Override
@ -329,12 +329,12 @@ public class ActiveMQServerControlUsingCoreTest extends ActiveMQServerControlTes
@Override
public int getScheduledThreadPoolMaxSize() {
return (Integer) proxy.retrieveAttributeValue("scheduledThreadPoolMaxSize");
return (Integer) proxy.retrieveAttributeValue("scheduledThreadPoolMaxSize", Integer.class);
}
@Override
public int getThreadPoolMaxSize() {
return (Integer) proxy.retrieveAttributeValue("threadPoolMaxSize");
return (Integer) proxy.retrieveAttributeValue("threadPoolMaxSize", Integer.class);
}
@Override
@ -354,7 +354,7 @@ public class ActiveMQServerControlUsingCoreTest extends ActiveMQServerControlTes
@Override
public String getVersion() {
return (String) proxy.retrieveAttributeValue("version");
return proxy.retrieveAttributeValue("version").toString();
}
@Override
@ -517,22 +517,22 @@ public class ActiveMQServerControlUsingCoreTest extends ActiveMQServerControlTes
@Override
public int getJournalBufferSize() {
return (Integer) proxy.retrieveAttributeValue("JournalBufferSize");
return (Integer) proxy.retrieveAttributeValue("JournalBufferSize", Integer.class);
}
@Override
public int getJournalBufferTimeout() {
return (Integer) proxy.retrieveAttributeValue("JournalBufferTimeout");
return (Integer) proxy.retrieveAttributeValue("JournalBufferTimeout", Integer.class);
}
@Override
public int getJournalCompactMinFiles() {
return (Integer) proxy.retrieveAttributeValue("JournalCompactMinFiles");
return (Integer) proxy.retrieveAttributeValue("JournalCompactMinFiles", Integer.class);
}
@Override
public int getJournalCompactPercentage() {
return (Integer) proxy.retrieveAttributeValue("JournalCompactPercentage");
return (Integer) proxy.retrieveAttributeValue("JournalCompactPercentage", Integer.class);
}
@Override

View File

@ -63,16 +63,7 @@ public class CoreMessagingProxy {
ClientMessage reply;
try {
reply = requestor.request(m);
Object result = ManagementHelper.getResult(reply);
if (desiredType != null && desiredType != result.getClass()) {
// Conversions
if (desiredType == Long.class && result.getClass() == Integer.class) {
Integer in = (Integer) result;
result = new Long(in.intValue());
}
}
Object result = ManagementHelper.getResult(reply, desiredType);
return result;
}