使用Degister将XML解析为Bean时,明明Bean中的属性名与XML中的节点名称一模一样,但运行时,却提示:
java.lang.NoSuchMethodException: Bean has no property named ZoneID......,这个ZoneID就是XML中的节点,在Bean中也设置属性名也为此名,并设置好对应的setter和getter方法。
原因是什么呢?
问题原因就出在这个属性名上,根据JAVA编程命名规则,属性名最好以小写字母开头,所以commons-beanutils包中关于将xml与bean的映射关系处理时,默认使用了这个规则,对于以大写开头的属性名将不认可。
只要将bean的属性名以小写字母命名即可,同时设置好digester方法中的对应关系,如:
Digester digester = new Digester();
digester.setValidating(false);
digester.addObjectCreate("DataSet/diffgr:diffgram/NewDataSet/Area", Area.class);
digester.addBeanPropertySetter("DataSet/diffgr:diffgram/NewDataSet/Area/ZoneID", "zoneID");
OK!问题解决!
|