XHTML Support

This extension is an XHTML subset for use in exchanging formatted messages.

Follow these links to learn how to compose, send and receive XHTML messages:

JEP related: JEP-71
Compose an XHTML Message

Description

The first step in order to send an XHTML message is to compose it. Smack provides a special class that helps to build valid XHTML messages hiding any low level complexity. For special situations, advanced users may decide not to use the helper class and generate the XHTML by themselves. Even for these situations Smack provides a well defined entry point in order to add the generated XHTML content to a given message.

Usage

Create an instance of XHTMLText specifying the style and language of the body. You can add several XHTML bodies to the message but each body should be for a different language. Once you have an XHTMLText you can start to append tags and text to it. In order to append tags there are several messages that you can use. For each XHTML defined tag there is a message that you can send. In order to add text you can send the message #append(String textToAppend).

After you have configured the XHTML text, the last step you have to do is to add the XHTML text to the message you want to send. If you decided to create the XHTML text by yourself, you will have to follow this last step too. In order to add the XHTML text to the message send the message #addBody(Message message, String body) to the XHTMLManager class where message is the message that will receive the XHTML body and body is the string to add as an XHTML body to the message.

Example

In this example we can see how to compose the following XHTML message:
<body><p style='font-size:large'>Hey John, this is my new <span style='color:green'>green</span><em>!!!!</em></p></body>

      // Create a message to send
      Message msg = chat.createMessage();
      msg.setSubject("Any subject you want");
      msg.setBody("Hey John, this is my new green!!!!");

      // Create an XHTMLText to send with the message
      XHTMLText xhtmlText = new XHTMLText(null, null);
      xhtmlText.appendOpenParagraphTag("font-size:large");
      xhtmlText.append("Hey John, this is my new ");
      xhtmlText.appendOpenSpanTag("color:green");
      xhtmlText.append("green");
      xhtmlText.appendCloseSpanTag();
      xhtmlText.appendOpenEmTag();
      xhtmlText.append("!!!!");
      xhtmlText.appendCloseEmTag();
      xhtmlText.appendCloseParagraphTag();
      
      // Add the XHTML text to the message
      XHTMLManager.addBody(msg, xhtmlText.toString());


Send an XHTML Message

Description

After you have composed an XHTML message you will want to send it. Once you have added the XHTML content to the message you want to send you are almost done. The last step is to send the message as you do with any other message.

Usage

An XHTML message is like any regular message, therefore to send the message you can follow the usual steps you do in order to send a message. For example, to send a message as part of a chat just use the message #send(Message) of Chat or you can use the message #send(Packet) of XMPPConnection.

Example

In this example we can see how to send a message with XHTML content as part of a chat.

      // Create a message to send
      Message msg = chat.createMessage();
      // Obtain the XHTML text to send from somewhere
      String xhtmlBody = getXHTMLTextToSend();

      // Add the XHTML text to the message
      XHTMLManager.addBody(msg, xhtmlBody);

      // Send the message that contains the XHTML
      chat1.sendMessage(msg);

Receive an XHTML Message

Description

It is also possible to obtain the XHTML content from a received message. Remember that the specification defines that a message may contain several XHTML bodies where each body should be for a different language.

Usage

To get the XHTML bodies of a given message just send the message #getBodies(Message) to the class XHTMLManager. The answer of this message will be an Iterator with the different XHTML bodies of the message or null if none.

Example

In this example we can see how to create a PacketListener that obtains the XHTML bodies of any received message.

      // Create a listener for the chat and display any XHTML content
      PacketListener packetListener = new PacketListener() {
          public void processPacket(Packet packet) {
              Message message = (Message) packet;
              // Obtain the XHTML bodies of the message
              Iterator it = XHTMLManager.getBodies(message);
              if (it != null) {
                 // Display the bodies on the console
                 while (it.hasNext()) {
	             String body = (String) it.next();
	             System.out.println(body);
	         }
	      }
            };
      chat.addMessageListener(packetListener);