Uploaded image for project: 'WildFly Core'
  1. WildFly Core
  2. WFCORE-1824

Can not parse object list attributes that contains a complex attribute

    XMLWordPrintable

Details

    • Bug
    • Resolution: Done
    • Major
    • 3.0.0.Alpha9
    • 3.0.0.Alpha8
    • Management
    • 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.

      Attachments

        Activity

          People

            tomazcerar Tomaž Cerar (Inactive)
            jmesnil1@redhat.com Jeff Mesnil
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: