isAccessible () возвращает false для открытых сеттеров

1

Я использую PODAM для заполнения моих объектов некоторыми тестовыми данными в некоторых тестовых случаях JUnit. Я столкнулся с ошибкой, которая для меня не имеет смысла.

PODAM сообщает эту строку регистрации при изготовлении моих объектов:

Setter: setId недоступен. Установите его на доступный. Однако это взлом безопасности, и ваш код должен действительно соответствовать стандартам Javabean.

Я получаю это предупреждение для каждого из моих сеттеров, пытаясь заполнить объект. В этом случае 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 действительно отлично работает и заполняет все поля случайными данными, как я хотел. Мне просто интересно, почему я получаю эту ошибку каждый раз, и если в коде есть проблема, чтобы не поклоняться стандартам.

Теги:
reflection
jemos-podam

1 ответ

3
Лучший ответ

isAccessible() возвращает false для публичных сеттеров

Да. Он должен это сделать. В соответствии с javadocs accessible флаг определяет, игнорирует ли объект Method обычные правила доступа Java, когда вы пытаетесь вызвать метод (отражательно) через объект Method. Согласно javadoc, флаг по умолчанию имеет значение false... что означает "применять правила доступа Java".

Однако. фрагмент кода, который вы опубликовали, как представляется, неверно интерпретирует accessible флаг как указание на то, что метод может быть вызван. Это неверно... и конечный результат - ложные предупреждения.

Это похоже на ошибку в PODAM, и я рекомендую вам поднять проблему с поддерживателями библиотеки PODAM.

  • 0
    Спасибо за разъяснения, я был немного смущен Javadocs. Теперь это имеет больше смысла!
  • 0
    Если этот метод всегда возвращает false, зачем нам этот метод?
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню