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

    if (!namespace.equals("")) {
      String prefix = xmlWriter.getPrefix(namespace);

      if (prefix == null) {
        prefix = RigStateType.generatePrefix(namespace);
        xmlWriter.writeStartElement(prefix, localName, namespace);
        xmlWriter.writeNamespace(prefix, namespace);
        xmlWriter.setPrefix(prefix, namespace);
      } else {
        xmlWriter.writeStartElement(namespace, localName);
      }
    } else {
      xmlWriter.writeStartElement(localName);
    }

    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 + ":RigStateType",
            xmlWriter);
      } else {
        this.writeAttribute(
            "xsi", "http://www.w3.org/2001/XMLSchema-instance", "type", "RigStateType", xmlWriter);
      }
    }

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

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

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

    return prefix;
  }