I also run into this very same issue in Play 1.2. Here's the code from the Plugin (still work in progress, lots of snippets experimenting everywhere. ) Basically I didn't like how JPA binds model objects and tried to intercept it myself. But on class start i would get some exceptions.
package com.tulsi.binders;
import java.lang.annotation.Annotation;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.lang.reflect.Type;
import java.util.Arrays;
import java.util.Map;
import org.json.simple.JSONObject;
import org.json.simple.JSONValue;
import models.BaseModel;
import models.autoup.IB;
import play.Logger;
import play.PlayPlugin;
import play.data.binding.BeanWrapper;
public class TulsiBinderPlugin extends PlayPlugin {
public static BeanWrapper ibWrapper = new BeanWrapper(IB.class);
@Override
public Object bind(String name, Class clazz, Type type,
Annotation[] annotations, Map<String, String[]> params) {
// debug(name, clazz, type, annotations, params);
Class sc = clazz.getSuperclass();
if (sc != null && sc.getCanonicalName().equals(BaseModel.class.getCanonicalName())) {
Logger.debug("BaseModel intercepted by TulsiBinder");
if (clazz.getName().equals(IB.class.getName()))
return bindIB(name, type, annotations, params);
}
// if (clazz.getName().equals(models.autoup.IB.class.getName())) {
// IB i = new IB();
// i.contractId =2323232;
// return i;
// IB i = IB.all().first();
// return i;
// }
return null;
}
public IB bindIB(String name, Type type,
Annotation[] annotations, Map<String, String[]> params) {
IB ib;
try {
ib = (IB) ibWrapper.bind(name, type, params, "", annotations);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
ib = new IB();
}
//new IB();
ib.localSymbol = "";
for (String key : params.keySet()) {
ib.localSymbol += key + "\n";
ib.localSymbol += "\t" + Arrays.asList(params.get(key)) + "\n";
}
if (params.get("ib") != null) {
JSONObject obj = (JSONObject) JSONValue.parse(params.get("ib")[0]);
ib.localSymbol += "\n json object starts here\n\n";
ib.localSymbol += obj.toJSONString();
}
if (true)
return ib;
Field fieldlist[] = IB.class.getDeclaredFields();
for (int i = 0; i < fieldlist.length; i++) {
Field fld = fieldlist[i];
System.out.println("name = " + fld.getName());
System.out.println("decl class = " + fld.getDeclaringClass());
System.out.println("type = " + fld.getType());
int mod = fld.getModifiers();
System.out.println("modifiers = " + Modifier.toString(mod));
System.out.println("-----");
}
return null;
}
private void debug(String name, Class clazz, Type type,
Annotation[] annotations, Map<String, String[]> params) {
System.out.println("Name : " + name );
System.out.println(type.getClass());
System.out.println(clazz.getSuperclass());
for (String key : params.keySet()) {
System.out.println(key);
System.out.println(Arrays.asList(params.get(key)));
}
System.out.println("annotations");
System.out.println(Arrays.asList(annotations));
}
}
Oops: UnexpectedException
opertiesEnhancer on com.tulsi.binders.TulsiBinderPlugin
play.exceptions.UnexpectedException: While applying play.CorePlugin@317cfd38 on com.tulsi.binders.TulsiBinderPlugin
at play.plugins.PluginCollection.enhance(PluginCollection.java:436)
at play.classloading.ApplicationClasses$ApplicationClass.enhance(ApplicationClasses.java:208)
at play.classloading.ApplicationClassloader.loadApplicationClass(ApplicationClassloader.java:151)
at play.classloading.ApplicationClassloader.loadClass(ApplicationClassloader.java:84)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
at play.plugins.PluginCollection.reloadApplicationPlugins(PluginCollection.java:141)
at play.Play.start(Play.java:418)
at play.Play.detectChanges(Play.java:569)
at play.Invoker$Invocation.init(Invoker.java:186)
at Invocation.HTTP Request(Play!)
Caused by: play.exceptions.UnexpectedException: While applying class play.classloading.enhancers.PropertiesEnhancer on c
om.tulsi.binders.TulsiBinderPlugin
at play.CorePlugin.enhance(CorePlugin.java:297)
at play.plugins.PluginCollection.enhance(PluginCollection.java:433)
... 9 more