Атрибут обязателен, но не задан (невозможно создать класс снимка для интерфейса)

Мой сервер Liferay 7 использовал SomeModule к счастью, пока я не развернул новую версию SomeModule который имеет дополнительное обязательное поле favoriteColor,

Теперь, когда я пытаюсь загрузить портлет, Liferay говорит:

java.lang.RuntimeException: Unable to create snapshot class for interface some.SomeModuleConfiguration
        at com.liferay.portal.configuration.metatype.bnd.util.ConfigurableUtil._createConfigurableSnapshot(ConfigurableUtil.java:77)
        at com.liferay.portal.configuration.metatype.bnd.util.ConfigurableUtil.createConfigurable(ConfigurableUtil.java:51)
        at some.SomeModule.activate(SomeModule.java:50)
...
aused by: java.lang.IllegalStateException: Attribute is required but not set favoriteColor
        at aQute.bnd.annotation.metatype.Configurable$ConfigurableHandler.invoke(Configurable.java:75)
        at com.sun.proxy.$Proxy1220.favoriteColor(Unknown Source)
        at some.SomeModuleConfigurationSnapshot407.<init>(Unknown Source)

Пользовательский интерфейс конфигурации для SomeModule не показывает ничего о favoriteColor,

Как это исправить, например, установив favoriteColor к его значению по умолчанию?

2 ответа

Решение

Альтернативным путем будет использование файла конфигурации OSGi для установки значений по умолчанию и пропущенных значений. Вы можете использовать эти файлы так же, как и для тех модулей, которые поставляются с liferay; например, настройка config (проверьте каталог osgi/configs)

Если вам повезло иметь исходный код модуля, вы можете решить эту проблему следующим образом:

  1. Временно сделайте новое поле необязательным, но замените required = true в required = false в SomeModuleConfiguration.java,
  2. Разверните модуль.
  3. Загрузите страницу конфигурации, сохраните.
  4. Восстановить в required = true,
  5. Разверните снова.

Альтернативные ответы приветствуются!

Другие вопросы по тегам