i'm trying complex-ish xml parsing using simplexml 2.7.1.
the error i'm getting
org.simpleframework.xml.core.valuerequiredexception: unable satisfy @org.simpleframework.xml.element(name=, type=void, data=false, required=true) on field 'rwrd_nmb' private java.lang.string com.staples.mobile.enterprise.rewards.model.core.simple.table1.rwrd_nmb class com.staples.mobile.enterprise.rewards.model.core.simple.table1 @ line 1
in following test:
@test public void table1shouldgetparsed() { string rawxmlresponse = "<diffgr:diffgram xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\" xmlns:diffgr=\"urn:schemas-microsoft-com:xml-diffgram-v1\">\n" + " <newdataset xmlns=\"\">\n" + " <table1 diffgr:id=\"table11\" msdata:roworder=\"0\">\n" + " <rwrd_nmb>5094934675</rwrd_nmb>\n" + " <tran_id>304011</tran_id>\n" + " <tran_dt>2015-02-23t00:00:00-05:00</tran_dt>\n" + " <str_nmb>1715</str_nmb>\n" + " <sku_nmb>648370</sku_nmb>\n" + " <item_description>648370 - epson t200 color ink 3pk</item_description>\n" + " <disc_prog_id>1</disc_prog_id>\n" + " <category_id>1</category_id>\n" + " <cpn_amt>0.00</cpn_amt>\n" + " <total_qty>1</total_qty>\n" + " <tot_price_amt>22.49</tot_price_amt>\n" + " <net_spnd_amt>22.49</net_spnd_amt>\n" + " <total_rewards>0.00</total_rewards>\n" + " <dsc_pgm_dscr>rewards core program</dsc_pgm_dscr>\n" + " </table1>\n" + " </newdataset>\n" + " </diffgr:diffgram>"; serializer serializer = new persister(); try { table1 table1 = serializer .read(table1.class, rawxmlresponse, false); assert.assertnotnull(table1); } catch (exception e) { e.printstacktrace(); assert.fail(e.getmessage()); } }
table1.java:
@root(name = "table1") @namespacelist({ @namespace(reference = "urn:schemas-microsoft-com:xml-msdata"), @namespace(reference = "urn:schemas-microsoft-com:xml-diffgram-v1") }) public class table1 { @attribute(required = false) private string id; @attribute(required = false) private string roworder; @element private string rwrd_nmb; @element private string tran_id; @element private string tran_dt; @element private string str_nmb; @element private string sku_nmb; @element private string item_description; @element private string disc_prog_id; @element private string category_id; @element private string cpn_amt; @element private int total_qty; @element private float tot_price_amt; @element private float net_spend_amt; @element private float total_rewards; @element private string dsc_pgm_dscr; public string getrewardsnumber() { return rwrd_nmb; } //more getters }
newdataset.java:
@root(name = "newdataset", strict = false) @namespace public class newdataset { @elementlistunion({ @elementlist(entry = "table", type = table.class, inline = true), @elementlist(entry = "table1", type = table1.class, inline = true) }) private list<object> list; public newdataset(){ list = new arraylist<>(); } public list<object> getlist() { return list; } public void setlist(list<object> list) { this.list = list; } }
diffgram.java:
@root(name = "diffgram") @namespacelist({ @namespace(prefix = "msdata", reference = "urn:schemas-microsoft-com:xml-msdata"), @namespace(prefix = "diffgr", reference = "urn:schemas-microsoft-com:xml-diffgram-v1") }) public class diffgram { @element(name = "newdataset") private newdataset newdataset; public newdataset getnewdataset() { return newdataset; } }
i've written similar tests table (a class similar table1, members different), newdataset , diffgram, of giving me valuerequiredexceptions. feel i've been staring @ long , missing fundamental here! have strong feeling if figure 1 of these out, rest fall place.