2015-06-21 56 views
0

我想將自定義XML添加到傳入消息數據包。爲了做到這一點,作爲插件實現的一部分,我編寫了一個PacketInterceptor,它攔截消息並添加一個擴展。直到這一點,一切都很好,但是當接收者接收到此消息時,存儲在自定義xml中的信息將被刪除。僅顯示具有名稱空間的xml元素。如何使用XMPP在Openfire插件中使用PacketInterceptor爲消息添加自定義XML元素

傳入的消息是常規短信如圖所示如下─

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

    <body>Hi</body> 

</message> 

當我添加自定義XML這個消息體,它看起來在PacketInterceptor日誌 -

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

    <body>Hi</body> 

    <data value="imgURL1"/> 

</message> 

添加XML後,如下但是當接收者接收到該消息時,數據中的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,您應該在Message對象上使用addChildElement方法而不是addExtension方法。 我已經成功使用addChildElement方法在將XMPP消息發送給接收方之前向其添加時間戳。 addChildElement的API非常簡單,並且避免了您必須創建一個全新的文檔。

相關問題