source: trunk/src/main/java/omq/common/util/Serializers/GsonImp.java @ 77

Last change on this file since 77 was 75, checked in by stoda, 11 years ago

Multi problem solved

File size: 2.1 KB
Line 
1package omq.common.util.Serializers;
2
3import java.util.List;
4
5import omq.common.message.Request;
6import omq.common.message.Response;
7import omq.exception.OmqException;
8import omq.exception.SerializerException;
9import omq.server.RemoteObject;
10
11import com.google.gson.Gson;
12import com.google.gson.JsonArray;
13import com.google.gson.JsonElement;
14import com.google.gson.JsonObject;
15import com.google.gson.JsonParser;
16
17public class GsonImp implements ISerializer {
18        private final Gson gson = new Gson();
19
20        @Override
21        public byte[] serialize(Object obj) throws SerializerException {
22                String json = gson.toJson(obj);
23                return json.getBytes();
24        }
25
26        @Override
27        public Request deserializeRequest(byte[] bytes, RemoteObject obj) throws SerializerException {
28                String json = new String(bytes);
29
30                JsonParser parser = new JsonParser();
31                JsonObject jsonObj = parser.parse(json).getAsJsonObject();
32
33                String id = jsonObj.get("id").getAsString();
34                String method = jsonObj.get("method").getAsString();
35                boolean async = jsonObj.get("async").getAsBoolean();
36
37                List<Class<?>> types = obj.getParams(method);
38
39                try {
40                        JsonArray jsonArgs = (JsonArray) jsonObj.get("params");
41
42                        // TODO: if (jsonArgs.size() == types.size())
43                        int length = jsonArgs.size();
44                        Object[] arguments = new Object[length];
45
46                        int i = 0;
47                        for (JsonElement element : jsonArgs) {
48                                arguments[i] = gson.fromJson(element, types.get(i));
49                                i++;
50                        }
51                        return new Request(id, method, async, arguments);
52                } catch (NullPointerException e) {
53                        return new Request(id, method, async, null);
54                }
55        }
56
57        @Override
58        public Response deserializeResponse(byte[] bytes, Class<?> type) throws SerializerException {
59                String json = new String(bytes);
60
61                JsonParser parser = new JsonParser();
62                JsonObject jsonObj = parser.parse(json).getAsJsonObject();
63
64                String id = jsonObj.get("id").getAsString();
65                String idOmq = jsonObj.get("idOmq").getAsString();
66
67                JsonElement jsonElement = jsonObj.get("result");
68                Object result = gson.fromJson(jsonElement, type);
69
70                JsonElement jsonError = jsonObj.get("error");
71                OmqException error = gson.fromJson(jsonError, OmqException.class);
72
73                return new Response(id, idOmq, result, error);
74        }
75
76}
Note: See TracBrowser for help on using the repository browser.