Search in sources :

Example 1 with IqData

use of org.jivesoftware.smack.packet.IqData in project Smack by igniterealtime.

the class PacketParserUtils method parseIQ.

/**
 * Parses an IQ packet.
 *
 * @param parser the XML parser, positioned at the start of an IQ packet.
 * @param outerXmlEnvironment the outer XML environment (optional).
 * @return an IQ object.
 * @throws XmlPullParserException if an error in the XML parser occurred.
 * @throws XmppStringprepException if the provided string is invalid.
 * @throws IOException if an I/O error occurred.
 * @throws SmackParsingException if the Smack parser (provider) encountered invalid input.
 */
public static IQ parseIQ(XmlPullParser parser, XmlEnvironment outerXmlEnvironment) throws XmlPullParserException, XmppStringprepException, IOException, SmackParsingException {
    ParserUtils.assertAtStartTag(parser);
    final int initialDepth = parser.getDepth();
    XmlEnvironment iqXmlEnvironment = XmlEnvironment.from(parser, outerXmlEnvironment);
    IQ iqPacket = null;
    StanzaError error = null;
    IqData iqData = parseIqData(parser);
    outerloop: while (true) {
        XmlPullParser.Event eventType = parser.next();
        switch(eventType) {
            case START_ELEMENT:
                String elementName = parser.getName();
                String namespace = parser.getNamespace();
                switch(elementName) {
                    case "error":
                        error = PacketParserUtils.parseError(parser, iqXmlEnvironment);
                        break;
                    // this element name and namespace.
                    default:
                        IqProvider<IQ> provider = ProviderManager.getIQProvider(elementName, namespace);
                        if (provider != null) {
                            iqPacket = provider.parse(parser, iqData, outerXmlEnvironment);
                        } else // Note that if we reach this code, it is guaranteed that the result IQ contained a child element
                        // (RFC 6120 ยง 8.2.3 6) because otherwise we would have reached the END_ELEMENT first.
                        {
                            // No Provider found for the IQ stanza, parse it to an UnparsedIQ instance
                            // so that the content of the IQ can be examined later on
                            iqPacket = new UnparsedIQ(elementName, namespace, parseElement(parser));
                        }
                        break;
                }
                break;
            case END_ELEMENT:
                if (parser.getDepth() == initialDepth) {
                    break outerloop;
                }
                break;
            default:
                // Catch all for incomplete switch (MissingCasesInEnumSwitch) statement.
                break;
        }
    }
    // Decide what to do when an IQ packet was not understood
    if (iqPacket == null) {
        switch(iqData.getType()) {
            case error:
                // If an IQ packet wasn't created above, create an empty error IQ packet.
                iqPacket = new ErrorIQ(error);
                break;
            case result:
                iqPacket = new EmptyResultIQ();
                break;
            default:
                break;
        }
    }
    // Set basic values on the iq packet.
    iqPacket.setStanzaId(iqData.getStanzaId());
    iqPacket.setTo(iqData.getTo());
    iqPacket.setFrom(iqData.getFrom());
    iqPacket.setType(iqData.getType());
    iqPacket.setError(error);
    return iqPacket;
}
Also used : ErrorIQ(org.jivesoftware.smack.packet.ErrorIQ) UnparsedIQ(org.jivesoftware.smack.packet.UnparsedIQ) EmptyResultIQ(org.jivesoftware.smack.packet.EmptyResultIQ) ErrorIQ(org.jivesoftware.smack.packet.ErrorIQ) UnparsedIQ(org.jivesoftware.smack.packet.UnparsedIQ) IQ(org.jivesoftware.smack.packet.IQ) IqData(org.jivesoftware.smack.packet.IqData) EmptyResultIQ(org.jivesoftware.smack.packet.EmptyResultIQ) IqProvider(org.jivesoftware.smack.provider.IqProvider) XmlEnvironment(org.jivesoftware.smack.packet.XmlEnvironment) StanzaError(org.jivesoftware.smack.packet.StanzaError)

Example 2 with IqData

use of org.jivesoftware.smack.packet.IqData in project Smack by igniterealtime.

the class SmackTestUtil method parse.

@SuppressWarnings("unchecked")
public static <E extends Element> E parse(Reader reader, AbstractProvider<E> abstractProvider, XmlPullParserKind parserKind) throws XmlPullParserException, IOException, SmackParsingException {
    XmlPullParser parser = getParserFor(reader, parserKind);
    final E element;
    if (abstractProvider instanceof Provider) {
        Provider<E> provider = (Provider<E>) abstractProvider;
        element = provider.parse(parser);
    } else if (abstractProvider instanceof IqProvider) {
        IqData iqData = PacketParserUtils.parseIqData(parser);
        parser.next();
        ParserUtils.forwardToStartElement(parser);
        IqProvider<?> iqProvider = (IqProvider<?>) abstractProvider;
        element = (E) iqProvider.parse(parser, iqData);
    } else {
        throw new AssertionError();
    }
    return element;
}
Also used : XmlPullParser(org.jivesoftware.smack.xml.XmlPullParser) IqData(org.jivesoftware.smack.packet.IqData) IqProvider(org.jivesoftware.smack.provider.IqProvider) Provider(org.jivesoftware.smack.provider.Provider) AbstractProvider(org.jivesoftware.smack.provider.AbstractProvider) IqProvider(org.jivesoftware.smack.provider.IqProvider)

Example 3 with IqData

use of org.jivesoftware.smack.packet.IqData in project Smack by igniterealtime.

the class PacketParserUtils method parseIqData.

public static IqData parseIqData(XmlPullParser parser) throws XmppStringprepException {
    final String id = parser.getAttributeValue("", "id");
    IqData iqData = StanzaBuilder.buildIqData(id);
    final Jid to = ParserUtils.getJidAttribute(parser, "to");
    iqData.to(to);
    final Jid from = ParserUtils.getJidAttribute(parser, "from");
    iqData.from(from);
    String typeString = parser.getAttributeValue("", "type");
    final IQ.Type type = IQ.Type.fromString(typeString);
    iqData.ofType(type);
    return iqData;
}
Also used : Jid(org.jxmpp.jid.Jid) IqData(org.jivesoftware.smack.packet.IqData) EmptyResultIQ(org.jivesoftware.smack.packet.EmptyResultIQ) ErrorIQ(org.jivesoftware.smack.packet.ErrorIQ) UnparsedIQ(org.jivesoftware.smack.packet.UnparsedIQ) IQ(org.jivesoftware.smack.packet.IQ)

Aggregations

IqData (org.jivesoftware.smack.packet.IqData)3 EmptyResultIQ (org.jivesoftware.smack.packet.EmptyResultIQ)2 ErrorIQ (org.jivesoftware.smack.packet.ErrorIQ)2 IQ (org.jivesoftware.smack.packet.IQ)2 UnparsedIQ (org.jivesoftware.smack.packet.UnparsedIQ)2 IqProvider (org.jivesoftware.smack.provider.IqProvider)2 StanzaError (org.jivesoftware.smack.packet.StanzaError)1 XmlEnvironment (org.jivesoftware.smack.packet.XmlEnvironment)1 AbstractProvider (org.jivesoftware.smack.provider.AbstractProvider)1 Provider (org.jivesoftware.smack.provider.Provider)1 XmlPullParser (org.jivesoftware.smack.xml.XmlPullParser)1 Jid (org.jxmpp.jid.Jid)1