public Token extractTokenContent(ChoiceNetMessageField token) {
   ChoiceNetMessageField[] payload = (ChoiceNetMessageField[]) token.getValue();
   int tokenID = (Integer) payload[0].getValue();
   String issuedTo = (String) payload[1].getValue();
   String issuedBy = (String) payload[2].getValue();
   String serviceName = (String) payload[3].getValue();
   long expirationTime = (Long) payload[4].getValue();
   Token myToken = new Token(tokenID, issuedTo, issuedBy, serviceName, expirationTime);
   return myToken;
 }
  private Element createChoiceNetMessageFieldXML(Document doc, ChoiceNetMessageField pkt) {
    Element field = doc.createElement("field");
    field.setAttribute("attributeName", pkt.getAttributeName());
    field.setAttribute("url", pkt.getUrl());
    Element value = doc.createElement("value");

    if (pkt.getValue().getClass().equals(ChoiceNetMessageField[].class)) {
      value = createChoiceNetMessageFieldsXML(doc, (ChoiceNetMessageField[]) pkt.getValue(), value);
    } else {
      String myValue = "UNKNOWN";
      boolean containsCDATA = false;
      if (pkt.getValue().getClass().equals(String.class)) {
        myValue = (String) pkt.getValue();
        if (myValue.contains("CDATA")) {
          myValue = myValue.replace("<![CDATA[", "");
          myValue = myValue.replace("]]>", "");
          containsCDATA = true;
        }
      }
      if (pkt.getValue().getClass().equals(Integer.class)) {
        int temp = (Integer) pkt.getValue();
        myValue = Integer.toString(temp);
      }
      if (pkt.getValue().getClass().equals(Long.class)) {
        long temp = (Long) pkt.getValue();
        myValue = Long.toString(temp);
      }

      if (containsCDATA) {
        value.appendChild(doc.createCDATASection(myValue));
      } else {
        value.appendChild(doc.createTextNode(myValue));
      }
    }
    field.appendChild(value);

    return field;
  }