Class EmbeddedExtensionProvider<PE extends XmlElement>

  • Direct Known Subclasses:
    AffiliationsProvider, ConfigEventProvider, DeliveryReceipt.Provider, EventProvider, FormNodeProvider, HeadersProvider, ItemsProvider, RetractEventProvider, SimpleNodeProvider, SubscriptionsProvider

    public abstract class EmbeddedExtensionProvider<PE extends XmlElement>
    extends ExtensionElementProvider<PE>
    This class simplifies parsing of embedded elements by using the Template Method Pattern. After extracting the current element attributes and content of any child elements, the template method (createReturnExtension(String, String, Map, List) is called. Subclasses then override this method to create the specific return type.

    To use this class, you simply register your subclasses as extension providers in the smack.properties file. Then they will be automatically picked up and used to parse any child elements. For example, given the following message

     <message from='pubsub.shakespeare.lit' to='francisco@denmark.lit' id='foo>
        <event xmlns='http://jabber.org/protocol/pubsub#event>
           <items node='princely_musings'>
              <item id='asdjkwei3i34234n356'>
                 <entry xmlns='http://www.w3.org/2005/Atom'>
                    <title>Soliloquy</title>
                    <link rel='alternative' type='text/html'/>
                    <id>tag:denmark.lit,2003:entry-32397</id>
                 </entry>
              </item>
           </items>
        </event>
     </message>
     
    I would have a classes ItemsProvider extends EmbeddedExtensionProvider ItemProvider extends EmbeddedExtensionProvider and AtomProvider extends ExtensionElementProvider These classes are then registered in the meta-inf/smack.providers file as follows.
       <extensionProvider>
          <elementName>items</elementName>
          <namespace>http://jabber.org/protocol/pubsub#event</namespace>
          <className>org.jivesoftware.smackx.provider.ItemsEventProvider</className>
       </extensionProvider>
       <extensionProvider>
           <elementName>item</elementName>
           <namespace>http://jabber.org/protocol/pubsub#event</namespace>
           <className>org.jivesoftware.smackx.provider.ItemProvider</className>
       </extensionProvider>