OPENFIRE支持EMOJI

来源:互联网 发布:linux top 进程名 编辑:程序博客网 时间:2024/06/04 19:38

org.jivesoftware.openfire.nio.ConnectionHandler – Closing connection due to error while  processing message: <message type=”chat” to=”18@chat.aiba.com” dateline=”1369112264.017495″><body>这里是 emoji表情</body></message> java.lang.NumberFormatException: For input string: “?” at  java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) at java.lang.Integer.parseInt (Integer.java:481) at org.jivesoftware.openfire.net.MXParser.more(MXParser.java:384) at  org.jivesoftware.openfire.net.MXParser.nextImpl(MXParser.java:85) at org.xmlpull.mxp1.MXParser.nextToken (MXParser.java:1100) at org.dom4j.io.XMPPPacketReader.parseDocument(XMPPPacketReader.java:317) at  org.dom4j.io.XMPPPacketReader.read(XMPPPacketReader.java:154) at  org.jivesoftware.openfire.net.StanzaHandler.process(StanzaHandler.java:159)

用openfire搭建XMPP服务器时,客户端一发送emoji表情文字就会掉线,错误日志片段如下

 

2013.05.21 12:57:44 


 

可以看到,在MXParser.java的第384行,出了问题,这里是XML的合法性验证代码,因为emoji表情文字的编码不在合法的XML字符范围内,所以只要将这里改掉,就可以正常收发emoji了   将MXParser.java中的more函数改为如下:


@Overrideprotected char more() throws IOException, XmlPullParserException {final char codePoint = super.more(); // note – this does NOT return a// codepoint now, but simply a// (single byte) character!if ((codePoint == 0x0)|| // 0×0 is not allowed, but flash clients insist on sending// this as the very first character of a stream. We should// stop allowing this codepoint after the first byte has// been parsed.(codePoint == 0x9) || (codePoint == 0xA) || (codePoint == 0xD)|| ((codePoint >= 0x20) && (codePoint <= 0xFFFD))|| ((codePoint >= 0xE000) && (codePoint <= 0xFFFD))|| ((codePoint >= 0x10000) && (codePoint <= 0x10FFFF))) {return codePoint;}throw new XmlPullParserException("Illegal XML character: "+ Integer.parseInt(codePoint + "", 16));}



0 0
原创粉丝点击