属性是必需的但未设置(无法为接口创建快照 class)
Attribute is required but not set (Unable to create snapshot class for interface)
我的 Liferay 7 服务器一直在愉快地使用 SomeModule
,直到我部署了新版本的 SomeModule
,它有一个额外的必填字段 favoriteColor
.
现在每当我尝试加载 portlet 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
的配置 UI 没有显示关于 favoriteColor
的任何信息。
如何解决这个问题,例如将 favoriteColor
设置为其默认值?
如果你有幸得到模块的源代码,你可以这样解决这个问题:
- 暂时将新字段设为可选,但将
SomeModuleConfiguration.java
中的 required = true
替换为 required = false
。
- 部署模块。
- 加载配置页面,保存。
- 恢复到
required = true
。
- 再次部署。
欢迎其他答案!
另一种方法是使用 OSGi 配置文件来设置默认值和缺失值。您可以像使用 liferay 附带的那些模块一样使用这些文件;例如,elasticsearch 配置。 (检查您的 osgi/configs 目录)
我的 Liferay 7 服务器一直在愉快地使用 SomeModule
,直到我部署了新版本的 SomeModule
,它有一个额外的必填字段 favoriteColor
.
现在每当我尝试加载 portlet 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
的配置 UI 没有显示关于 favoriteColor
的任何信息。
如何解决这个问题,例如将 favoriteColor
设置为其默认值?
如果你有幸得到模块的源代码,你可以这样解决这个问题:
- 暂时将新字段设为可选,但将
SomeModuleConfiguration.java
中的required = true
替换为required = false
。 - 部署模块。
- 加载配置页面,保存。
- 恢复到
required = true
。 - 再次部署。
欢迎其他答案!
另一种方法是使用 OSGi 配置文件来设置默认值和缺失值。您可以像使用 liferay 附带的那些模块一样使用这些文件;例如,elasticsearch 配置。 (检查您的 osgi/configs 目录)