package er.ajax.json;
import org.jabsorb.JSONRPCBridge;
import com.webobjects.appserver.WOContext;
import com.webobjects.appserver.WORequest;
import com.webobjects.appserver.WOResponse;
import com.webobjects.appserver.WOSession;
import er.ajax.json.localarg.WOContextArgResolver;
import er.ajax.json.localarg.WORequestArgResolver;
import er.ajax.json.localarg.WOResponseArgResolver;
import er.ajax.json.localarg.WOSessionArgResolver;
import er.ajax.json.serializer.EOEnterpriseObjectSerializer;
import er.ajax.json.serializer.ERXConstantSerializer;
import er.ajax.json.serializer.NSArraySerializer;
import er.ajax.json.serializer.NSDataSerializer;
import er.ajax.json.serializer.NSDictionarySerializer;
import er.ajax.json.serializer.NSTimestampSerializer;
/**
* Subclass of JSONRPCBridge.
*
*
* @author ak
*/
public class JSONBridge extends JSONRPCBridge {
/**
* Do I need to update serialVersionUID?
* See section 5.6 <cite>Type Changes Affecting Serialization</cite> on page 51 of the
* <a href="http://java.sun.com/j2se/1.4/pdf/serial-spec.pdf">Java Object Serialization Spec</a>
*/
private static final long serialVersionUID = 1L;
private static boolean isInitialized;
public static void _initializeBridge() {
if(isInitialized) {
return;
}
try {
JSONRPCBridge.registerLocalArgResolver(WOResponse.class, WOResponse.class, new WOResponseArgResolver());
JSONRPCBridge.registerLocalArgResolver(WORequest.class, WORequest.class, new WORequestArgResolver());
JSONRPCBridge.registerLocalArgResolver(WOContext.class, WOContext.class, new WOContextArgResolver());
JSONRPCBridge.registerLocalArgResolver(WOSession.class, WOContext.class, new WOSessionArgResolver());
JSONRPCBridge.registerLocalArgResolver(JSONRPCBridge.class, WOContext.class, new WOSessionArgResolver());
JSONRPCBridge.getSerializer().registerSerializer(new EOEnterpriseObjectSerializer());
JSONRPCBridge.getSerializer().registerSerializer(new NSArraySerializer());
JSONRPCBridge.getSerializer().registerSerializer(new NSDictionarySerializer());
JSONRPCBridge.getSerializer().registerSerializer(new NSTimestampSerializer());
JSONRPCBridge.getSerializer().registerSerializer(new NSDataSerializer());
JSONRPCBridge.getSerializer().registerSerializer(new ERXConstantSerializer());
isInitialized = true;
}
catch (Exception e) {
throw new RuntimeException("Failed to initialize JSON.");
}
}
/**
* Factory to create a json bridge.
*
* @return a instance of a JSONBridge
*/
public static JSONBridge createBridge() {
_initializeBridge();
JSONBridge result = new JSONBridge();
// AK: remove this when we find out why dupes don't work
boolean value = true;
JSONBridge.getSerializer().setFixupCircRefs(value);
JSONBridge.getSerializer().setFixupDuplicates(value);
return result;
}
}