@Test
  public void addMessageLinkTest() {
    grou = new Grounding(topo);
    // test case
    // input: a messageLink will be added, it's portType will contains a new namespace.
    // expected: 1) the namespace is collected in the namespaceMap
    //           2) the messageLink is added to grounding
    //           3) if new prefix is created, the qName(portType) in the messageLink should be
    // updated.
    org.bpel4chor.model.topology.impl.MessageLink tMsgLink =
        new org.bpel4chor.model.topology.impl.MessageLink();
    tMsgLink.setName("eTicket");

    String ns = "www.wsdl.com";
    String localpart = "input";
    String prefix = "wsdl";
    QName portType = new QName(ns, localpart, prefix);

    MessageLink ml = new MessageLink(tMsgLink, portType, "sendTicket");

    // 1)
    String expectedString = ns;
    int expectedSize = grou.getNamespaceMap().size() + 1;
    grou.add(ml);
    String actualString = grou.getNamespaceMap().get(prefix);
    Assert.assertEquals(expectedString, actualString);

    // 2
    int actualSize = grou.getNamespaceMap().size();
    Assert.assertEquals(expectedSize, actualSize);

    // 3
    org.bpel4chor.model.topology.impl.MessageLink tMsgLink2 =
        new org.bpel4chor.model.topology.impl.MessageLink();
    tMsgLink2.setName("eTicket2");

    QName portType2 = new QName("http://www.example.com/receive", "localpart", "wsdl");
    MessageLink ml2 = new MessageLink(tMsgLink2, portType2, "receiveTicket");
    grou.add(ml2);
    String oldPrefix = "wsdl";
    String newPrefix = ml2.getPortType().getPrefix();
    Assert.assertFalse(newPrefix.equals(oldPrefix));
  }
  /**
   * Read the MessageLink from the given {@link XMLStreamReader}
   *
   * @param r The {@link XMLStreamReader}
   * @param nsMap The {@link INamespaceMap} holding all data
   * @return The {@link MessageLink}
   * @throws MalformedTLGLSyntaxException
   */
  private static MessageLink readInMessageLinkTL(
      XMLStreamReader r, INamespaceMap<String, String> nsMap) throws MalformedTLGLSyntaxException {
    MessageLink messageLink = new MessageLink();

    Object temp = BPEL4ChorReader.getStrAttribute(r, "name", false);
    if (temp != null) {
      messageLink.setName(temp.toString());
    }
    temp = null;
    temp = BPEL4ChorReader.getStrAttribute(r, "sender", false);
    if (temp != null) {
      messageLink.setSender(temp.toString());
    }

    List<String> tempList = BPEL4ChorReader.getStrsAttribute(r, "senders", false);
    if (tempList != null) {
      messageLink.setSenders(tempList);
    }
    temp = null;
    temp = BPEL4ChorReader.getStrAttribute(r, "sendActivity", false);
    if (temp != null) {
      messageLink.setSendActivity(temp.toString());
    }

    messageLink.setReceiver(BPEL4ChorReader.getStrAttribute(r, "receiver", true).toString());
    temp = null;
    temp = BPEL4ChorReader.getStrAttribute(r, "receiveActivity", false);
    if (temp != null) {
      messageLink.setReceiveActivity(temp.toString());
    }
    temp = null;
    temp = BPEL4ChorReader.getStrAttribute(r, "bindSenderTo", false);
    if (temp != null) {
      messageLink.setBindSenderTo(temp.toString());
    }

    messageLink.setMessageName(BPEL4ChorReader.getStrAttribute(r, "messageName", true).toString());

    tempList = BPEL4ChorReader.getStrsAttribute(r, "participantRefs", false);
    if (tempList != null) {
      messageLink.setParticipantRefs(tempList);
    }

    tempList = BPEL4ChorReader.getStrsAttribute(r, "copyParticipantRefsTo", false);
    if (tempList != null) {
      messageLink.setCopyParticipantRefsTo(tempList);
    }
    return messageLink;
  }