Java tutorial
/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.s4.client.util; import org.apache.s4.message.Request; import org.apache.s4.message.SinglePERequest; import java.lang.reflect.Type; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.Map; import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.InstanceCreator; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonSerializationContext; import com.google.gson.JsonSerializer; import flexjson.JSONDeserializer; import flexjson.JSONSerializer; public class ObjectBuilder { private ConcurrentHashMap<Class<?>, JSONDeserializer<Object>> deserializers = new ConcurrentHashMap<Class<?>, JSONDeserializer<Object>>(); private JSONSerializer serializer = (new JSONSerializer()).exclude("class"); // private JSONSerializer serializer = (new JSONSerializer()); public Object fromJson(String jevent, Class<?> clazz) throws ObjectBuilder.Exception { JSONDeserializer<Object> deser = deserializers.get(clazz); if (deser == null) { JSONDeserializer<Object> newDeser = new JSONDeserializer<Object>(); newDeser.use(null, clazz); deser = deserializers.putIfAbsent(clazz, newDeser); if (deser == null) deser = newDeser; } return deser.deserialize(jevent); } public String toJson(Object e) { return serializer.serialize(e); } public static class Exception extends java.lang.Exception { public Exception(String message) { super(message); } public Exception(String message, Throwable cause) { super(message, cause); } } private static class TEST { private int a; private int b; public void setA(int a) { this.a = a * 10; } public String toString() { return "" + a + " " + b; } public int getA() { return a; } public int getB() { return b; } public TEST(int a, int b) { this.a = a * 10; this.b = b * 10; } public TEST() { } } public static void main(String[] argv) throws Exception { ObjectBuilder b = new ObjectBuilder(); String s = "{a:5, b:100}"; Object out = b.fromJson(s, TEST.class); System.out.println(out.toString()); TEST t = new TEST(1, 2); System.out.println(b.toJson(t)); String[] query = { "name", "count", "freq" }; String target[] = { "ACDW", "11" }; org.apache.s4.message.Request.ClientRInfo rinfo = new org.apache.s4.message.Request.ClientRInfo(); rinfo.setRequesterUUID(UUID.randomUUID()); Request req = new org.apache.s4.message.SinglePERequest(Arrays.asList(target), Arrays.asList(query), rinfo); System.out.println(req.toString()); InstanceCreator<org.apache.s4.message.Request.RInfo> infoCreator = new InstanceCreator<org.apache.s4.message.Request.RInfo>() { public org.apache.s4.message.Request.RInfo createInstance(Type type) { return new org.apache.s4.message.Request.ClientRInfo(); } }; Gson gson = (new GsonBuilder()).registerTypeAdapter(org.apache.s4.message.Request.RInfo.class, infoCreator) .registerTypeAdapter(Object.class, new ObjectTypeAdapter()).create(); System.out.println("gson: " + gson.toJson(req)); System.out.println("gson reversed: " + gson.fromJson(gson.toJson(req), SinglePERequest.class)); System.out.println(b.toJson(req)); System.out.println(b.toJson(Arrays.asList(query))); System.out.println("----------------------------------------------"); ArrayList<SSTest> list = new ArrayList<SSTest>(); SSTest ss1 = new SSTest(); ss1.str = "list-element-1"; SSTest ss2 = new SSTest(); ss2.str = "list-element-2"; list.add(ss1); list.add(ss2); Map<String, Object> listmap = new HashMap<String, Object>(); listmap.put("ll", list); MapTest mt = new MapTest(); mt.map = listmap; Object listmapobj = listmap; System.out.println("list: " + gson.toJson(list)); System.out.println("listmap: " + gson.toJson(listmap)); System.out.println("listmapobj: " + gson.toJson(listmapobj)); System.out.println("mapobject: " + gson.toJson(mt)); } private static class SSTest { public String str; } private static class MapTest { Map<String, Object> map; Map gmap; } private static class ObjectTypeAdapter implements JsonSerializer<Object> { public JsonElement serialize(Object src, Type typeOfSrc, JsonSerializationContext context) { if (src.getClass() != Object.class) { return context.serialize(src, src.getClass()); } return new JsonObject(); } } }