diff --git a/smack-core/src/main/java/org/jivesoftware/smack/packet/Packet.java b/smack-core/src/main/java/org/jivesoftware/smack/packet/Packet.java
index 04676d078..0bc1c2194 100644
--- a/smack-core/src/main/java/org/jivesoftware/smack/packet/Packet.java
+++ b/smack-core/src/main/java/org/jivesoftware/smack/packet/Packet.java
@@ -36,6 +36,9 @@ import java.util.concurrent.atomic.AtomicLong;
*/
public abstract class Packet {
+ public static final String TEXT = "text";
+ public static final String ITEM = "item";
+
protected static final String DEFAULT_LANGUAGE =
java.util.Locale.getDefault().getLanguage().toLowerCase(Locale.US);
diff --git a/smack-core/src/main/java/org/jivesoftware/smack/packet/RosterPacket.java b/smack-core/src/main/java/org/jivesoftware/smack/packet/RosterPacket.java
index 4822d1ad0..cddff51ad 100644
--- a/smack-core/src/main/java/org/jivesoftware/smack/packet/RosterPacket.java
+++ b/smack-core/src/main/java/org/jivesoftware/smack/packet/RosterPacket.java
@@ -17,10 +17,14 @@
package org.jivesoftware.smack.packet;
-import org.jivesoftware.smack.util.StringUtils;
import org.jivesoftware.smack.util.XmlStringBuilder;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import java.util.Locale;
+import java.util.Set;
import java.util.concurrent.CopyOnWriteArraySet;
/**
@@ -66,7 +70,8 @@ public class RosterPacket extends IQ {
}
}
- public CharSequence getChildElementXML() {
+ @Override
+ public XmlStringBuilder getChildElementXML() {
XmlStringBuilder buf = new XmlStringBuilder();
buf.halfOpenElement("query");
buf.xmlnsAttribute("jabber:iq:roster");
@@ -96,6 +101,8 @@ public class RosterPacket extends IQ {
*/
public static class Item {
+ public static final String GROUP = "group";
+
private String user;
private String name;
private ItemType itemType;
@@ -207,24 +214,19 @@ public class RosterPacket extends IQ {
groupNames.remove(groupName);
}
- public String toXML() {
- StringBuilder buf = new StringBuilder();
- buf.append("- ");
+ public XmlStringBuilder toXML() {
+ XmlStringBuilder xml = new XmlStringBuilder();
+ xml.halfOpenElement(Packet.ITEM).attribute("jid", user);
+ xml.optAttribute("name", name);
+ xml.optAttribute("subscription", itemType);
+ xml.optAttribute("ask", itemStatus);
+ xml.rightAngelBracket();
+
for (String groupName : groupNames) {
- buf.append("").append(StringUtils.escapeForXML(groupName)).append("");
+ xml.openElement(GROUP).escape(groupName).closeElement(GROUP);
}
- buf.append("
");
- return buf.toString();
+ xml.closeElement(Packet.ITEM);
+ return xml;
}
@Override
diff --git a/smack-core/src/main/java/org/jivesoftware/smack/packet/XMPPError.java b/smack-core/src/main/java/org/jivesoftware/smack/packet/XMPPError.java
index a11c98d32..b4fefd171 100644
--- a/smack-core/src/main/java/org/jivesoftware/smack/packet/XMPPError.java
+++ b/smack-core/src/main/java/org/jivesoftware/smack/packet/XMPPError.java
@@ -23,6 +23,8 @@ import java.util.List;
import java.util.Locale;
import java.util.Map;
+import org.jivesoftware.smack.util.XmlStringBuilder;
+
/**
* Represents a XMPP error sub-packet. Typically, a server responds to a request that has
* problems by sending the packet back and including an error packet. Each error has a type,
@@ -60,6 +62,9 @@ import java.util.Map;
*/
public class XMPPError {
+ public static final String NAMESPACE = "urn:ietf:params:xml:ns:xmpp-stanzas";
+ public static final String ERROR = "error";
+
private final Type type;
private final String condition;
private String message;
@@ -153,29 +158,30 @@ public class XMPPError {
*
* @return the error as XML.
*/
- public CharSequence toXML() {
- StringBuilder buf = new StringBuilder();
- buf.append("");
+ public XmlStringBuilder toXML() {
+ XmlStringBuilder xml = new XmlStringBuilder();
+ xml.halfOpenElement(ERROR);
+ xml.optAttribute("type", type.name().toLowerCase(Locale.US));
+ xml.rightAngelBracket();
+
if (condition != null) {
- buf.append("<").append(condition);
- buf.append(" xmlns=\"urn:ietf:params:xml:ns:xmpp-stanzas\"/>");
+ xml.halfOpenElement(condition);
+ xml.xmlnsAttribute(NAMESPACE);
+ xml.closeEmptyElement();
}
if (message != null) {
- buf.append("");
- buf.append(message);
- buf.append("");
+ xml.halfOpenElement(Packet.TEXT);
+ xml.xmllangAttribute("en");
+ xml.xmlnsAttribute(NAMESPACE);
+ xml.rightAngelBracket();
+ xml.escape(message);
+ xml.closeElement(Packet.TEXT);
}
for (PacketExtension element : this.getExtensions()) {
- buf.append(element.toXML());
+ xml.append(element.toXML());
}
- buf.append("");
- return buf.toString();
+ xml.closeElement(ERROR);
+ return xml;
}
public String toString() {
diff --git a/smack-core/src/main/java/org/jivesoftware/smack/util/PacketParserUtils.java b/smack-core/src/main/java/org/jivesoftware/smack/util/PacketParserUtils.java
index 64125e00b..cd2926585 100644
--- a/smack-core/src/main/java/org/jivesoftware/smack/util/PacketParserUtils.java
+++ b/smack-core/src/main/java/org/jivesoftware/smack/util/PacketParserUtils.java
@@ -779,7 +779,7 @@ public class PacketParserUtils {
String namespace = parser.getNamespace();
if (StreamError.NAMESPACE.equals(namespace)) {
String name = parser.getName();
- if (name.equals("text") && !parser.isEmptyElementTag()) {
+ if (name.equals(Packet.TEXT) && !parser.isEmptyElementTag()) {
parser.next();
text = parser.getText();
}
@@ -822,7 +822,7 @@ public class PacketParserUtils {
while (!done) {
int eventType = parser.next();
if (eventType == XmlPullParser.START_TAG) {
- if (parser.getName().equals("text")) {
+ if (parser.getName().equals(Packet.TEXT)) {
message = parser.nextText();
}
else {