对于公共setter,isAccessible()返回false



我使用PODAM在一些JUnit测试用例中用一些测试数据填充我的对象。我遇到了一个对我来说毫无意义的错误。

PODAM在制造我的对象时报告这一行日志:

setter:setId不可访问。将其设置为可访问。然而这是一次安全黑客攻击,您的代码应该真正遵守Javabean标准。

当我的每一个setter试图填充一个对象时,我都会收到这个警告。在这种情况下,setId()由以下部分组成:

public void setId( int id )
{
    this.id = id;
}

有人知道为什么这个错误会被标记吗?因为这个方法是公开的,为什么它会被标记为"不可访问"。

我已经查看了PODAM源代码,它正在检查该方法是否可访问,每次返回false时,PODAM都会在调用它之前将该方法设置为可访问:

if (!setter.isAccessible()) {
                    LOG.warn("The setter: {} is not accessible.Setting it to accessible. "
                            + "However this is a security hack and your code should really adhere to Javabean standards.",
                            setter.getName());
                    setter.setAccessible(true);
                }
                setter.invoke(retValue, setterArg);    

PODAM实际上工作得很好,并按照我的意愿用随机数据填充所有字段。我只是好奇为什么每次都会出现这个错误,以及代码中是否存在导致它不遵守标准的问题。

isAccessible()为公共设置程序返回false

是的。应该这样。根据javadocs,accessible标志确定当您试图通过Method对象(反射式)调用该方法时,Method对象是否忽略了正常的Java访问规则。根据javadoc,标志默认为false。。。意思是"应用Java访问规则"。

然而。您发布的代码片段似乎将accessible标志误解为指示可以调用该方法。这是不正确的。。。最终结果是虚假的警告。

这看起来像是PODAM中的一个错误,我建议您向PODAM库的维护人员提出一个问题。

相关内容

  • 没有找到相关文章