mirror of
https://codeberg.org/Mercury-IM/Smack
synced 2024-11-25 15:52:06 +01:00
Make Stanza.appendErrorIfExists() aware of the enclosing XML namespace
Originally discovered by Paul Schaub: Fixes an inconvenience, where an IQ with the implicit namespace `jabber:client` would append the namespace to an error child element like this: ``` <iq (xmlns='jabber:client) <!-- in parenthesis since the NS is implicit --> ... > <error xmlns='jabber:client' <!-- this NS is too much --> ... /> </iq> ``
This commit is contained in:
parent
9596ca8943
commit
a3fcbdbf5a
4 changed files with 18 additions and 6 deletions
|
@ -137,7 +137,7 @@ public abstract class IQ extends Stanza {
|
||||||
buf.attribute("type", type.toString());
|
buf.attribute("type", type.toString());
|
||||||
}
|
}
|
||||||
buf.rightAngleBracket();
|
buf.rightAngleBracket();
|
||||||
buf.append(getChildElementXML());
|
buf.append(getChildElementXML(enclosingNamespace));
|
||||||
buf.closeElement(IQ_ELEMENT);
|
buf.closeElement(IQ_ELEMENT);
|
||||||
return buf;
|
return buf;
|
||||||
}
|
}
|
||||||
|
@ -149,10 +149,22 @@ public abstract class IQ extends Stanza {
|
||||||
* @return the child element section of the IQ XML.
|
* @return the child element section of the IQ XML.
|
||||||
*/
|
*/
|
||||||
public final XmlStringBuilder getChildElementXML() {
|
public final XmlStringBuilder getChildElementXML() {
|
||||||
|
return getChildElementXML(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the sub-element XML section of the IQ packet, or the empty String if there
|
||||||
|
* isn't one.
|
||||||
|
*
|
||||||
|
* @param enclosingNamespace the enclosing XML namespace.
|
||||||
|
* @return the child element section of the IQ XML.
|
||||||
|
* @since 4.3.0
|
||||||
|
*/
|
||||||
|
public final XmlStringBuilder getChildElementXML(String enclosingNamespace) {
|
||||||
XmlStringBuilder xml = new XmlStringBuilder();
|
XmlStringBuilder xml = new XmlStringBuilder();
|
||||||
if (type == Type.error) {
|
if (type == Type.error) {
|
||||||
// Add the error sub-packet, if there is one.
|
// Add the error sub-packet, if there is one.
|
||||||
appendErrorIfExists(xml);
|
appendErrorIfExists(xml, enclosingNamespace);
|
||||||
}
|
}
|
||||||
else if (childElementName != null) {
|
else if (childElementName != null) {
|
||||||
// Add the query section if there is one.
|
// Add the query section if there is one.
|
||||||
|
|
|
@ -501,7 +501,7 @@ public final class Message extends Stanza implements TypedCloneable<Message> {
|
||||||
buf.optElement("thread", thread);
|
buf.optElement("thread", thread);
|
||||||
// Append the error subpacket if the message type is an error.
|
// Append the error subpacket if the message type is an error.
|
||||||
if (type == Type.error) {
|
if (type == Type.error) {
|
||||||
appendErrorIfExists(buf);
|
appendErrorIfExists(buf, enclosingNamespace);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add extension elements, if any are defined.
|
// Add extension elements, if any are defined.
|
||||||
|
|
|
@ -292,7 +292,7 @@ public final class Presence extends Stanza implements TypedCloneable<Presence> {
|
||||||
buf.append(getExtensions(), enclosingNamespace);
|
buf.append(getExtensions(), enclosingNamespace);
|
||||||
|
|
||||||
// Add the error sub-packet, if there is one.
|
// Add the error sub-packet, if there is one.
|
||||||
appendErrorIfExists(buf);
|
appendErrorIfExists(buf, enclosingNamespace);
|
||||||
|
|
||||||
buf.closeElement(ELEMENT);
|
buf.closeElement(ELEMENT);
|
||||||
|
|
||||||
|
|
|
@ -541,10 +541,10 @@ public abstract class Stanza implements TopLevelStreamElement {
|
||||||
*
|
*
|
||||||
* @param xml the XmlStringBuilder to append the error to.
|
* @param xml the XmlStringBuilder to append the error to.
|
||||||
*/
|
*/
|
||||||
protected void appendErrorIfExists(XmlStringBuilder xml) {
|
protected void appendErrorIfExists(XmlStringBuilder xml, String enclosingNamespace) {
|
||||||
StanzaError error = getError();
|
StanzaError error = getError();
|
||||||
if (error != null) {
|
if (error != null) {
|
||||||
xml.append(error.toXML());
|
xml.append(error.toXML(enclosingNamespace));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue