private String registerPrefix(final XMLStreamWriter xmlWriter, final String namespace)
      throws XMLStreamException {
    String prefix = xmlWriter.getPrefix(namespace);
    if (prefix == null) {
      prefix = OperationRequestType.generatePrefix(namespace);
      while (xmlWriter.getNamespaceContext().getNamespaceURI(prefix) != null) {
        prefix = BeanUtil.getUniquePrefix();
      }

      xmlWriter.writeNamespace(prefix, namespace);
      xmlWriter.setPrefix(prefix, namespace);
    }

    return prefix;
  }
  @Override
  public void serialize(
      final QName parentQName,
      final OMFactory factory,
      final MTOMAwareXMLStreamWriter xmlWriter,
      final boolean serializeType)
      throws XMLStreamException, ADBException {
    String prefix = parentQName.getPrefix();
    String namespace = parentQName.getNamespaceURI();

    if ((namespace != null) && (namespace.trim().length() > 0)) {
      final String writerPrefix = xmlWriter.getPrefix(namespace);
      if (writerPrefix != null) {
        xmlWriter.writeStartElement(namespace, parentQName.getLocalPart());
      } else {
        if (prefix == null) {
          prefix = OperationRequestType.generatePrefix(namespace);
        }

        xmlWriter.writeStartElement(prefix, parentQName.getLocalPart(), namespace);
        xmlWriter.writeNamespace(prefix, namespace);
        xmlWriter.setPrefix(prefix, namespace);
      }
    } else {
      xmlWriter.writeStartElement(parentQName.getLocalPart());
    }

    if (serializeType) {
      final String namespacePrefix =
          this.registerPrefix(xmlWriter, "http://remotelabs.eng.uts.edu.au/rigmanagement");
      if ((namespacePrefix != null) && (namespacePrefix.trim().length() > 0)) {
        this.writeAttribute(
            "xsi",
            "http://www.w3.org/2001/XMLSchema-instance",
            "type",
            namespacePrefix + ":OperationRequestType",
            xmlWriter);
      } else {
        this.writeAttribute(
            "xsi",
            "http://www.w3.org/2001/XMLSchema-instance",
            "type",
            "OperationRequestType",
            xmlWriter);
      }
    }

    if (this.requestorIDTracker) {
      namespace = "";
      if (!namespace.equals("")) {
        prefix = xmlWriter.getPrefix(namespace);
        if (prefix == null) {
          prefix = OperationRequestType.generatePrefix(namespace);
          xmlWriter.writeStartElement(prefix, "requestorID", namespace);
          xmlWriter.writeNamespace(prefix, namespace);
          xmlWriter.setPrefix(prefix, namespace);
        } else {
          xmlWriter.writeStartElement(namespace, "requestorID");
        }
      } else {
        xmlWriter.writeStartElement("requestorID");
      }

      if (this.requestorID == Integer.MIN_VALUE) {
        throw new ADBException("requestorID cannot be null!!");
      } else {
        xmlWriter.writeCharacters(ConverterUtil.convertToString(this.requestorID));
      }
      xmlWriter.writeEndElement();
    }

    if (this.requestorNSNameSequenceTracker) {
      if (this.requestorNSNameSequence == null) {
        throw new ADBException("OperationRequestTypeSequence_type0 cannot be null!!");
      }
      this.requestorNSNameSequence.serialize(null, factory, xmlWriter);
    }

    if (this.requestorQNameTracker) {
      namespace = "";
      if (!namespace.equals("")) {
        prefix = xmlWriter.getPrefix(namespace);
        if (prefix == null) {
          prefix = OperationRequestType.generatePrefix(namespace);
          xmlWriter.writeStartElement(prefix, "requestorQName", namespace);
          xmlWriter.writeNamespace(prefix, namespace);
          xmlWriter.setPrefix(prefix, namespace);
        } else {
          xmlWriter.writeStartElement(namespace, "requestorQName");
        }
      } else {
        xmlWriter.writeStartElement("requestorQName");
      }

      if (this.requestorQName == null) {
        throw new ADBException("requestorQName cannot be null!!");
      } else {
        xmlWriter.writeCharacters(this.requestorQName);
      }
      xmlWriter.writeEndElement();
    }

    xmlWriter.writeEndElement();
  }