@Override
  public void readElement(XMLExtendedStreamReader reader, List<ModelNode> list)
      throws XMLStreamException {

    final ModelNode address = new ModelNode();
    address.add(SUBSYSTEM, RemotingExtension.SUBSYSTEM_NAME);
    address.protect();
    final ModelNode subsystem = Util.getEmptyOperation(ADD, address);
    list.add(subsystem);

    requireNoAttributes(reader);

    // Handle elements
    while (reader.hasNext() && reader.nextTag() != END_ELEMENT) {
      boolean doneWorkerThreadPool = false;
      final Element element = Element.forName(reader.getLocalName());
      switch (element) {
        case WORKER_THREAD_POOL:
          if (doneWorkerThreadPool) {
            throw duplicateNamedElement(reader, Element.WORKER_THREAD_POOL.getLocalName());
          }
          doneWorkerThreadPool = true;
          parseWorkerThreadPool(reader, subsystem);
          break;
        case CONNECTOR:
          {
            // Add connector updates
            parseConnector(reader, address, list);
            break;
          }
        case OUTBOUND_CONNECTIONS:
          {
            // parse the outbound-connections
            this.parseOutboundConnections(reader, address, list);
            break;
          }
        default:
          {
            throw unexpectedElement(reader);
          }
      }
    }
  }
  private void writeWorkerThreadPoolIfAttributesSet(
      final XMLExtendedStreamWriter writer, final ModelNode node) throws XMLStreamException {
    if (node.hasDefined(CommonAttributes.WORKER_READ_THREADS)
        || node.hasDefined(CommonAttributes.WORKER_TASK_CORE_THREADS)
        || node.hasDefined(CommonAttributes.WORKER_TASK_KEEPALIVE)
        || node.hasDefined(CommonAttributes.WORKER_TASK_LIMIT)
        || node.hasDefined(CommonAttributes.WORKER_TASK_MAX_THREADS)
        || node.hasDefined(CommonAttributes.WORKER_WRITE_THREADS)) {

      writer.writeStartElement(Element.WORKER_THREAD_POOL.getLocalName());

      RemotingSubsystemRootResource.WORKER_READ_THREADS.marshallAsAttribute(node, false, writer);
      RemotingSubsystemRootResource.WORKER_TASK_CORE_THREADS.marshallAsAttribute(
          node, false, writer);
      RemotingSubsystemRootResource.WORKER_TASK_KEEPALIVE.marshallAsAttribute(node, false, writer);
      RemotingSubsystemRootResource.WORKER_TASK_LIMIT.marshallAsAttribute(node, false, writer);
      RemotingSubsystemRootResource.WORKER_TASK_MAX_THREADS.marshallAsAttribute(
          node, false, writer);
      RemotingSubsystemRootResource.WORKER_WRITE_THREADS.marshallAsAttribute(node, false, writer);

      writer.writeEndElement();
    }
  }