Class IQ

java.lang.Object
org.jivesoftware.smack.packet.Stanza
org.jivesoftware.smack.packet.IQ
All Implemented Interfaces:
Element, IqView, NamedElement, StanzaView, TopLevelStreamElement, XmlElement, XmlLangElement
Direct Known Subclasses:
AbstractHttpOverXmpp, AdHocCommandData, AgentChatHistory, AgentInfo, AgentStatusRequest, AgentWorkgroups, Bind, BlockContactsIQ, BlockListIQ, BoBIQ, Bytestream, ChatMetadata, ChatNotes, ChatSettings, Close, Data, DepartQueuePacket, DisablePushNotificationsIQ, DiscoverInfo, DiscoverItems, DnsIq, EmptyResultIQ, EnablePushNotificationsIQ, ErrorIQ, GenericSettings, IoTClaimed, IoTDataReadOutAccepted, IoTDataRequest, IoTDisown, IoTDisowned, IoTIsFriend, IoTIsFriendResponse, IoTMine, IoTRegister, IoTRemove, IoTRemoved, IoTSetRequest, IoTSetResponse, IoTUnregister, JidPrepIq, Jingle, Jingle, LastActivity, Macros, MamFinIQ, MamPrefsIQ, MamQueryIQ, MonitorPacket, MUCAdmin, MUCLightAffiliationsIQ, MUCLightBlockingIQ, MUCLightChangeAffiliationsIQ, MUCLightConfigurationIQ, MUCLightCreateIQ, MUCLightDestroyIQ, MUCLightGetAffiliationsIQ, MUCLightGetConfigsIQ, MUCLightGetInfoIQ, MUCLightInfoIQ, MUCLightSetConfigsIQ, MUCOwner, OccupantsInfo, OfferRequestProvider.OfferRequestPacket, OfferRevokeProvider.OfferRevokePacket, OfflineMessageRequest, Open, Privacy, PrivateDataIQ, PubSub, Registration, RoomInvitation.RoomInvitationIQ, RoomTransfer.RoomTransferIQ, RosterPacket, RTPBridge, SharedGroupsInfo, SimpleIQ, Slot, SlotRequest, StreamInitiation, Time, Transcript, Transcripts, UnblockContactsIQ, UnparsedIQ, VCard, Version, WorkgroupProperties

public abstract class IQ extends Stanza implements IqView
The base IQ (Info/Query) packet. IQ packets are used to get and set information on the server, including authentication, roster operations, and creating accounts. Each IQ stanza has a specific type that indicates what type of action is being taken: "get", "set", "result", or "error".

IQ packets can contain a single child element that exists in a specific XML namespace. The combination of the element name and namespace determines what type of IQ stanza it is. Some example IQ subpacket snippets:

  • <query xmlns="jabber:iq:auth"> -- an authentication IQ.
  • <query xmlns="jabber:iq:private"> -- a private storage IQ.
  • <pubsub xmlns="http://jabber.org/protocol/pubsub"> -- a pubsub IQ.
  • Field Details

  • Constructor Details

  • Method Details

    • getType

      public final IQ.Type getType()
      Description copied from interface: IqView
      Returns the type of the IQ packet.
      Specified by:
      getType in interface IqView
      Returns:
      the type of the IQ packet.
    • setType

      public void setType(IQ.Type type)
      Sets the type of the IQ packet.

      Since the type of an IQ must present, an IllegalArgumentException will be thrown when type is null.

      Parameters:
      type - the type of the IQ packet.
    • getChildElementQName

      public final QName getChildElementQName()
    • getChildElementName

      public final String getChildElementName()
    • getChildElementNamespace

    • getElementName

      public final String getElementName()
      Description copied from interface: NamedElement
      Returns the root element name.
      Specified by:
      getElementName in interface NamedElement
      Returns:
      the element name.
    • toString

      public final String toString()
      Description copied from class: Stanza
      Returns a short String describing the Stanza. This method is suited for log purposes.
      Specified by:
      toString in class Stanza
    • toXML

      public final XmlStringBuilder toXML(XmlEnvironment enclosingXmlEnvironment)
      Specified by:
      toXML in interface Element
    • getChildElementXML

      Returns the sub-element XML section of the IQ packet, or the empty String if there isn't one.
      Returns:
      the child element section of the IQ XML.
    • getIQChildElementBuilder

      This method must be overwritten by IQ subclasses to create their child content. It is important you don't use the builder to add the final end tag. This will be done automatically by IQ.IQChildElementXmlStringBuilder after eventual existing ExtensionElements have been added.

      For example to create an IQ with a extra attribute and an additional child element

       
       <iq to='foo@example.org' id='123'>
         <bar xmlns='example:bar' extraAttribute='blaz'>
            <extraElement>elementText</extraElement>
         </bar>
       </iq>
       
       
      the body of the getIQChildElementBuilder looks like
       
       // The builder 'xml' will already have the child element and the 'xmlns' attribute added
       // So the current builder state is "<bar xmlns='example:bar'"
       xml.attribute("extraAttribute", "blaz");
       xml.rightAngleBracket();
       xml.element("extraElement", "elementText");
       // Do not close the 'bar' attribute by calling xml.closeElement('bar')
       
       
      If your IQ only contains attributes and no child elements, i.e. it can be represented as empty element, then you can mark it as such.
       xml.attribute("myAttribute", "myAttributeValue");
       xml.setEmptyElement();
       
      If your IQ does not contain any attributes or child elements (besides ExtensionElements), consider sub-classing SimpleIQ instead.
      Parameters:
      xml - a pre-created builder which already has the child element and the 'xmlns' attribute set.
      Returns:
      the build to create the IQ child content.
    • createResultIQ

      public static IQ createResultIQ(IQ request)
      Convenience method to create a new empty IQ.Type.result IQ based on a IQ.Type.get or IQ.Type.set IQ. The new stanza will be initialized with:
      • The sender set to the recipient of the originating IQ.
      • The recipient set to the sender of the originating IQ.
      • The type set to IQ.Type.result.
      • The id set to the id of the originating IQ.
      • No child element of the IQ element.
      Parameters:
      request - the IQ.Type.get or IQ.Type.set IQ packet.
      Returns:
      a new IQ.Type.result IQ based on the originating IQ.
      Throws:
      IllegalArgumentException - if the IQ stanza does not have a type of IQ.Type.get or IQ.Type.set.
    • createErrorResponse

      public static ErrorIQ createErrorResponse(IQ request, StanzaError error)
      Convenience method to create a new IQ.Type.error IQ based on a IQ.Type.get or IQ.Type.set IQ. The new stanza will be initialized with:
      • The sender set to the recipient of the originating IQ.
      • The recipient set to the sender of the originating IQ.
      • The type set to IQ.Type.error.
      • The id set to the id of the originating IQ.
      • The child element contained in the associated originating IQ.
      • The provided XMPPError.
      Parameters:
      request - the IQ.Type.get or IQ.Type.set IQ packet.
      error - the error to associate with the created IQ packet.
      Returns:
      a new IQ.Type.error IQ based on the originating IQ.
      Throws:
      IllegalArgumentException - if the IQ stanza does not have a type of IQ.Type.get or IQ.Type.set.
    • createErrorResponse

      public static ErrorIQ createErrorResponse(IQ request, StanzaError.Condition condition)