Package org.jivesoftware.smack.provider
Class EmbeddedExtensionProvider<PE extends XmlElement>
java.lang.Object
org.jivesoftware.smack.provider.AbstractProvider<E>
org.jivesoftware.smack.provider.Provider<E>
org.jivesoftware.smack.provider.ExtensionElementProvider<PE>
org.jivesoftware.smack.provider.EmbeddedExtensionProvider<PE>
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>
-
Nested Class Summary
Nested classes/interfaces inherited from class org.jivesoftware.smack.provider.AbstractProvider
AbstractProvider.NumberFormatParseException, AbstractProvider.TextParseException, AbstractProvider.WrappableParser<E> -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprotected abstract PEcreateReturnExtension(String currentElement, String currentNamespace, Map<String, String> attributeMap, List<? extends XmlElement> content) final PEparse(org.jivesoftware.smack.xml.XmlPullParser parser, int initialDepth, XmlEnvironment xmlEnvironment, org.jxmpp.JxmppContext jxmppContext) Methods inherited from class org.jivesoftware.smack.provider.AbstractProvider
getElementClass, toUrl, wrapExceptions
-
Constructor Details
-
EmbeddedExtensionProvider
public EmbeddedExtensionProvider()
-
-
Method Details
-
parse
public final PE parse(org.jivesoftware.smack.xml.XmlPullParser parser, int initialDepth, XmlEnvironment xmlEnvironment, org.jxmpp.JxmppContext jxmppContext) throws org.jivesoftware.smack.xml.XmlPullParserException, IOException, SmackParsingException - Specified by:
parsein classProvider<PE extends XmlElement>- Throws:
org.jivesoftware.smack.xml.XmlPullParserExceptionIOExceptionSmackParsingException
-
createReturnExtension
-