Class IqProvider<I extends IQ>

java.lang.Object
org.jivesoftware.smack.provider.AbstractProvider<I>
org.jivesoftware.smack.provider.IqProvider<I>
Type Parameters:
I - the IQ that is parsed by implementations.
Direct Known Subclasses:
AbstractHttpOverXmppProvider, AdHocCommandDataProvider, AgentChatHistory.InternalProvider, AgentInfo.Provider, AgentStatusRequest.Provider, AgentWorkgroups.Provider, BindIQProvider, BlockContactsIQProvider, BlockListIQProvider, BoBIQProvider, BytestreamsProvider, ChatMetadata.Provider, ChatNotes.Provider, ChatSettings.InternalProvider, ClearCacheProvider, ClearCacheResponseProvider, CloseIQProvider, DataPacketProvider.IQProvider, DiscoverInfoProvider, DiscoverItemsProvider, DnsIqProvider, GenericSettings.InternalProvider, IntrospectionProvider.IQIntrospectionProvider, IoTClaimedProvider, IoTDataReadOutAcceptedProvider, IoTDataRequestProvider, IoTDisownedProvider, IoTDisownProvider, IoTIsFriendProvider, IoTIsFriendResponseProvider, IoTRegisterProvider, IoTRemovedProvider, IoTRemoveProvider, IoTSetRequestProvider, IoTSetResponseProvider, IoTUnregisterProvider, JidPrepIqProvider, JingleProvider, JingleProvider, LastActivity.Provider, LegacyIQProvider, Macros.InternalProvider, MamFinIQProvider, MamPrefsIQProvider, MamQueryIQProvider, MonitorPacket.InternalProvider, MUCAdminProvider, MUCLightAffiliationsIQProvider, MUCLightBlockingIQProvider, MUCLightConfigurationIQProvider, MUCLightInfoIQProvider, MUCOwnerProvider, OccupantsInfo.Provider, OfferConfirmation.Provider, OfferRequestProvider, OfferRevokeProvider, OfflineMessageRequest.Provider, OfflineSettings.InternalProvider, OpenIQProvider, PingProvider, PrivacyProvider, PrivateDataManager.PrivateDataIQProvider, PubSubProvider, RegistrationProvider, RosterPacketProvider, RTPBridge.Provider, SearchSettings.InternalProvider, SharedGroupsInfo.Provider, SlotProvider, SoundSettings.InternalProvider, StreamInitiationProvider, STUN.Provider, TimeProvider, TranscriptProvider, TranscriptSearch.Provider, TranscriptsProvider, UnblockContactsIQProvider, UserSearch.Provider, VCardProvider, VersionProvider, WorkgroupForm.InternalProvider, WorkgroupProperties.InternalProvider

public abstract class IqProvider<I extends IQ> extends AbstractProvider<I>
An abstract class for parsing custom IQ packets. Each IqProvider must be registered with the ProviderManager for it to be used. Every implementation of this abstract class must have a public, no-argument constructor.

Custom IQ Provider Example

Let us assume you want to write a provider for a new, unsupported IQ in Smack.


 <iq type='set' from='juliet@capulet.example/balcony' to='romeo@montage.example'>
   <myiq xmlns='example:iq:foo' token='secret'>
     <user age='42'>John Doe</user>
     <location>New York</location>
   </myiq>
 </iq>
 
The custom IQ provider may look like the follows

 public class MyIQProvider extends IQProvider<MyIQ> {

   {@literal @}Override
   public MyIQ parse(XmlPullParser parser, int initialDepth) throws XmlPullParserException, IOException {
     // Define the data we are trying to collect with sane defaults
     int age = -1;
     String user = null;
     String location = null;

     // Start parsing loop
     outerloop: while(true) {
       XmlPullParser.Event eventType = parser.next();
       switch(eventType) {
       case START_ELEMENT:
         String elementName = parser.getName();
         switch (elementName) {
         case "user":
           age = ParserUtils.getIntegerAttribute(parser, "age");
           user = parser.nextText();
           break;
         case "location"
           location = parser.nextText();
           break;
         }
         break;
       case END_ELEMENT:
         // Abort condition: if the are on a end tag (closing element) of the same depth
         if (parser.getDepth() == initialDepth) {
           break outerloop;
         }
         break;
       default:
         // Catch all for incomplete switch (MissingCasesInEnumSwitch) statement.
         break;
       }
     }

     // Construct the IQ instance at the end of parsing, when all data has been collected
     return new MyIQ(user, age, location);
   }
 }