Как можно разобрать ошибку IQ в smack Java? - PullRequest
0 голосов
/ 27 мая 2019

Я создаю приложение для Android, которое отправляет IQ на компонент XMPP, используя Smack.

Типичный запрос будет выглядеть так:

 <iq to='component.localhost' id='123'>
   <query xmlns='example:bar' extraAttribute='blaz'>
      <extraElement>elementText</extraElement>
   </query>
 </iq>

Я создал класс Java, который расширяет IQ:

public class CustomIQ extends IQ {
    public final static String childElementName = "query";
    public final static String childElementNamespace = "example:bar";
    ...

Я также создал и зарегистрировал провайдера

public static class Provider extends IQProvider {
        @Override
        public Element parse(XmlPullParser parser, int i) throws Exception {
        ...

Это очень хорошо работает для моих случаев использования. Проблема возникает, когда мне нужно проанализировать результат, который включает в себя ответ об ошибке:

<error code="503" type="cancel">
   <service-unavailable  xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"/>
</error>

Это разрывает мое соединение, и я попытался вызвать исключение в методе Provide.parse, и это, похоже, не работает. Аналогично, вызов Stanza.getError также возвращает ноль. Чего мне не хватает?

...