java - BeanUtils - 'describe' 方法返回 InitationTargetException

标签 java apache-commons-beanutils invocationtargetexception

我正在尝试在映射中获取以下实体的属性:

@Entity
@Table(name = "ps_parameter")
@NamedQueries({Named Queries Here..})
public class PSParameter
    implements Serializable
{
    //~ Static variables/initializers ----------------------------------------------------
    ....

    //~ Instance variables ---------------------------------------------------------------

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id", nullable = false)
    private Integer id;

    @Column(name = "name", nullable = false)
    private String name;

    @Column(name = "paramValue", nullable = false)
    private String paramValue;

    //~ Constructors ---------------------------------------------------------------------
    ....

    //~ Methods --------------------------------------------------------------------------
    public Double getDoubleValue()
    {
        return Double.parseDouble(getParamValue());
    }

    public Integer getIntegerValue()
    {
        return Integer.parseInt(getParamValue());
    }
    ....
}

通过以下方式:

 ....
 try
   {
   Map propertiesCurrentObject = BeanUtils.describe(currentObject);
   ....
   }
 ....

显然currentObject是一个PSParameter..

每当调用 describe 函数时,我都会收到 InitationTargetException:

java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:616)
    at org.apache.commons.beanutils.PropertyUtilsBean.invokeMethod(PropertyUtilsBean.java:2170)
    at org.apache.commons.beanutils.PropertyUtilsBean.getSimpleProperty(PropertyUtilsBean.java:1332)
    at org.apache.commons.beanutils.PropertyUtilsBean.getNestedProperty(PropertyUtilsBean.java:770)
    at org.apache.commons.beanutils.BeanUtilsBean.getNestedProperty(BeanUtilsBean.java:715)
    at org.apache.commons.beanutils.BeanUtilsBean.getProperty(BeanUtilsBean.java:741)
    at org.apache.commons.beanutils.BeanUtilsBean.describe(BeanUtilsBean.java:514)
    at org.apache.commons.beanutils.BeanUtils.describe(BeanUtils.java:185)
    at xxx.yyy.ejb.core.facade.AuditEntryFacade.getChangesBetweenTwoObjects(AuditEntryFacade.java:1198)
....

根本原因如下:

Caused by: java.lang.NumberFormatException: For input string: "true"
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
    at java.lang.Integer.parseInt(Integer.java:481)
    at java.lang.Integer.parseInt(Integer.java:514)
    at xxx.yyy.ejb.core.entity.PSParameter.getIntegerValue(PSParameter.java:169)
    ... 87 more

有任何提示为什么会发生这种情况吗?我的意思是,我很清楚异常的根本原因,即无法将字符串解析为整数,但是为什么 BeanUtils 及其 describe 会这样做呢?

有什么办法可以避免这个问题,或者有其他选择吗?谢谢!

最佳答案

来自Javadoc :

Return the entire set of properties for which the specified bean provides a read method. This map contains the to String converted property values for all properties for which a read method is provided

这意味着describe()方法返回给定bean的从属性到属性值的映射,调用getter来获取后者。这意味着当调用 describe() 时,您的 getter 都不应该抛出异常。

关于java - BeanUtils - 'describe' 方法返回 InitationTargetException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5707696/

相关文章:

java - Spring MVC 中的 UTF-8 编码问题

java - BeanUtils 在 hashCode() 中抛出 NullPointerException

java - BeanUtils.copyProperties 产生 java.lang.VerifyError :

java - 按两次 ToggleButton 时无法在自定义线程中执行 while 循环(仅适用于第一次)

Java vaadin表字段定制

java - JSP 页面提交的输入路径 ID 总是被@ModelAttribute 解释为零,因此无法更新模型对象

Java BeanUtils 带下划线 (_) 的未知属性

java - 当我在耶拿使用类模型在 Web 服务中加载 RDF 文件时出错

c# - 从 BackgroundWorker.DoWork 返回抛出 TargetInvocationException

Java 堆转储错误 - 元数据似乎不是多态的