Beispiel #1
0
  void parseServerGroups(
      final XMLExtendedStreamReader reader,
      final ModelNode address,
      final Namespace expectedNs,
      final List<ModelNode> list)
      throws XMLStreamException {
    requireNoAttributes(reader);

    final Set<String> names = new HashSet<String>();

    while (reader.nextTag() != END_ELEMENT) {
      requireNamespace(reader, expectedNs);
      Element serverGroup = Element.forName(reader.getLocalName());
      if (Element.SERVER_GROUP != serverGroup) {
        throw unexpectedElement(reader);
      }

      String name = null;
      String profile = null;
      Boolean managementSubsystemEndpoint = null;

      // Handle attributes
      final int count = reader.getAttributeCount();
      for (int i = 0; i < count; i++) {

        final String value = reader.getAttributeValue(i);
        if (!isNoNamespaceAttribute(reader, i)) {
          throw ParseUtils.unexpectedAttribute(reader, i);
        } else {
          final Attribute attribute = Attribute.forName(reader.getAttributeLocalName(i));
          switch (attribute) {
            case NAME:
              {
                if (name != null) {
                  throw ParseUtils.duplicateAttribute(reader, attribute.getLocalName());
                }
                if (!names.add(value)) {
                  throw ParseUtils.duplicateNamedElement(reader, value);
                }
                name = value;
                break;
              }
            case PROFILE:
              {
                if (profile != null) {
                  throw ParseUtils.duplicateAttribute(reader, attribute.getLocalName());
                }
                profile = value;
                break;
              }
            case MANAGEMENT_SUBSYSTEM_ENDPOINT:
              {
                if (managementSubsystemEndpoint != null) {
                  throw ParseUtils.duplicateAttribute(reader, attribute.getLocalName());
                }
                managementSubsystemEndpoint = Boolean.valueOf(value);
                break;
              }
            default:
              throw ParseUtils.unexpectedAttribute(reader, i);
          }
        }
      }
      if (name == null) {
        throw missingRequired(reader, Collections.singleton(Attribute.NAME));
      }
      if (profile == null) {
        throw missingRequired(reader, Collections.singleton(Attribute.PROFILE));
      }

      final ModelNode groupAddress = new ModelNode().set(address);
      groupAddress.add(ModelDescriptionConstants.SERVER_GROUP, name);

      final ModelNode group = new ModelNode();
      group.get(OP).set(ADD);
      group.get(OP_ADDR).set(groupAddress);
      group.get(PROFILE).set(profile);
      if (managementSubsystemEndpoint != null) {
        group.get(MANAGEMENT_SUBSYSTEM_ENDPOINT).set(managementSubsystemEndpoint);
      }
      list.add(group);

      // Handle elements

      boolean sawDeployments = false;
      while (reader.hasNext() && reader.nextTag() != END_ELEMENT) {
        requireNamespace(reader, expectedNs);
        final Element element = Element.forName(reader.getLocalName());
        switch (element) {
          case JVM:
            {
              JvmXml.parseJvm(reader, groupAddress, expectedNs, list, new HashSet<String>());
              break;
            }
          case SOCKET_BINDING_GROUP:
            {
              parseSocketBindingGroupRef(reader, groupAddress, list);
              break;
            }
          case DEPLOYMENTS:
            {
              if (sawDeployments) {
                throw MESSAGES.alreadyDefined(element.getLocalName(), reader.getLocation());
              }
              sawDeployments = true;
              parseDeployments(
                  reader,
                  groupAddress,
                  expectedNs,
                  list,
                  EnumSet.of(Attribute.NAME, Attribute.RUNTIME_NAME, Attribute.ENABLED),
                  Collections.<Element>emptySet());
              break;
            }
          case SYSTEM_PROPERTIES:
            {
              parseSystemProperties(reader, groupAddress, expectedNs, list, false);
              break;
            }
          default:
            throw ParseUtils.unexpectedElement(reader);
        }
      }
    }
  }