javaandroid-studioxmppsmack

How to create Empty IQ Packet using Smack 4


I am develloping call signals using Smack 4. I want to send an IQ-result which have the format below using Smack 4 and Java:

<iq from="sister@realworld.lit/home"
id="v73hwcx9"
to="alice@wonderland.lit/rabbithole"
type="result"/>

This is what I did and did not work

public class AcknowledgeIQ extends IQ {

    public AcknowledgeIQ() {
        super("");
        setType(Type.result);
    }

    @Override
    public IQChildElementXmlStringBuilder getIQChildElementBuilder(IQChildElementXmlStringBuilder xml) {
        return null;
    }

    public String toXml(){
        return super.toXML(null).toString();
    }
}

Solution

  • I have tested below code on the SMACK 4.3.4.

    public class AcknowledgeIQ extends org.jivesoftware.smack.packet.IQ {
    
        public AcknowledgeIQ() {
            super(null, null);
        }
    
        @Override
        public IQChildElementXmlStringBuilder getIQChildElementBuilder(IQChildElementXmlStringBuilder xml) {
            xml.rightAngleBracket();
            return xml;
        }
    }
    

    Usage example :

    AcknowledgeIQ ackIQ = new AcknowledgeIQ();
    ackIQ.setType(org.jivesoftware.smack.packet.IQ.Type.result);
    Log.d(TAG, "AcknowledgeIQ = "+ackIQ.toXML(null).toString());
    

    Logcat output :

    AcknowledgeIQ = <iq xmlns='jabber:client' to='alice@wonderland.lit/rabbithole' id='MGr5o-5' type='result'></iq>