source: branches/objectmq-1.0/src/omq/common/util/Serializers/GsonImp.java @ 33

Last change on this file since 33 was 33, checked in by amoreno, 11 years ago

new release version

File size: 2.5 KB
Line 
1package omq.common.util.Serializers;
2
3import java.util.List;
4
5import omq.common.event.Event;
6import omq.common.message.Request;
7import omq.common.message.Response;
8import omq.exception.SerializerException;
9import omq.server.remote.request.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                System.out.println(json);
24                return json.getBytes();
25        }
26
27        @Override
28        public Request deserializeRequest(byte[] bytes, RemoteObject obj) throws SerializerException {
29                String json = new String(bytes);
30
31                JsonParser parser = new JsonParser();
32                JsonObject jsonObj = parser.parse(json).getAsJsonObject();
33
34                String id = jsonObj.get("id").getAsString();
35                String method = jsonObj.get("method").getAsString();
36
37                List<Class<?>> types = obj.getParams(method);
38
39                try {
40                        JsonArray jsonArgs = (JsonArray) jsonObj.get("arguments");
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
52                        return new Request(id, method, arguments);
53                } catch (NullPointerException e) {
54                        return new Request(id, method, null);
55                }
56        }
57
58        @Override
59        public Response deserializeResponse(byte[] bytes, Class<?> type) throws SerializerException {
60                String json = new String(bytes);
61
62                JsonParser parser = new JsonParser();
63                JsonObject jsonObj = parser.parse(json).getAsJsonObject();
64
65                String id = jsonObj.get("id").getAsString();
66                String idOmq = jsonObj.get("idOmq").getAsString();
67
68                JsonElement jsonElement = jsonObj.get("result");
69                Object result = gson.fromJson(jsonElement, type);
70
71                return new Response(id, idOmq, result);
72        }
73
74        @Override
75        public Event deserializeEvent(byte[] bytes) throws SerializerException {
76                try {
77                        String json = new String(bytes);
78                        System.out.println(json);
79                       
80                        JsonParser parser = new JsonParser();
81                        JsonObject jsonObj = parser.parse(json).getAsJsonObject();
82
83                        String type = jsonObj.get("type").getAsString();
84
85                        JsonElement jsonElement = jsonObj.get("event");
86                        Event event;
87
88                        event = (Event) gson.fromJson(jsonElement, Class.forName(type));
89
90                        return event;
91                } catch (Exception e) {
92                        throw new SerializerException("Deserialize event", e.getCause());
93                }
94        }
95
96}
Note: See TracBrowser for help on using the repository browser.