mirror of
https://github.com/apache/cloudstack.git
synced 2025-11-02 20:02:29 +01:00
fix exception in PingRoutingWithNwGroupsCommand, due to no json serialize for pair<long, long>
This commit is contained in:
parent
2d316eabb7
commit
2d722e685b
@ -18,22 +18,91 @@ version.
|
||||
*/
|
||||
package com.cloud.agent.api;
|
||||
|
||||
import java.lang.reflect.Type;
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import com.cloud.host.Host.Type;
|
||||
import com.cloud.agent.api.SecStorageFirewallCfgCommand.PortConfig;
|
||||
import com.cloud.agent.transport.Request;
|
||||
import com.cloud.host.Host;
|
||||
import com.cloud.utils.Pair;
|
||||
import com.cloud.vm.State;
|
||||
import com.google.gson.Gson;
|
||||
import com.google.gson.GsonBuilder;
|
||||
import com.google.gson.JsonArray;
|
||||
import com.google.gson.JsonDeserializationContext;
|
||||
import com.google.gson.JsonDeserializer;
|
||||
import com.google.gson.JsonElement;
|
||||
import com.google.gson.JsonNull;
|
||||
import com.google.gson.JsonParseException;
|
||||
import com.google.gson.JsonPrimitive;
|
||||
import com.google.gson.JsonSerializationContext;
|
||||
import com.google.gson.JsonSerializer;
|
||||
import com.google.gson.reflect.TypeToken;
|
||||
|
||||
|
||||
public class PingRoutingWithNwGroupsCommand extends PingRoutingCommand {
|
||||
HashMap<String, Pair<Long, Long>> newGroupStates;
|
||||
|
||||
public static class NwGroupsCommandTypeAdaptor implements JsonDeserializer<Pair<Long, Long>>, JsonSerializer<Pair<Long,Long>> {
|
||||
static final GsonBuilder s_gBuilder;
|
||||
static {
|
||||
s_gBuilder = Request.initBuilder();
|
||||
}
|
||||
|
||||
public NwGroupsCommandTypeAdaptor() {
|
||||
}
|
||||
|
||||
@Override
|
||||
public JsonElement serialize(Pair<Long, Long> src,
|
||||
java.lang.reflect.Type typeOfSrc, JsonSerializationContext context) {
|
||||
JsonArray array = new JsonArray();
|
||||
Gson json = s_gBuilder.create();
|
||||
if(src.first() != null) {
|
||||
array.add(json.toJsonTree(src.first()));
|
||||
} else {
|
||||
array.add(new JsonNull());
|
||||
}
|
||||
|
||||
if (src.second() != null) {
|
||||
array.add(json.toJsonTree(src.second()));
|
||||
} else {
|
||||
array.add(new JsonNull());
|
||||
}
|
||||
|
||||
return array;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Pair<Long, Long> deserialize(JsonElement json,
|
||||
java.lang.reflect.Type type, JsonDeserializationContext context)
|
||||
throws JsonParseException {
|
||||
Pair<Long, Long> pairs = new Pair<Long, Long>(null, null);
|
||||
JsonArray array = json.getAsJsonArray();
|
||||
if (array.size() != 2) {
|
||||
return pairs;
|
||||
}
|
||||
JsonElement element = array.get(0);
|
||||
if (!element.isJsonNull()) {
|
||||
pairs.first(element.getAsLong());
|
||||
}
|
||||
|
||||
element = array.get(1);
|
||||
if (!element.isJsonNull()) {
|
||||
pairs.second(element.getAsLong());
|
||||
}
|
||||
|
||||
return pairs;
|
||||
}
|
||||
|
||||
}
|
||||
protected PingRoutingWithNwGroupsCommand() {
|
||||
super();
|
||||
}
|
||||
|
||||
public PingRoutingWithNwGroupsCommand(Type type, long id, Map<String, State> states, HashMap<String, Pair<Long, Long>> nwGrpStates) {
|
||||
public PingRoutingWithNwGroupsCommand(Host.Type type, long id, Map<String, State> states, HashMap<String, Pair<Long, Long>> nwGrpStates) {
|
||||
super(type, id, states);
|
||||
newGroupStates = nwGrpStates;
|
||||
}
|
||||
@ -45,5 +114,4 @@ public class PingRoutingWithNwGroupsCommand extends PingRoutingCommand {
|
||||
public void setNewGroupStates(HashMap<String, Pair<Long, Long>> newGroupStates) {
|
||||
this.newGroupStates = newGroupStates;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -25,11 +25,13 @@ import org.apache.log4j.Logger;
|
||||
|
||||
import com.cloud.agent.api.Answer;
|
||||
import com.cloud.agent.api.Command;
|
||||
import com.cloud.agent.api.PingRoutingWithNwGroupsCommand;
|
||||
import com.cloud.agent.api.SecStorageFirewallCfgCommand;
|
||||
import com.cloud.agent.api.SecStorageFirewallCfgCommand.PortConfig;
|
||||
import com.cloud.exception.UnsupportedVersionException;
|
||||
import com.cloud.storage.VolumeVO;
|
||||
import com.cloud.utils.NumbersUtil;
|
||||
import com.cloud.utils.Pair;
|
||||
import com.cloud.utils.exception.CloudRuntimeException;
|
||||
import com.google.gson.Gson;
|
||||
import com.google.gson.GsonBuilder;
|
||||
@ -85,6 +87,7 @@ public class Request {
|
||||
final Type listType = new TypeToken<List<VolumeVO>>() {}.getType();
|
||||
s_gBuilder.registerTypeAdapter(listType, new VolListTypeAdaptor());
|
||||
s_gBuilder.registerTypeAdapter(new TypeToken<List<PortConfig>>() {}.getType(), new SecStorageFirewallCfgCommand.PortConfigListTypeAdaptor());
|
||||
s_gBuilder.registerTypeAdapter(new TypeToken<Pair<Long, Long>>() {}.getType(), new PingRoutingWithNwGroupsCommand.NwGroupsCommandTypeAdaptor());
|
||||
s_logger.info("Builder inited.");
|
||||
}
|
||||
|
||||
|
||||
@ -23,9 +23,11 @@ import java.util.List;
|
||||
|
||||
import com.cloud.agent.api.Answer;
|
||||
import com.cloud.agent.api.Command;
|
||||
import com.cloud.agent.api.PingRoutingWithNwGroupsCommand;
|
||||
import com.cloud.agent.transport.ArrayTypeAdaptor;
|
||||
import com.cloud.agent.transport.VolListTypeAdaptor;
|
||||
import com.cloud.storage.VolumeVO;
|
||||
import com.cloud.utils.Pair;
|
||||
import com.google.gson.GsonBuilder;
|
||||
import com.google.gson.reflect.TypeToken;
|
||||
|
||||
|
||||
@ -21,6 +21,10 @@ public class Pair<T, U> {
|
||||
T t;
|
||||
U u;
|
||||
|
||||
protected Pair() {
|
||||
|
||||
}
|
||||
|
||||
public Pair(T t, U u) {
|
||||
this.t = t;
|
||||
this.u = u;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user