属性是必需的但未设置(无法为接口创建快照类)

时间:2017-12-11 06:51:08

标签: configuration liferay liferay-7

我的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的配置界面没有显示favoriteColor的任何内容。

如何解决这个问题,例如将favoriteColor设置为默认值?

2 个答案:

答案 0 :(得分:1)

如果你足够幸运拥有模块的源代码,你可以像这样解决这个问题:

  1. 暂时将新字段设为可选,但将required = true替换为required = false中的SomeModuleConfiguration.java
  2. 部署模块。
  3. 加载配置页,保存。
  4. 恢复为required = true
  5. 再次部署。
  6. 欢迎替代答案!

答案 1 :(得分:1)

备用路径是使用OSGi配置文件来设置默认值和缺失值。您可以像使用liferay附带的那些模块一样使用这些文件;例如,elasticsearch配置。 (查看你的osgi / configs目录)