Атрибут обязателен, но не задан (невозможно создать класс снимка для интерфейса)
Мой сервер 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)
Если вам повезло иметь исходный код модуля, вы можете решить эту проблему следующим образом:
- Временно сделайте новое поле необязательным, но замените
required = true
вrequired = false
вSomeModuleConfiguration.java
, - Разверните модуль.
- Загрузите страницу конфигурации, сохраните.
- Восстановить в
required = true
, - Разверните снова.
Альтернативные ответы приветствуются!