I've a strange issue with the PropertyUtils.getProperty(bean, fieldName)
method, where I got a java.lang.NoShuchMethodException
.
Suppose we have a simple java class called pojo:
public class Pojo {
public java.util.Date aDate;
public java.util.Date theDate;
public Pojo(){}
}
and a caller class like
public class TestPojo{
public static void main(String[] args){
Pojo p = new Pojo();
p.setADate(new Date());
p.setTheDate(new Date());
PropertyUtils.getProperty(p, "theDate");
PropertyUtils.getProperty(p, "aDate");
}
}
The first PropertyUtils.getProperty
call works fine, and the second one will throw
the NoSuchMethodExeption
.
I would like to know if I'm missing something stupid or it's really a bug :)
Take a look at this bug report
The Java Bean Specification states in section "8.8 Capitalization of inferred names" that when the first character is converted to lowercase unless the first two characters are both uppercase then the property name is "unchanged".
Adapting the rest for you (in italics):
So when you have a getter method named "getADate" this is translated into property name "ADate" and not "aDate".
So to resolve your issue you have two choices:
- use property name "ADate" instead or
- change you method names to "getaDate" and "setaDate"
I don't understand how PropertyUtils.getProperty(p, "TheDate");
could work since the name of the property is not correct.
Try this:
public class TestPojo{
public static void main(String[] args){
Pojo p = new Pojo();
p.setADate(new Date());
p.setTheDate(new Date());
PropertyUtils.getProperty(p, "theDate");
PropertyUtils.getProperty(p, "aDate");
}
}
Link to the PropertyUtils method
To Solve your problem, two solutions:
As Xavi said it is a reported bug
Try
PropertyUtils.getProperty(p, "ADate");
instead of
PropertyUtils.getProperty(p, "aDate");
May be you need using:
PropertyUtils.getProperty(p, "ADate");
where A in UPPERCASE
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With