Question

J'ai des erreurs remarquées dans mon Google App Engine Log tandis que les messages de l'analyse. La trace de la pile était inutile de diagnostiquer le problème, donc je l'ai écrit un petit message de dumper inspiré par la mise en œuvre de Google InboundMessageParser .

public class ChatRequestParser extends HttpRequestParser {

    public static Map<String, String> parseMessage(HttpServletRequest request)
    throws IOException {
        try {
            Map<String, String> message = new HashMap<String, String>();
            MimeMultipart multipart = parseMultipartRequest(request);
            int parts = multipart.getCount();
            for (int i = 0; i < parts; i++) {
                BodyPart part = multipart.getBodyPart(i);
                String fieldName = getFieldName(part);
                String fieldValue = getTextContent(part);
                message.put(fieldName, fieldValue);
            }
            return message;
        } catch (MessagingException ex) {
            throw new IOException("Could not parse incoming request.", ex);
        }
    }

}

J'ai découvert que Google envoie deux messages pour chaque message, dont un seul contient un corps (client Gmail envoie Parler un seul message).

Voici le premier message, sans corps:

{to=xxx@appspot.com, stanza=<message to="xxx@appspot.com" type="chat"
from="yyy@gmail.com/TalkGadgetD9F45A83" xmlns="jabber:client">
<cha:composing xmlns:cha="http://jabber.org/protocol/chatstates"/>
<nos:x value="disabled" xmlns:nos="google:nosave"/>
<arc:record otr="false" xmlns:arc="http://jabber.org/protocol/archive"/>
</message>, from=yyy@gmail.com/TalkGadgetD9F45A83}

Et le second est (ma charge utile est beaucoup astérisques, mails modifiés):

{to=xxx@appspot.com, body=**********************************, 
stanza=<message to="xxx@appspot.com" type="chat" 
id="7279D79D0.17809585028724073_:sl" from="yyy@gmail.com/TalkGadgetD9F45A83"
xmlns="jabber:client"><body>**********************************</body>
<cha:active xmlns:cha="http://jabber.org/protocol/chatstates"/>
<nos:x value="disabled" xmlns:nos="google:nosave"/><arc:record otr="false"
xmlns:arc="http://jabber.org/protocol/archive"/></message>,
from=yyy@gmail.com/TalkGadgetD9F45A83}

Depuis le premier message n'a pas un corps appelant parseMessage () sur XMPPService jette exception. Quelqu'un at-il remarqué ce problème?

Maintenant, je suis attrapant le IllegalArgumentException et jeter des messages vides de sens, mais le vrai problème est que la réponse au message valide ne parvient pas à Google + client, tout fonctionne parfaitement avec Gmail et aussi avec mon client Jabber sous Linux.

J'ai déposé question 6467.

Était-ce utile?

La solution

Je peux reproduire le plantage quand aucun corps est réglé et parseMessage est appelé, et je le fixer. Merci pour le trouver!

Cependant, je ne peux pas repro le bug « réponse d'envoi ne fonctionne pas ». J'ai le code comme ceci:

  XMPPService xmpp = XMPPServiceFactory.getXMPPService();
  Message message = xmpp.parseMessage(req);
  Message reply = new MessageBuilder().withFromJid(message.getRecipientJids()[0])
    .withRecipientJids(message.getFromJid())
    .withBody("Back at you!")
    .build();
  xmpp.sendMessage(reply);

Et je reçois la réponse Google+ et dans Gmail. Que faites-vous différemment?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top