2015-06-21 1 views
0

Я хочу добавить пользовательский XML в входящий пакет сообщений. Чтобы сделать это как часть реализации плагина, я написал PacketInterceptor, который перехватывает сообщение и добавляет расширение. До этого момента все нормально, но когда это сообщение принимается приемником, информация, хранящаяся в пользовательском xml, отключена. Отображается только элемент xml с пространствами имен.Как добавить пользовательский XML-элемент в Message с помощью PacketInterceptor в плагин Openfire с помощью XMPP

Входящие сообщения являются регулярные текстовые сообщения, как показано

ценам ниже
<message to='[email protected]/SomeResource' from='[email protected]/testbot2' id='63S0G-27' type='groupchat'> 

    <body>Hi</body> 

</message> 

При добавлении пользовательских XML в этом теле сообщения, она выглядит, как показано ниже, после добавления XML в PacketInterceptor ЖУРНАЛЫ РЕГИСТРАЦИИ-

<message to='[email protected]/SomeResource' from='[email protected]/testbot2' id='63S0G-27' type='groupchat'> 

    <body>Hi</body> 

    <data value="imgURL1"/> 

</message> 

Но когда это сообщение принимается приемником, атрибут value в данных отключен и ниже сообщение принимается участником -

<message to='[email protected]/SomeResource' from='[email protected]/testbot2' id='63S0G-27' type='groupchat'> 

    <body>Hi</body> 

    <data xmlns='jabber:client'></data> 

</message> 

Обратите внимание, что текст и атрибуты удаляются с узла XML данных.

Ниже Java кода для справки

public void interceptPacket(Packet packet, Session session, boolean incoming, boolean processed) throws PacketRejectedException { 

    // Some code 

    Message messagePacket = (Message) packet; 
    Document document = DocumentHelper.createDocument(); 
    Element root = document.addElement("data"); 
    Element root1 = root.addAttribute("value", "imgURL1"); 
    PacketExtension pe = new PacketExtension(root1); 
    messagePacket.addExtension(pe); 

} 

ответ

0

При реализации метода interceptPacket вам нужно обратить особое внимание на различные параметры. Один и тот же пакет XMPP будет перехвачен несколько раз. Убедитесь, что вы только перехватываете входящие пакеты, которые не обрабатываются. Вы делаете это, записывая условное выражение для булевых значений, переданных методу.

Что касается обеспечения правильного создания XML, вы должны использовать метод addChildElement, а не метод addExtension объекта Message. Я успешно использовал метод addChildElement до того, как добавить метку времени в сообщение XMPP до ее отправки в приемник. API для addChildElement прост и позволяет вам создавать совершенно новый документ.