Search code examples
configurationliferayliferay-7

Attribute is required but not set (Unable to create snapshot class for interface)


My Liferay 7 server was using SomeModule happily, until I deployed a new version of SomeModule which has an additional required field favoriteColor.

Now whenever I try to load the portlet Liferay says:

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)

The configuration UI for SomeModule does not show anything about favoriteColor.

How to fix that, for instance by setting favoriteColor to its default value?


Solution

  • An alternative path would be using a OSGi configuration file to set defaults and missing values. You can use those files as you do for those modules that come with liferay; e.g., elasticsearch config. (check your osgi/configs directory)