I've managed a simple AutoBean with a list. Now I've a more complex one, and I don't understand what's wrong. My get methods are returning null though the debugger shows the object has data.
The JSON looks like this:
{
"mquery":
{
"screenname":"Index Card",
"fields":
{
"field":[
{"title":"Name", "name":"odname", "value":"*TIFF*"},
{"title":"Date", "name":"oddate", "value":""},
{"title":"Ref #", "name":"odrefnum", "value":""}
]
}
}
}
I have three interfaces:
public interface Field {
String getTitle();
void setTitle(String title);
String getName();
void setName(String name);
String getValue();
void setValue(String value);
}
public interface FieldList {
List<Field> getField();
void setField(List<Field> field);
}
public interface MQuery {
String getScreenname();
void setScreenname(String screenname);
FieldList getFields();
void setFields(FieldList fields);
}
In my bean factory, I have
public interface BeanFactory extends AutoBeanFactory {
...
AutoBean<Field> field();
AutoBean<FieldList> fields();
AutoBean<MQuery> mquery();
}
In my onResponseReceived() method, I call
AutoBean<MQuery> mqueryBean =
AutoBeanCodex.decode(clientFactory.getBeanFactory(),
MQuery.class, response.getText());
MQuery mQuery = mqueryBean.as();
logger.log(Level.INFO, mQuery.getScreenname());
screenName = mQuery.getScreenname();
fieldList = mQuery.getFields().getField();
view.renderFields(fieldList);
When I look at the debugger in Chrome, screenname, etc are populated (in mQuery:this$0:data_0 there is mquery with screenename set and 3 field objects in fields). However mQuery.getScreenname() returns null as does mQuery.getFields().
What am I not seeing here? Could the presence of other AutoBean<>s in my factory (beans that work) be messing me up (do I need a separate factory)?