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

Last change on this file was 83, checked in by stoda, 11 years ago

J

File size: 2.3 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
17/**
18 * Json serialize implementation. It uses the Gson libraries.
19 *
20 * @author Sergi Toda <sergi.toda@estudiants.urv.cat>
21 *
22 */
23public class GsonImp implements ISerializer {
24        private final Gson gson = new Gson();
25
26        @Override
27        public byte[] serialize(Object obj) throws SerializerException {
28                String json = gson.toJson(obj);
29                return json.getBytes();
30        }
31
32        @Override
33        public Request deserializeRequest(byte[] bytes, RemoteObject obj) throws SerializerException {
34                String json = new String(bytes);
35
36                JsonParser parser = new JsonParser();
37                JsonObject jsonObj = parser.parse(json).getAsJsonObject();
38
39                String id = jsonObj.get("id").getAsString();
40                String method = jsonObj.get("method").getAsString();
41                boolean async = jsonObj.get("async").getAsBoolean();
42
43                List<Class<?>> types = obj.getParams(method);
44
45                try {
46                        JsonArray jsonArgs = (JsonArray) jsonObj.get("params");
47
48                        // TODO: if (jsonArgs.size() == types.size())
49                        int length = jsonArgs.size();
50                        Object[] arguments = new Object[length];
51
52                        int i = 0;
53                        for (JsonElement element : jsonArgs) {
54                                arguments[i] = gson.fromJson(element, types.get(i));
55                                i++;
56                        }
57                        return new Request(id, method, async, arguments);
58                } catch (NullPointerException e) {
59                        return new Request(id, method, async, null);
60                }
61        }
62
63        @Override
64        public Response deserializeResponse(byte[] bytes, Class<?> type) throws SerializerException {
65                String json = new String(bytes);
66
67                JsonParser parser = new JsonParser();
68                JsonObject jsonObj = parser.parse(json).getAsJsonObject();
69
70                String id = jsonObj.get("id").getAsString();
71                String idOmq = jsonObj.get("idOmq").getAsString();
72
73                JsonElement jsonElement = jsonObj.get("result");
74                Object result = gson.fromJson(jsonElement, type);
75
76                JsonElement jsonError = jsonObj.get("error");
77                OmqException error = gson.fromJson(jsonError, OmqException.class);
78
79                return new Response(id, idOmq, result, error);
80        }
81
82}
Note: See TracBrowser for help on using the repository browser.