package er.ajax.json.client; import java.lang.reflect.Field; import org.jabsorb.JSONSerializer; import org.jabsorb.client.Client; import org.jabsorb.client.HTTPSession; import org.jabsorb.client.TransportRegistry; import er.ajax.json.serializer.ERXConstantSerializer; import er.ajax.json.serializer.JSONEnterpriseObjectSerializer; import er.ajax.json.serializer.NSArraySerializer; import er.ajax.json.serializer.NSDataSerializer; import er.ajax.json.serializer.NSDictionarySerializer; import er.ajax.json.serializer.NSTimestampSerializer; /** * If you are trying to communicate with a WO JSON server from another Java app, JavaJSONClient provides a factory for * creating the appropiate JSON Client class. * * @author mschrag */ public class JavaJSONClient { /** * Creates and returns a JSON Client. * * @param jsonUrl * the JSON service URL * @param useHttpClient * if true, Commons HTTPClient will be used instead of URLConnection (much better, but requires * HttpClient) * @return the JSON client * @throws Exception * if the client creation fails */ public static Client create(String jsonUrl, boolean useHttpClient) throws Exception { if (useHttpClient) { HTTPSession.register(TransportRegistry.i()); } Client client = new Client(TransportRegistry.i().createSession(jsonUrl)); Field serializerField = client.getClass().getDeclaredField("serializer"); serializerField.setAccessible(true); JSONSerializer serializer = (JSONSerializer) serializerField.get(client); serializer.registerSerializer(new JSONEnterpriseObjectSerializer()); serializer.registerSerializer(new NSArraySerializer()); serializer.registerSerializer(new NSDictionarySerializer()); serializer.registerSerializer(new NSTimestampSerializer()); serializer.registerSerializer(new NSDataSerializer()); serializer.registerSerializer(new ERXConstantSerializer()); return client; } }