我使用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库的维护人员提出一个问题。