Details
-
Bug
-
Resolution: Done
-
Major
-
3.0.0.Alpha8
-
None
Description
My resource defines an attribute which is a LIST of OBJECT that corresponds to a class (class name + module) and Properties that are passed to the created instance:
private static final String CLASS = "class"; private static final String MODULE = "module"; public static final PropertiesAttributeDefinition PROPERTIES = new PropertiesAttributeDefinition.Builder("properties", true) .setAllowExpression(true) .build(); public static final ObjectTypeAttributeDefinition PROCESS_STATE_LISTENER = ObjectTypeAttributeDefinition.Builder.of("process-state-listener", SimpleAttributeDefinitionBuilder.create(CLASS, ModelType.STRING, false) .setAllowExpression(false) .build(), SimpleAttributeDefinitionBuilder.create(MODULE, ModelType.STRING, false) .setAllowExpression(false) .build(), PROPERTIES) .setRestartAllServices() .setAllowNull(true) .build(); public static final AttributeDefinition PROCESS_STATE_LISTENERS = ObjectListAttributeDefinition.Builder.of("listeners", PROCESS_STATE_LISTENER) .setAllowNull(false) .setRuntimeServiceNotRequired() .build();
I can create the resource from the CLI:
/subsystem=core-management/service=process-state-listeners:add(listeners=[{class=org.foo.Listener, module=org.foo,, properties = {foo = true, bar = ${bar.prop:2}}}]) {"outcome" => "success"}
And the resource and its attribute is properly marshalled to the XML configuration:
<process-state-listeners> <listeners> <process-state-listener class="org.foo.Listener" module="org.foo"> <properties> <property name="foo" value="true"/> <property name="bar" value="${bar.prop:2}"/> </properties> </process-state-listener> </listeners> </process-state-listeners>
However the resource can not be parsed and it fails with the exception:
2016-09-27 14:57:35,285 ERROR [org.jboss.as.server] (Controller Boot Thread) WFLYSRV0055: Caught exception during boot: org.jboss.as.controller.persistence.ConfigurationPersistenceException: WFLYCTL0085: Failed to parse configuration at org.jboss.as.controller.persistence.XmlConfigurationPersister.load(XmlConfigurationPersister.java:131) at org.jboss.as.server.ServerService.boot(ServerService.java:355) at org.jboss.as.controller.AbstractControllerService$1.run(AbstractControllerService.java:303) at java.lang.Thread.run(Thread.java:745) Caused by: javax.xml.stream.XMLStreamException: ParseError at [row,col]:[118,25] Message: WFLYCTL0198: Unexpected element '{urn:jboss:domain:core-management:1.0}properties' encountered at org.jboss.as.controller.parsing.ParseUtils.unexpectedElement(ParseUtils.java:89) at org.jboss.as.controller.parsing.ParseUtils.requireNoContent(ParseUtils.java:244) at org.jboss.as.controller.AttributeParser$5.parseElement(AttributeParser.java:197) at org.jboss.as.controller.PersistentResourceXMLDescription.parseAttributes(PersistentResourceXMLDescription.java:208) at org.jboss.as.controller.PersistentResourceXMLDescription.parseAttributeGroups(PersistentResourceXMLDescription.java:140) at org.jboss.as.controller.PersistentResourceXMLDescription.parse(PersistentResourceXMLDescription.java:117) at org.jboss.as.controller.PersistentResourceXMLDescription.parseChildren(PersistentResourceXMLDescription.java:258) at org.jboss.as.controller.PersistentResourceXMLDescription.parse(PersistentResourceXMLDescription.java:135) at org.wildfly.extension.management.CoreManagementSubsystemParser_1_0.readElement(CoreManagementSubsystemParser_1_0.java:77) at org.wildfly.extension.management.CoreManagementSubsystemParser_1_0.readElement(CoreManagementSubsystemParser_1_0.java:50) at org.jboss.staxmapper.XMLMapperImpl.processNested(XMLMapperImpl.java:110) at org.jboss.staxmapper.XMLExtendedStreamReaderImpl.handleAny(XMLExtendedStreamReaderImpl.java:69) at org.jboss.as.server.parsing.StandaloneXml_5.parseServerProfile(StandaloneXml_5.java:591) at org.jboss.as.server.parsing.StandaloneXml_5.readServerElement(StandaloneXml_5.java:245) at org.jboss.as.server.parsing.StandaloneXml_5.readElement(StandaloneXml_5.java:144) at org.jboss.as.server.parsing.StandaloneXml.readElement(StandaloneXml.java:107) at org.jboss.as.server.parsing.StandaloneXml.readElement(StandaloneXml.java:49) at org.jboss.staxmapper.XMLMapperImpl.processNested(XMLMapperImpl.java:110) at org.jboss.staxmapper.XMLMapperImpl.parseDocument(XMLMapperImpl.java:69) at org.jboss.as.controller.persistence.XmlConfigurationPersister.load(XmlConfigurationPersister.java:123) ... 3 more
The code in org.jboss.as.controller.AttributeParser#parseElement:197 to parse a list of objects assumes that the object's value are all represented by XML attributes. In my case, that's not correct as the "properties" attribute is represented by XML elements.